跳转至

CS231N Lecture 14: Generative Models (Part 2)

LaTeX 源码 · 备用 PDF

字段 内容
作者/整理 基于 Justin Johnson 授课内容整理
来源 Stanford Online
日期 2025年5月20日

CS231N Lecture 14: Generative Models (Part 2)

引言:这一讲到底想解决什么

上一讲已经把生成式建模的前半张图铺好了:autoregressive 模型直接分解 \(p(x)\),VAE 用 latent variable 和 ELBO 近似建模数据分布,GAN 走向隐式密度,diffusion 则把生成变成逐步去噪。今天这一讲不是“再加一个模型名字”,而是把这张图的后半边补完整,并且把现代图像、视频生成系统为什么会变成“模块拼装”的样子讲清楚。

标题页:本讲延续上一讲的生成式建模主线,重点放在 GAN、diffusion、latent diffusion 和现代多模态生成管线

来源:Slides 第1页。

本讲主线

这讲的核心不是“哪个模型更酷”,而是把同一个问题拆成四个层次:

  • 生成机制:noise 如何变成 data
  • 训练机制:监督信号从哪里来
  • 采样机制:如何在推理时真正生成样本
  • 工程机制:为什么现代系统几乎一定要拼接 VAE、GAN、diffusion、Transformer 和 text encoder

先把生成模型的家族图再看一遍

从讲义角度,最容易混淆的是“显式密度”和“隐式密度”这两个维度。显式密度模型试图直接写出或近似写出 \(p(x)\);隐式密度模型不强调概率值本身,而强调能否从模型里采样出看起来像真的样本。前者重 likelihood,后者重 sample quality。

上一讲的回顾:判别式模型学 \(p(y x)\),生成式模型学 \(p(x)\) 或 \(p(x y)\)

来源:Slides 第3页。

生成模型家族树:autoregressive 和 VAE 属于显式密度,GAN 和 diffusion 则分别代表隐式采样和逐步去噪

来源:Slides 第4页。

方法 密度视角 训练信号 采样方式 最典型的工程特征
Autoregressive 显式密度 最大化对数似然 逐 token 采样 似然好看,但 raw pixels 上极慢
VAE 近似显式密度 ELBO 一步解码 latent 结构清楚,但重建容易糊
GAN 隐式密度 对抗博弈 一步生成 样本锐利,但训练极不稳定
Diffusion / flow 逐步运输 / 去噪 回归向量场或 score 多步积分 训练稳,但采样慢
Latent diffusion 压缩后的 diffusion 先学 autoencoder,再学 diffusion latent 上多步采样 这是现代图像/视频系统的主干
这一讲的知识地图:不同生成模型本质上都在解决“如何从简单噪声到复杂数据”的同一个问题,只是训练信号和采样代价不同

为什么今天的主角是 GAN 和 diffusion

autoregressive 和 VAE 已经在上一讲讲过,这一讲重点是两条后半路:GAN 让我们看到了“不要显式建模密度也能生成很漂亮的样本”,diffusion 则让我们看到“把生成拆成很多个小步骤,训练会稳很多”。这两条路最后没有互相消灭,反而在工业里合流成一套组合拳。

今天的目标页:本讲从上一讲的三类模型继续往下走,进入 GAN 和 diffusion

来源:Slides 第7页。

一眼看懂本讲的结论

如果只记一件事,就是这句:现代生成式系统不是“选一个模型”,而是“组合一组互补模块”。GAN 提供锐利感,VAE 提供压缩与 latent,diffusion 提供稳定训练,Transformer 提供可扩展主干,text encoder 提供条件控制。

GAN:隐式密度的经典答案

GAN 为什么重要

GAN 的出现改变了生成模型的主流叙事。它不再强求写出 \(p(x)\),而是让一个生成器 \(G(z)\) 从简单噪声出发直接产出样本,再让判别器 \(D(x)\) 去判断“真还是假的”。这种方法把生成任务改写成一个博弈问题,直观、简洁,而且在图像上能得到非常锐利的结果。

GAN 章节开场:从上一讲的 autoregressive / VAE 自然过渡到隐式密度模型

来源:Slides 第11页。

GAN 的基本数据流:从简单先验 \(p(z)\) 采样,经过生成器得到假样本,再交给判别器做真伪判断

来源:Slides 第14页。

