跳转至

2.1 DDPM 采样与 DDIM

所属章节:第 2 章 采样、加速与引导
课时:90 分钟
前置:第 1 章(DDPM 后验、噪声预测)
对应面试题:D1、D4
一句话目标:学完能写出 DDPM/DDIM 采样公式,解释“同一个模型为什么能跳步”,并回答 DDPM 与 DDIM 的关系。


1. 学习目标

学完本节,你应该能够:

  1. 写出 DDPM 祖先采样公式;
  2. 解释 每一步为什么要加噪声;
  3. 写出 DDIM 更新式,并说明 \(\sigma_t=0\) 的含义;
  4. 解释 DDIM 为什么能跳步、为什么能反演;
  5. 说明 DDPM 是 DDIM 的什么特例;
  6. 比较 两者的多样性、可复现性、速度;
  7. 用 90 秒回答 D4,并给出 D1 的采样分类框架。

2. 为什么采样是面试重点

训练只解决“网络能不能去噪”,采样解决“怎么从噪声走回数据”。

面试官问采样,通常想确认三件事:

  1. 你知道采样器不是模型,同一 checkpoint 可以换采样器;
  2. 你知道 DDPM/DDIM 的公式差异,而不是只记名字;
  3. 你知道速度、多样性、可编辑性之间的取舍。

3. DDPM 采样:从后验均值 + 噪声

第 1 章得到:

\[ q(x_{t-1}\mid x_t,x_0) =\mathcal N(\tilde\mu_t,\tilde\beta_t I). \]

推理时没有 \(x_0\),用网络预测噪声,得到均值:

\[ \mu_\theta(x_t,t) =\frac{1}{\sqrt{\alpha_t}} \left( x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t) \right). \]

DDPM 采样:

\[ \boxed{ x_{t-1} =\mu_\theta(x_t,t)+\sigma_t z } \]

其中:

  • \(z\sim\mathcal N(0,I)\);
  • \(\sigma_t^2=\beta_t\) 或 \(\tilde\beta_t\);
  • \(t=1\) 时 \(z=0\),不再加噪声。

展开写:

\[ x_{t-1} =\frac{1}{\sqrt{\alpha_t}} \left( x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\epsilon_\theta(x_t,t) \right) +\sigma_t z. \]

3.1 直觉

  • 先算“最可能的去噪结果”\(\mu_\theta\);
  • 再加一点随机噪声,保持采样的多样性;
  • 每一步都随机,所以同一 seed 也不保证完全可复现(取决于实现);
  • 多样性好,但需要较多步数。

3.2 为什么最后一步不加噪声

\(t=1\) 时已经接近数据,再加噪声会破坏结果;所以最后一步只取均值。


4. DDIM:确定性采样与跳步

4.1 动机

DDPM 有两个问题:

  • 每步都随机,结果不够稳定;
  • 需要很多步,速度慢。

DDIM 的目标:

  • 保持训练时的边缘分布;
  • 让反向过程可以确定性;
  • 允许跳步;
  • 不重新训练网络。

4.2 非马尔可夫前向

DDIM 定义一族前向分布:

\[ q_\sigma(x_{t-1}\mid x_t,x_0) =\mathcal N\left( \sqrt{\bar\alpha_{t-1}}x_0 +\sqrt{1-\bar\alpha_{t-1}-\sigma_t^2}\, \frac{x_t-\sqrt{\bar\alpha_t}x_0}{\sqrt{1-\bar\alpha_t}}, \sigma_t^2 I \right). \]

关键:

  • 它仍然满足 \(q(x_t\mid x_0)=\mathcal N(\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)I)\);
  • 所以和 DDPM 共享训练目标;
  • 但反向不再是马尔可夫链,可以由 \(\sigma_t\) 控制随机性。

4.3 反向更新

用 \(\hat x_0\) 表示网络对 \(x_0\) 的估计:

\[ \hat x_0 =\frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_\theta(x_t,t)}{\sqrt{\bar\alpha_t}}. \]

DDIM 更新:

\[ \boxed{ x_{t-1} =\sqrt{\bar\alpha_{t-1}}\hat x_0 +\sqrt{1-\bar\alpha_{t-1}-\sigma_t^2}\,\epsilon_\theta(x_t,t) +\sigma_t\epsilon } \]
  • \(\sigma_t=0\):完全确定性;
  • \(\sigma_t>0\):保留随机性;
  • 当 \(\sigma_t^2=\tilde\beta_t\) 且取全部步:退化为 DDPM 的祖先采样。

4.4 特例关系

设置 结果
\(\sigma_t=0\) 确定性 DDIM
\(\sigma_t^2=\tilde\beta_t\),全步 DDPM 祖先采样
取子序列 \(\tau\) DDIM 跳步采样

所以:

DDPM 是 DDIM 在特定方差、完整步数下的特例;DDIM 是更一般的采样族。

4.5 为什么能跳步

DDPM 的采样必须逐步走,因为它是马尔可夫链。

DDIM 的反向定义在子序列上:

\[ \tau_1<\tau_2<\dots<\tau_S, \]

每一步用对应的 \(\bar\alpha_{\tau_i}\) 计算。因为前向边缘仍然匹配,所以可以“跨步”而不破坏分布。

