跳转至

1.1 生成模型全景与扩散直觉

所属章节:第 1 章 扩散模型基础
课时:90 分钟
前置:概率论基础、深度学习基础
对应面试题:D6(主)、A2(引入)、A5(引入)
一句话目标:学完能用自己的话解释“扩散为什么出现、它和 GAN/VAE/Flow 有什么不同”,并给出 90 秒面试回答。


1. 学习目标

学完本节,你应该能够:

  1. 解释生成模型的三种建模语言:显式密度、隐式密度、score;
  2. 比较 GAN、VAE、Flow、Diffusion 的训练目标、采样方式和优缺点;
  3. 说明扩散模型“前向破坏、反向恢复”的直觉;
  4. 回答“为什么扩散模型训练更稳定、采样更慢”;
  5. 区分 DDPM(算法)与 LDM(系统)这两个容易混淆的概念;
  6. 用 90 秒回答“GAN 和 Diffusion 的区别”,并接住两层追问。

2. 为什么先学“全景”,而不是直接推 DDPM

如果一上来就写 \(q(x_t\mid x_{t-1})\),很容易陷入公式,却不知道它在整个生成模型版图中的位置。面试官问“DDPM 和 GAN 的区别”时,如果你只会背“一个对抗、一个去噪”,很难拿高分。

先建立坐标系,有三个好处:

  1. 知道 Diffusion 不是凭空出现的:它继承了 VAE 的变分思想、score matching 的梯度思想、SDE 的连续时间思想;
  2. 知道 Diffusion 的取舍:训练稳定、采样慢、可控性强;
  3. 知道面试官在比较什么:训练信号、采样步数、模式覆盖、似然、可控性。

所以本节不追求公式细节,而是先回答:生成模型到底在学什么?Diffusion 用什么方式学?


3. 生成模型到底在学什么

生成模型的目标,是学习数据分布 \(p_{\mathrm{data}}(x)\),并能够:

  • 采样:从学到的分布中生成新样本;
  • 密度估计(可选):给一个样本 \(x\) 打分 \(\log p_\theta(x)\);
  • 条件生成(可选):学 \(p(x\mid c)\),如文本到图像。

不同路线的主要区别是:

问题 GAN VAE Flow Diffusion
怎么表示分布 隐式,生成器 潜变量 + 解码器 可逆变换 去噪过程
怎么训练 对抗 ELBO 精确似然 变分/score
怎么采样 一步 一步(解码) 一步(逆变换) 多步去噪
有没有似然 一般没有 下界 有 下界/score
典型问题 不稳定、模式坍塌 模糊、后验坍塌 架构受限 慢、计算重

这张表是本节最重要的产出。面试时能画出来,比背十句话更有用。


4. 四条路线,各自在解决什么

4.1 GAN:用判别器代替似然

GAN 有一个生成器 \(G\) 和一个判别器 \(D\):

\[ \min_G\max_D\; \mathbb E_{x\sim p_{\mathrm{data}}}[\log D(x)] +\mathbb E_{z\sim p_z}[\log(1-D(G(z)))]. \]

直觉:

  • 生成器把噪声 \(z\) 映射成样本;
  • 判别器区分真/假;
  • 两者对抗,生成器逐渐逼近数据分布。

优点:

  • 采样快,通常一步;
  • 样本往往很锐利;
  • 在特定域(人脸、超分)很强。

缺点:

  • 训练不稳定,生成器/判别器容易失衡;
  • 模式坍塌(mode collapse);
  • 一般没有似然;
  • 条件控制不如 Diffusion 自然。

面试要点:GAN 是隐式密度模型,不显式建模 \(p(x)\),而是学一个采样映射。

4.2 VAE:用潜变量和 ELBO

VAE 假设数据由潜变量 \(z\) 生成:

\[ z\sim p(z)=\mathcal N(0,I),\qquad x\sim p_\theta(x\mid z). \]

编码器近似后验 \(q_\phi(z\mid x)\),训练最大化 ELBO:

\[ \log p(x) \ge \mathbb E_{q_\phi(z\mid x)}[\log p_\theta(x\mid z)] -D_{\mathrm{KL}}(q_\phi(z\mid x)\|p(z)). \]

优点:

  • 有概率框架,可采样;
  • 潜空间连续、平滑;
  • 重参数化让训练稳定。

缺点:

  • 像素级重建容易模糊;
  • KL 过强会导致 posterior collapse;
  • 先验/解码器容量有限。

面试要点:VAE 是显式密度(下界)模型;它的潜空间思想被 LDM 继承,但 Stable Diffusion 的 VAE 不是用来“生成”的,而是用来压缩图像。