GAN 的关键设定

  • \(z \sim p(z)\) 是简单先验,通常是标准高斯。
  • \(G(z)\) 把噪声映射成图像或其他样本。
  • \(D(x)\) 输出“这个样本是真实数据的概率”。
  • 训练目标不是拟合标签,而是让生成分布 \(p_G\) 尽量接近真实分布 \(p_{\text{data}}\)

GAN 和判别式任务的关系

判别器 \(D\) 看起来像一个二分类器,但它不是我们最终要交付的模型。它的角色更像“训练时的评审员”:通过判断真伪来给生成器提供梯度。真正要学的是生成分布,而不是一个分类标签。

训练目标不是普通 loss

GAN 的经典目标是一个 minimax game:

\[ \min_G \max_D \; \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] \;+\; \mathbb{E}_{z \sim p(z)}[\log(1 - D(G(z)))] \]

这个式子很像一个普通 loss,但本质上它不是。它是两个玩家在互相追逐:判别器想把真样本打高分、假样本打低分;生成器想骗过判别器,让假样本看起来像真样本。

GAN 的经典 minimax 目标:一个生成器和一个判别器在对抗中共同优化

来源:Slides 第16页。

交替更新伪代码:GAN 不是最小化一个单一标量 loss,而是轮流更新 \(D\) 和 \(G\)

来源:Slides 第21页。

为什么 GAN 的训练曲线不好看

GAN 没有一个稳定、可解释、可单调下降的总 loss。你看到的 \(D\) loss 或 \(G\) loss 只能说明当前博弈状态的一部分,不能像监督学习那样直接解释为“训练变好了多少”。

为什么早期训练会梯度消失

GAN 初期最常见的情况是:生成器还很弱,判别器一下子就能把真伪分开。于是 \(D(G(z)) \approx 0\),这时候如果生成器直接最小化 \(\log(1-D(G(z)))\),梯度会很弱,更新信号几乎传不回来。

GAN 训练早期的典型问题:判别器过强时,生成器几乎拿不到有用梯度

来源:Slides 第24页。

非饱和损失是实战补丁

实践中常用的 generator loss 不是原始的 \(\log(1-D(G(z)))\),而是

\[ \mathcal{L}_G = -\log D(G(z)). \]

这样做的目的很朴素:当判别器很强时,生成器仍然能收到比较有用的梯度,不至于一开始就“学不动”。

为什么这个目标理论上是合理的

如果判别器容量足够、优化足够理想,那么固定生成器时的最优判别器是

\[ D^*(x)=\frac{p_{\text{data}}(x)}{p_{\text{data}}(x)+p_G(x)}. \]

把这个 \(D^*\) 代回去,外层目标会变成一个和 Jensen-Shannon divergence 相关的量。于是理想情况下,最小化这个博弈等价于让 \(p_G\) 逼近 \(p_{\text{data}}\)

GAN 理论直觉:固定 \(G\) 时,最优判别器可以写成一个密度比;理想条件下,外层目标会推动 \(p_G\) 向 \(p_data\) 靠拢

来源:Slides 第28页。

理论正确不等于训练可行

这个结论依赖很强的理想化前提:无限模型容量、完美优化、有限样本误差可忽略。现实里这些条件都不成立,所以“理论上能证明”并不等于“训练一定顺利”。

GAN 的优点和缺点

  • 优点:采样快,视觉效果往往很好,生成结果锐利。
  • 缺点:训练不稳定,模式塌缩明显,loss 很难解释。
  • 工程限制:没有显式密度,评估和调参比显式模型更靠经验。

经典架构:DCGAN 和 StyleGAN

GAN 真正能从 toy example 走向真实图像数据,是靠架构上的一系列经验修正。DCGAN 把卷积引入生成器和判别器,让网络更适合处理图像结构;StyleGAN 则进一步把“风格”注入每一层,显著提升了可控性和视觉质量。

DCGAN:GAN 第一次在非 toy 数据上真正跑通的重要架构

来源:Slides 第30页。

StyleGAN 的核心思路:通过自适应归一化把 style 分量注入各层特征

来源:Slides 第32页。

StyleGAN 里最值得读懂的地方不是“名字叫 style”,而是它对每层特征做了可控的 scale 和 shift。可以把它理解成:生成器不只是拿一个 latent 一次性吐图,而是让 latent 在不同尺度上持续影响图像的纹理、局部结构和语义细节。

\[ \begin{equation} \mathrm{AdaIN}(x,w,b)_i = w_i \frac{x_i - \mu(x)}{\sigma(x)} + b_i \end{equation} \]