注意:

  • 跳步不是“每隔几步随便取一个”;
  • 是重新定义一条一致的反向轨迹;
  • 步数太少会损失细节;
  • 步数太多则接近 DDPM/连续 ODE。

4.6 为什么能反演

当 \(\sigma_t=0\) 时,DDIM 是确定性映射:

\[ x_t \leftrightarrow x_{t-1}. \]

可以正向走、也可以反向走,用于:

  • DDIM inversion;
  • prompt-to-prompt;
  • 图像编辑;
  • 视频一致性。

但反演是近似的:

  • 网络不是精确可逆;
  • 步数少时误差累积;
  • 编辑强度大时容易偏。

5. 一个数值例子

设:

  • \(\alpha_t=0.8\),\(\beta_t=0.2\);
  • \(\bar\alpha_t=0.5\),\(\bar\alpha_{t-1}=0.625\);
  • \(x_t=1.0\),\(\epsilon_\theta=0.3\)。

先算 \(\hat x_0\):

\[ \hat x_0 =\frac{1-\sqrt{0.5}\times0.3}{\sqrt{0.5}} \approx\frac{1-0.2121}{0.7071} \approx1.114. \]

DDIM 确定性更新(\(\sigma_t=0\)):

\[ x_{t-1} =\sqrt{0.625}\times1.114 +\sqrt{0.375}\times0.3 \approx0.881+0.184 \approx1.065. \]

DDPM 均值(第 1 章):

\[ \mu_\theta\approx1.023, \]

再加噪声 \(\sigma_t z\)。所以:

  • DDIM 的确定性结果更接近“均值 + 条件修正”;
  • DDPM 会额外注入随机性;
  • 两者不是完全相同的数值,但来自同一个网络。

6. 对比表

维度 DDPM DDIM
前向 马尔可夫 非马尔可夫,同边缘
反向 随机 可确定(\(\sigma=0\))
训练 噪声 MSE 同一个网络
步数 1000/多步 可跳步 20–50
多样性 高 较低
可复现 较弱 较强
可反演 不便 可以
典型用途 质量基线 快速采样、编辑

7. 90 秒回答:DDPM 和 DDIM 的关系

面试官问:DDPM 和 DDIM 是什么关系?

参考回答:

“它们共享同一个前向边缘分布和训练目标,区别在反向过程。DDPM 是马尔可夫链,反向每步注入噪声,是随机采样;DDIM 用非马尔可夫前向,但保持相同的 \(q(x_t|x_0)\),反向可以取 \(\sigma=0\) 变成确定性采样,所以能跳步、能反演。DDPM 可以看成 DDIM 在 \(\sigma_t^2=\tilde\beta_t\)、取全部步数时的特例。同一个 checkpoint 可以直接换 DDIM 采样,不需要重新训练。”

结构:

  1. 共享训练目标;
  2. DDPM 随机、DDIM 可确定;
  3. DDPM 是特例;
  4. 同一模型换采样器。

8. 90 秒回答:常见采样方式(D1 的框架)

面试官问:扩散模型有哪些常见采样方式?

参考回答:

“可以按随机性和数值解法分。随机采样有 DDPM 祖先采样、Euler a、SDE 类;确定性采样有 DDIM、ODE Euler、Heun;高阶/多步有 PLMS、DPM-Solver、DPM-Solver++、UniPC;少步有 LCM、Turbo、DMD 等蒸馏模型;Flow 模型用 Euler/Heun 解 ODE。实际选择看任务:通用质量用 DPM++ 2M/UniPC,编辑用 DDIM,实时用蒸馏模型。”


9. 常见误区

  1. “DDIM 是另一种训练方法”:它只是另一种反向采样。
  2. “DDIM 一定比 DDPM 好”:高步数下接近;低步数可能损失细节。
  3. “DDIM 跳步就是每隔几步采样”:它重新定义了子序列上的反向过程。
  4. “DDIM 没有随机性”:\(\sigma_t>0\) 时仍有随机性。
  5. “DDIM inversion 完全可逆”:近似可逆,误差会累积。
  6. “DDPM 采样最后一步也要加噪声”:\(t=1\) 时 \(z=0\)。

10. 课堂练习

答案见 06 章节练习与答案。

  1. 写出 DDPM 采样公式,并解释每一项。
  2. 写出 DDIM 更新式。
  3. 说明 \(\sigma_t=0\) 和 \(\sigma_t^2=\tilde\beta_t\) 分别对应什么。
  4. 为什么 DDIM 能跳步?
  5. 用 90 秒回答 D4。
  6. 比较 DDPM 和 DDIM 的多样性/可复现性。

11. 自测清单

  • [ ] 能写 DDPM 采样;
  • [ ] 能写 DDIM 更新;
  • [ ] 能解释 DDPM 是 DDIM 的特例;
  • [ ] 能解释跳步;
  • [ ] 能解释反演;
  • [ ] 能 90 秒回答 D4;
  • [ ] 能给出 D1 的分类框架。

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

  • 先 DDPM 再 DDIM:先有“随机采样”的基线,才能理解确定性采样的价值。
  • 公式 + 特例表:面试最爱问“关系”,表比段落更容易记。
  • 数值例子:让 DDIM 的确定性有直观感受。
  • 单列反演:编辑类岗位常追问。
  • 不写代码:本节目标是公式和关系,不是实现采样器。

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


13. 下一节

2.2 SDE/ODE 与高阶采样器