4.3 Flow:用可逆变换做精确似然

Flow 模型用一系列可逆变换 \(f\) 把简单分布映射到数据分布:

\[ x=f(z),\qquad \log p(x)=\log p(z)-\log\left|\det\frac{\partial f}{\partial z}\right|. \]

优点:

  • 精确似然;
  • 可逆,编码/解码一致;
  • 采样一步。

缺点:

  • 网络必须可逆,架构受限;
  • 雅可比行列式计算昂贵;
  • 表达能力和工程灵活性不如 Diffusion。

面试要点:Flow 和 Diffusion 都可以写成连续变换/ODE,但 Flow 通常要求可逆、精确似然;Diffusion 用多步去噪近似分布。

4.4 Diffusion:学习“破坏—恢复”

Diffusion 不直接学 \(x\to z\) 的映射,而是:

  1. 前向:逐步给数据加噪,最终变成近似标准高斯;
  2. 反向:学习每一步去噪,从噪声恢复数据;
  3. 训练:随机取一个时刻 \(t\),让网络预测“这一步加了什么噪声”;
  4. 采样:从 \(x_T\sim\mathcal N(0,I)\) 开始,迭代去噪。

直觉:

  • 前向是“把一幅画逐渐揉成噪声”;
  • 反向是“教模型如何一点点把噪声擦掉”;
  • 每一步只学一个简单的去噪任务,所以训练稳定;
  • 但采样要跑很多步,所以慢。

面试要点:Diffusion 是“迭代去噪”的生成模型;它把复杂的生成问题拆成很多简单的去噪问题。


5. 一张图看懂四条路线

GAN:
噪声 z ──G──> 图像 x
              ↑
         判别器 D 给信号

VAE:
图像 x ──编码器──> z ──解码器──> 重建 x
              ↑
         先验 N(0,I)

Flow:
噪声 z ──可逆变换 f──> 图像 x
          (可逆,可算似然)

Diffusion:
图像 x0 ──逐步加噪──> xT ≈ N(0,I)
图像 x0 <──逐步去噪── xT
          (多步,学习每步去噪)

如果只能记一句话:GAN 一步“骗”,VAE 一步“编解码”,Flow 一步“可逆变换”,Diffusion 多步“去噪”。


6. 为什么 Diffusion 成为文生图主流

6.1 训练稳定

  • 每个时间步都有明确的回归目标:预测噪声;
  • 不需要对抗训练,不容易出现生成器/判别器失衡;
  • 损失函数简单,容易扩展到大模型和大 batch。

6.2 容易扩展

  • 数据、模型、分辨率都可以 scale;
  • U-Net/DiT 等骨干网络成熟;
  • 训练目标不依赖复杂的判别器设计。

6.3 条件注入自然

  • 文本可以通过 cross-attention 注入;
  • 类别可以通过 embedding/AdaGN 注入;
  • 控制图可以通过 ControlNet 注入;
  • CFG 让条件强度可调。

6.4 可控性强

  • inpainting、editing、img2img 都可以在去噪过程中做;
  • 多步采样天然支持中间干预;
  • 社区生态(LoRA、ControlNet、IP-Adapter)丰富。

6.5 代价:慢

  • 需要多步采样;
  • 每步都要跑一次网络;
  • 高分辨率/大模型更贵;
  • 所以有 DDIM、DPM-Solver、LCM、Turbo 等加速路线。

7. 90 秒回答:GAN 和 Diffusion 的区别

面试官问:GAN 和 Diffusion 有什么区别?

参考回答:

“它们都是生成模型,但建模方式不同。GAN 用生成器和判别器做对抗训练,学一个隐式的采样映射,通常一步出图,速度快、样本锐利,但训练不稳定、容易模式坍塌。Diffusion 学的是逐步去噪:前向把数据加噪到高斯,反向学习每一步去噪,采样时从噪声迭代恢复。它的训练目标更稳定、模式覆盖通常更好、条件控制更自然,但采样慢,需要多步,所以有很多加速方法。实际系统里两者也会混合,比如 VQGAN 用 GAN 提升重建,或少步扩散用对抗蒸馏。”

结构拆解:

  1. 一句话定位:都是生成模型,但建模方式不同;
  2. GAN:对抗、隐式、一步、快、不稳定;
  3. Diffusion:去噪、多步、稳定、可控、慢;
  4. 收尾:混合趋势。

8. 追问与回答

追问 1:为什么 Diffusion 训练比 GAN 稳定?