StyleGAN 的工程含义

分层注入 style 有两个好处:

  • 低层更容易控制粗结构,高层更容易控制纹理和细节。
  • latent space 往往更平滑,便于插值、编辑和风格混合。

Latent interpolation 和生成空间

GAN 很经典的一个现象是 latent interpolation 平滑。给定两个 latent 向量 \(z_0\)\(z_1\),如果沿线性路径做插值,再送入生成器,图像往往会连续变形,而不是突然跳变。这说明生成器学到的 latent geometry 至少在局部上是有意义的。

GAN 的 latent interpolation:在潜空间中平滑插值,输出图像也通常会平滑过渡

来源:Slides 第34页。

这件事为什么重要

平滑插值不是花哨演示,而是说明生成模型学到的 latent 表示不是随机噪声。它至少在局部上组织了语义结构,所以 latent editing、style mixing 和条件控制才有可能成立。

GAN 这一节的结论

GAN 小结:简单目标、很好的样本质量、但训练不稳定且难以扩展

来源:Slides 第35页。

GAN 留下的遗产

GAN 没有消失,它只是退回到了“局部模块”的位置。现代系统仍然会从 GAN 借用:

  • 对抗损失来提升局部真实感
  • latent space 里的插值和编辑思路
  • 对高频细节的偏好

Diffusion:把生成变成逐步去噪

为什么 diffusion 会赢到今天

GAN 给了我们很锐利的图,但训练太难。diffusion 的思路正好相反:别指望一次把噪声变成图,而是把生成拆成很多个小修正。每一步只做一点点“去噪”或“transport”,这样训练就更像回归问题,稳定得多。

Diffusion 章节起点:从 GAN 转向逐步去噪的生成思路

来源:Slides 第36页。

这一领域的术语非常乱

Diffusion、score-based model、SDE、DDPM、rectified flow、flow matching,很多时候都在描述近亲算法。名字不同,数学形式也可能不同,但核心都绕不开两件事:往数据里加噪,以及学会把噪声再拿回来

最朴素的直觉

最简单的理解方式是:先选一个容易采样的噪声分布 \(p_{\text{noise}}\),通常是标准高斯。训练时,把真实样本 \(x\) 按不同噪声强度扰动成 \(x_t\),然后让网络 \(f_\theta(x_t,t)\) 学会在每个噪声水平上“往干净方向推一点点”。

Diffusion 模型的基本提醒:名字很多,但我们只讲一个清晰版本,rectified flow

来源:Slides 第37页。

Diffusion 的直觉:训练一个网络来“去掉一点噪声”,而不是一次性生成整张图

来源:Slides 第40页。

在这个视角里,生成并不是“凭空画图”,而是一个从噪声空间沿着学习到的方向场逐步回到数据流形的过程。采样的时候,只要从纯噪声开始,不断重复这个修正步骤,就能得到最后的样本。

Diffusion 推理过程:从纯噪声开始,反复调用同一个网络,逐步回到无噪声样本

来源:Slides 第41页。

Diffusion 和判别式任务的关系

diffusion 的核心训练形式不是分类,而是连续值回归:网络要学的是去噪方向、速度场或 score。它和判别式任务的交集主要体现在条件模型里,比如 CFG 早期的 classifier guidance 会借助一个额外分类器来提供梯度,但 CFG 本身已经把这一步收进生成模型里了。

Rectified flow:最清楚的版本

这一讲选 rectified flow 作为“现代 clean implementation”的代表,是因为它足够简单,足够接近工程实践,也足够容易把核心思想讲透。

训练时每次采样:

\[ z \sim p_{\text{noise}}, \qquad x \sim p_{\text{data}}, \qquad t \sim \mathrm{Uniform}(0,1) \]

然后定义中间点和目标速度:

\[ x_t = (1-t)x + tz, \qquad v = z - x. \]

最后让网络回归这个速度场:

\[ \mathcal{L}(\theta)=\mathbb{E}\left[\|f_\theta(x_t,t)-v\|_2^2\right]. \]

Rectified flow 训练:先采样数据、噪声和时间,再构造中间点和目标速度

来源:Slides 第44页。

Rectified flow 的损失就是一个回归损失:让网络预测从 \(x\) 指向 \(z\) 的向量场

来源:Slides 第45页。

为什么 rectified flow 适合教学

  • 训练像普通回归,损失函数直观。
  • 采样像数值积分,步骤清楚。
  • 既能保留 diffusion 的逐步生成优势,也能把数学和工程解释都压到很低的理解门槛。

采样:从噪声一路积分回数据

采样阶段从噪声 \(x_1 \sim p_{\text{noise}}\) 出发。若把区间 \([0,1]\) 切成 \(T\) 份,就可以做一个简单的 Euler 更新:

\[ x \leftarrow x - \frac{1}{T} f_\theta(x,t) \]

\(t=1\) 一直走到 \(t=0\)。直觉上,这就是沿着学到的速度场把点从噪声流形搬回数据流形。

Rectified flow 采样:先选定步数 \(T\),然后从噪声样本开始沿速度场逐步前进

来源:Slides 第48页。

采样过程中的中间更新:每一步只修正一小段,避免一步走太猛

来源:Slides 第51页。

采样收敛到最终结果:把多步局部修正累积成一个完整样本

来源:Slides 第55页。

为什么中间噪声最难

rectified flow 里一个很重要的训练观察是:极高噪声和极低噪声相对容易,真正难的是中间噪声。原因很简单:在中间区域,同一个 \(x_t\) 可能对应很多不同的 \((x,z)\) 对,网络必须学会对这些可能性做平均;这比“几乎没噪声”或“几乎全噪声”都更模糊。

Rectified flow 小结:训练就是拟合速度场,采样就是把速度场积分回来

来源:Slides 第58页。

噪声调度不是装饰品

如果总是均匀采样 \(t\),训练会把太多精力浪费在“容易的极端噪声”上。真正影响模型效果的,往往是中间区间的样本。因此噪声 schedule 是模型设计的一部分,不是可有可无的调参细节。

什么是“现代 clean implementation”

这一讲把 diffusion 的教学目标压缩成三个词:训练简单采样稳定可以规模化。这也是为什么 diffusion 最后成为主流:它没有 GAN 那么刺激,但训练过程更像一个可控的工程系统。

条件生成与 CFG

从无条件生成到条件生成

真正有用的生成模型几乎都不是无条件的。我们通常想要的是“给定类别、文本、草图、边界框、掩码以后再生成”。在 rectified flow 或 diffusion 里,这很自然:把条件 \(y\) 作为额外输入即可。

条件 rectified flow:模型不仅要知道噪声状态,还要知道条件 \(y\)

来源:Slides 第62页。

条件生成的真实需求

工程上,条件不是“锦上添花”,而是生成系统是否能落地的关键:

  • 文本生成图像需要 prompt
  • 图像编辑需要掩码或参考图
  • 视频生成需要时间一致性和语义约束
  • 产品级系统必须允许用户控制结果

Classifier-free guidance 的核心思想

CFG 的做法非常巧:训练时随机把条件 \(y\) 丢掉,让同一个模型同时学会 conditional 和 unconditional 两种模式。于是推理时我们可以分别得到

\[ v_{\emptyset}=f_\theta(x_t,\varnothing,t), \qquad v_y=f_\theta(x_t,y,t). \]

然后用线性组合控制“听话程度”:

\[ v_{\text{cfg}}=(1+w)v_y-wv_{\emptyset}. \]

CFG 的两条向量场:一个是无条件方向,一个是带条件方向

来源:Slides 第66页。

CFG 的线性组合:通过放大条件向量场,把采样方向更明显地拉向条件分布

来源:Slides 第67页。

CFG 的直觉

可以把 \(v_{\emptyset}\) 理解成“往一般数据流形走”,把 \(v_y\) 理解成“往满足条件的子流形走”。CFG 不是重新训练一个模型,而是通过线性外推,把采样方向更强地推向条件分布。

为什么 CFG 如此重要

CFG 之所以几乎成了现代扩散模型标配,是因为它同时解决了两个问题:

  1. 不需要额外训练一个独立 classifier。
  2. 采样时可以直接控制 condition strength。

CFG 的来源:早期方法需要额外分类器来估计 \(_x p(y x)\),CFG 则把这件事并入同一个生成模型

来源:Slides 第71页。

CFG 的代价

CFG 的代价也很直接:采样时通常要跑两次模型,一次 conditional,一次 unconditional,所以推理成本会翻倍。更大的 guidance scale 往往更“听话”,但也更容易牺牲多样性。

CFG 的实战结论:它非常重要,也确实会增加采样成本