因为 Diffusion 每个时间步都有一个明确的去噪回归目标,损失是 MSE/变分下界,不需要判别器提供动态信号;GAN 的生成器要追逐一个不断变化的判别器,容易出现失衡和模式坍塌。

追问 2:Diffusion 一定比 GAN 好吗?

不能绝对说。Diffusion 在大规模文生图上因为训练稳定、可扩展、可控性强而成为主流;GAN 在实时、低算力、特定域(人脸、超分)仍有优势。实际系统经常混合,比如对抗蒸馏、VQGAN。

追问 3:Diffusion 和 VAE 是什么关系?

两者都用变分/潜变量思想。VAE 直接学“编码—解码”,Diffusion 学“逐步去噪”;DDPM 的 ELBO 也来自变分推断。Stable Diffusion 的 VAE 不是生成器,而是图像压缩器,扩散在它的潜空间里做。

追问 4:为什么 Diffusion 采样慢?

因为它不是一步映射,而是从 \(x_T\) 开始迭代去噪;每步都要跑一次网络。步数、模型大小、分辨率共同决定时延。加速方法包括更好的求解器、蒸馏、缓存、量化等。

追问 5:DDPM 和 LDM 是一回事吗?

不是。DDPM 是一种扩散算法/训练目标;LDM 是“在 VAE 潜空间做扩散”的系统架构。Stable Diffusion 是 LDM,不是直接在像素空间跑 DDPM。


9. 常见误区

  1. “Diffusion 只是加噪”:加噪只是前向,真正学的是反向去噪分布。
  2. “Diffusion 一定比 GAN 好”:要分场景,GAN 在速度和特定域仍有优势。
  3. “DDPM 就是 Stable Diffusion”:DDPM 是算法,SD 是 LDM 系统。
  4. “Diffusion 没有似然”:有 ELBO/似然下界,只是不精确。
  5. “VAE 在 SD 里负责生成”:SD 的 VAE 主要负责压缩/解码,生成由扩散完成。
  6. “采样慢是因为模型大”:主要因为多步迭代,模型大只是每步更慢。

10. 自测题

  1. 用一句话分别定义 GAN、VAE、Flow、Diffusion。
  2. 为什么 GAN 容易模式坍塌?
  3. Diffusion 的训练目标为什么比 GAN 稳定?
  4. DDPM 和 LDM 的区别是什么?
  5. 为什么 Diffusion 采样慢?说出两个加速方向。
  6. 如果面试官问“Diffusion 的本质是什么”,你会怎么回答?

自测参考答案要点

  1. GAN:对抗学隐式映射;VAE:潜变量 + ELBO;Flow:可逆变换 + 精确似然;Diffusion:多步去噪。
  2. 生成器只覆盖少数模式也能骗过判别器;判别器信号不稳定。
  3. 每步有明确的噪声回归目标,不需要对抗。
  4. DDPM 是扩散算法;LDM 是在 VAE 潜空间做扩散的系统。
  5. 多步迭代;加速:更好求解器、蒸馏、缓存、量化。
  6. 本质:学习一个从噪声到数据的逐步去噪过程,等价于学习数据分布的 score/变分下界。

11. 课后作业(不写代码)

  1. 画表:GAN/VAE/Flow/Diffusion 四行,列为“训练目标、采样方式、优点、缺点、典型代表”。
  2. 写 300 字:为什么 Diffusion 会成为文生图主流?要求至少提到“训练稳定、可控性、扩展性”三点。
  3. 录 3 分钟:不看笔记讲“GAN 和 Diffusion 的区别”,回听并标记卡壳点。
  4. 找反例:举一个 GAN 仍然比 Diffusion 更合适的场景,并说明理由。

12. 本节材料为什么这样设计

  • 先全景后公式:避免“会推 DDPM 但不知道它和 GAN/VAE 的关系”。
  • 四路线对比表:面试高频,且能直接作为复习卡片。
  • 90 秒回答 + 追问:把知识转成表达,而不是停留在阅读。
  • 不写代码:本节目标是建立直觉,代码会分散注意力。
  • 常见误区:针对面试中容易说错的点,提前纠偏。

详细设计理由见 08-材料设计理由。


13. 延伸阅读

  • Goodfellow et al., Generative Adversarial Nets, 2014.
  • Kingma & Welling, Auto-Encoding Variational Bayes, 2014.
  • Rezende & Mohamed, Variational Inference with Normalizing Flows, 2015.
  • Ho et al., Denoising Diffusion Probabilistic Models, 2020.
  • Song et al., Score-Based Generative Modeling through SDEs, 2021.

14. 下一节

1.2 前向过程与噪声日程