来源:Slides 第72页。

噪声调度:为什么中间区域最值得关注

为什么要重新采样 \(t\)

训练 diffusion 或 rectified flow 时,不能把所有噪声水平一视同仁。最难的区域通常在中间噪声附近:信息既不够清晰,也没到完全随机。这个区域才是模型真正要“学会平均”的地方。

Optimal prediction:网络在中间噪声上最难,因为同一个 \(x_t\) 可能来自很多不同的 \((x,z)\) 对

来源:Slides 第73页。

极端噪声很容易:\(t=1\) 时更接近纯噪声,\(t=0\) 时更接近真实数据

来源:Slides 第76页。

为什么中间噪声最难

在中间噪声区域,输入还保留一部分结构,但又不足以唯一决定答案。模型在这里要处理的是“多对一”的平均问题,而不是简单复原。这也是噪声 schedule 设计最关键的地方。

非均匀 schedule 不是细节,而是模型设计

如果训练时对所有噪声水平等权处理,就会让模型在大量“容易样本”上浪费算力。于是更好的做法是用非均匀噪声分布,比如 logit-normal sampling,甚至在高分辨率任务里把分布往更高噪声区域偏一点。

噪声调度的结论:解决办法不是均匀采样,而是让训练更多覆盖中间噪声区域

来源:Slides 第80页。

常见选择:logit-normal 采样,并在高分辨率任务里适当上移噪声分布

来源:Slides 第82页。

schedule 影响的不只是收敛速度

schedule 不只是“调收敛快慢”,它直接影响网络看到的数据难度分布。换句话说,schedule 改变了你到底在教模型先学什么、后学什么。

Latent diffusion:把贵的部分压缩掉

为什么要进 latent space

把 diffusion 直接跑在高分辨率像素上太贵了。空间分辨率一高,token 数量和计算成本就会迅速膨胀。于是一个很实用的策略出现了:先用 encoder 把图像压缩到更小的 latent,再在 latent 上做 diffusion,最后再用 decoder 还原。

直接在高分辨率图像上做 diffusion 不够经济,latent diffusion 的动机正是压缩空间分辨率

来源:Slides 第85页。

Latent diffusion 的结构:图像先被编码成 latent,再在 latent 上做 diffusion,再解码回图像

来源:Slides 第86页。

latent diffusion 为什么成为工业主流

这一步不是“稍微省点显存”这么简单,而是把生成难题转移到了更适合建模的空间里。latent 维度更低,模型更容易学到语义结构,采样成本也明显下降。

VAE 是 latent diffusion 的前半段

latent diffusion 里 encoder / decoder 通常来自 VAE。训练时需要同时优化重建项和 KL prior,但 KL 往往会被压得很小,因为这里的目标是压缩和保真,而不是强约束 latent 服从某种过强的先验。

如何训练 encoder 和 decoder:本质上就是一个 VAE

来源:Slides 第94页。

VAE 的现实问题:decoder 往往会发糊,单靠重建项很难拿到很锐利的细节

来源:Slides 第95页。

为什么纯 VAE 容易模糊

VAE 的 decoder 追求的是条件平均意义上的重建最优,而不是感知质量最优。对于多解的高频细节,平均往往意味着“糊”。这就是为什么后续工程里经常要引入 GAN 式的对抗约束来补锐度。

为什么现代系统是 VAE + GAN + diffusion

当 decoder 细节不够锐利时,就可以加一个 discriminator 帮它把输出推向更自然的图像外观。于是 latent diffusion 的前半段是 VAE,后半段是 diffusion,局部细节修正则借用了 GAN 的思路。

一个真实的现代管线不是“单模型”,而是 VAE + GAN + diffusion 的组合

来源:Slides 第97页。

现代 LDM 管线的分工

  • VAE 负责压缩和还原
  • GAN 负责局部质感和清晰度
  • diffusion 负责全局生成和条件控制

Latent diffusion 的基本工作流:先采样随机 latent,再逐步去噪,最后经 decoder 输出图像

来源:Slides 第92页。

DiT、Text-to-Image 和 Text-to-Video

为什么 Transformer 又回来了

当 diffusion 进入 latent space 后,主干网络就越来越像一个序列建模问题。于是 Transformer 再次变得非常自然:token 序列、时间步条件、文本条件,都可以比较统一地接进去。DiT 的关键问题不是“能不能用 Transformer”,而是“怎么把条件信号优雅地注入进去”。

Diffusion Transformer:把 diffusion 变成标准 Transformer block 的问题,核心是条件注入方式

来源:Slides 第98页。

最常见的时间步注入方式之一:对归一化后的特征做 scale/shift 调制

来源:Slides 第100页。

DiT 里最重要的两类 conditioning

  • timestep conditioning:通常用 scale-shift / AdaLN 方式注入
  • text or multimodal conditioning:通常用 cross-attention 或 joint attention

Text-to-Image

文本到图像的标准管线非常清楚:prompt 先进入预训练 text encoder,然后 text embedding 和 noisy latent 一起进入 diffusion transformer,最后经过 decoder 还原成图像。这里最关键的不是“把文字转成图片”这么一句话,而是“让条件信号真的参与了生成轨迹的每一步修正”。

Text-to-image 的标准结构:text encoder、diffusion transformer 和 decoder 组成一条完整的条件生成链路

来源:Slides 第101页。

一个工业级例子:FLUX.1 把文本编码、latent diffusion 和大规模 Transformer 组合到一起

来源:Slides 第102页。

为什么 text-to-image 看起来像“多模型拼装”

因为它本来就是。文本编码器通常是预训练并冻结的;latent encoder / decoder 负责压缩和还原;真正学生成过程的是 diffusion 主干。工程上,每个模块都在做自己最擅长的事。

Text-to-Video

视频生成比图像生成贵得多,原因不是“多了一维”这么简单,而是时序一致性、运动一致性、跨帧语义一致性都会把 token 数和计算成本推高。到了视频场景,latent 往往是 \(t \times h \times w \times c\),模型要同时处理空间和时间。

Text-to-video 的结构:同样是 text encoder + diffusion transformer + decoder,但 latent 里多了时间维度

来源:Slides 第103页。

现代视频模型示意:token 数和 latent 尺度迅速上升,模型规模也随之暴涨

来源:Slides 第105页。

视频 diffusion 的时代已经到来:多个大模型家族同时围绕视频生成展开竞争

来源:Slides 第106页。

为什么还要 distillation

Diffusion 的采样成本本来就高。latent diffusion 好不容易把每一步便宜化了,但如果还要跑 30--50 步,推理依旧会慢。于是 distillation 成为必需:把多步采样压成更少步,甚至一步,并且有时还能把 CFG 一起蒸馏进去。

扩散蒸馏的动机:采样需要很多步,所以推理会很慢

来源:Slides 第108页。

蒸馏在这里解决的是什么

蒸馏不改变“模型学什么”,主要是在改变“模型怎么被执行”:

  • 把多步采样压缩成少步
  • 把 CFG 的效果直接 bake 进学生模型
  • 让 diffusion 系统更接近产品级时延要求

Generalized diffusion:不同公式,其实同一思想

统一写法

到这里,diffusion 的不同流派已经足够多了。lecture 里进一步给了一个统一写法。把不同版本的 noising path 和预测目标都写成同一个模板后,很多看起来不同的算法会突然变得可比:

\[ x_t = a(t) x + b(t) z,\qquad y_{\text{gt}} = c(t)x + d(t)z,\qquad y_{\text{pred}} = f_\theta(x_t,t). \]

训练目标就是让 \(y_{\text{pred}}\) 逼近 \(y_{\text{gt}}\)

Generalized diffusion 的统一形式:rectified flow 只是其中一个特例

来源:Slides 第109页。

把 rectified flow 写成通用模板后,就能看清它和其他 diffusion 变体的关系

来源:Slides 第110页。

几个最重要的特例

在这个统一模板里,不同方法只是对 \(a,b,c,d\) 的选择不同:

Rectified flow 作为特例:\(a(t)=1-t,\ b(t)=t,\ c(t)=-1,\ d(t)=1\)

来源:Slides 第111页。

Variance preserving (VP) 的思路:保持中间态的方差结构更稳定

来源:Slides 第112页。

Variance exploding (VE) 的思路:让噪声足够大,彻底淹没原始信号

来源:Slides 第113页。

预测目标的几种写法:x-prediction、epsilon-prediction 和 v-prediction

来源:Slides 第114页。

为什么这些写法本质上是同一件事

  • x-prediction 直接预测干净样本
  • epsilon-prediction 预测噪声
  • v-prediction 预测二者的线性组合

它们看起来不同,但都在学同一条“从噪声回到数据”的路径,只是参数化方式不同。

Diffusion 的三种解释

lecture 进一步指出,diffusion 不只是“一个训练技巧”,它还有三种常见解释。

Diffusion 作为 latent variable model:前向加噪是已知过程,反向生成是学出来的近似后验

来源:Slides 第116页。

第一种是 latent variable model 视角:前向过程把数据变成 latent trajectory,反向过程则通过 ELBO 或相关目标去拟合。第二种是 score matching 视角:模型学习的是 \(\nabla_x \log p(x)\),也就是指向高密度区域的向量场。第三种是 SDE / ODE 视角:噪声演化可以写成连续时间动力系统,采样就是数值积分。

Diffusion 学到的是 score:梯度场把样本往高概率区域推

来源:Slides 第117页。

SDE 视角:连续 noising 可以写成微分方程,采样就是沿该动态系统反向积分

来源:Slides 第118页。

这三种视角不是互斥的

把 diffusion 解释成 latent model、score model 或 SDE,并不意味着它们是三种不同算法。更准确的说法是:它们是同一套生成过程的不同投影。工程上,你只需要选一个最方便实现和调参的参数化。

一个很好的外部阅读线索:Sander Dieleman 关于 diffusion 视角的总结博客

来源:Slides 第119页。

Autoregressive models strike back

为什么 AR 又回来了

raw pixels 上的 autoregressive 模型太慢了,因为序列太长。但如果把图像先压到离散 latent 空间,AR 就重新变得可行。也就是说,AR 不是被 diffusion 完全淘汰了,而是换了赛道:它更适合做离散 token 的序列建模。

Autoregressive models strike back:它们在 raw pixels 上太慢,但在离散 latent 上又重新变得好用

来源:Slides 第120页。

离散 latent + AR:先学 encoder/decoder,再让 autoregressive 模型预测离散码本索引

来源:Slides 第121页。

为什么离散 latent 很有吸引力

离散 latent 把图像压缩成更短的 token 序列,序列建模任务就从“生成几十万像素”变成“生成一小串离散码”。这对 Transformer 特别友好,也让高质量文本到图像生成再次有了 AR 路线。

总结与延伸

本章小结

从四条线收束成一条主线

这一讲虽然看起来覆盖了很多东西,但其实只有一条核心主线:从噪声到样本的变换,最终都可以看成一条可学习的运输路径。GAN 用对抗博弈逼近这条路径,diffusion / rectified flow 用逐步去噪或速度场积分来实现它,latent diffusion 把这条路径搬到更便宜的表示空间里,Transformer 则负责把条件和序列建模接起来。

总图:GAN、diffusion、latent diffusion 和现代条件生成管线已经合流成一套工程体系

来源:Slides 第122页。

最后的 takeaways

  1. GAN 的核心价值是高质量样本,但它训练不稳,且不适合把自己当作标准监督学习来理解。
  2. Diffusion / rectified flow 把生成拆成多个小步,训练更稳,数学和工程解释都更清楚。
  3. CFG 几乎是现代条件扩散的标配,它让“听话程度”成为可调参数。
  4. Latent diffusion 让高分辨率生成变得可承受,是今天最常见的图像和视频生成范式。
  5. Generalized diffusion 告诉我们:很多名字不同的方法,本质上只是同一套运输问题的不同参数化。
  6. AR on discrete latents 说明 autoregressive 并没有过时,只是从 raw pixels 迁移到了更合适的表示空间。

和前两讲的联系

如果把上一讲和这一讲合起来看,就会发现生成式建模其实一直在做同一件事:用可计算的方式把简单分布变成复杂数据分布。区别只在于,你是选择直接分解概率、通过 latent 变分近似、用对抗博弈、还是用逐步去噪。现代系统之所以复杂,是因为它们已经不满足于“能生成”,而要同时满足“质量高、可控、可扩展、可部署”。

下一讲预告:Vision + Language

来源:Slides 第123页。

延伸阅读

  • Goodfellow et al., Generative Adversarial Nets (2014)
  • Ho et al., Denoising Diffusion Probabilistic Models (2020)
  • Song et al., Score-Based Generative Modeling through SDEs (2021)
  • Liu et al., Flow Straight and Fast: Learning to Generate and Transfer Data with Rectified Flow (2022)
  • Rombach et al., High-Resolution Image Synthesis with Latent Diffusion Models (2022)
  • Peebles and Xie, Scalable Diffusion Models with Transformers (2023)