跳转至

1.2 前向过程与噪声日程

所属章节:第 1 章 扩散模型基础
课时:90 分钟
前置:1.1 生成模型全景
对应面试题:D5(前向部分)、D10(主)、A3(重参数)
一句话目标:学完能独立推导 \(q(x_t\mid x_0)\),解释 \(\beta_t\)、\(\bar\alpha_t\)、SNR 的关系,并回答“为什么噪声幅度不一致”。


1. 学习目标

学完本节,你应该能够:

  1. 写出 DDPM 的前向转移和马尔可夫链;
  2. 解释 重参数化技巧,并说明它在 VAE 和 Diffusion 中的不同用法;
  3. 推导 闭式边缘分布 \(q(x_t\mid x_0)\);
  4. 计算 给定 schedule 下的 \(\bar\alpha_t\)、信号/噪声系数和 SNR;
  5. 解释 为什么每步加噪幅度不一致,以及 schedule 的作用;
  6. 比较 linear、cosine、zero terminal SNR 等 schedule;
  7. 用 90 秒回答 D10 和 A3。

2. 为什么这一节是 DDPM 的入口

DDPM 的所有公式都建立在一个非常简单的操作上:

每一步,把上一时刻的数据乘上一个略小于 1 的系数,再加上一点高斯噪声。

但面试不会只问“怎么加噪”,而是会追问:

  • 为什么 \(x_t\) 可以直接从 \(x_0\) 采样?
  • 为什么 \(\beta_t\) 要变化?
  • \(\bar\alpha_t\) 到底是什么?
  • 重参数化在这里有什么用?
  • 噪声 schedule 怎么选?

这一节把这些问题一次讲清。学完它,你才能进入反向过程和 ELBO。


3. 记号:不要被符号吓到

符号 含义 直觉
\(x_0\) 真实数据 一张图/一个样本
\(x_t\) 第 \(t\) 步加噪后的数据 越来越像噪声
\(T\) 总步数 通常 1000
\(\beta_t\) 第 \(t\) 步的噪声方差 每步加多少噪声
\(\alpha_t\) \(1-\beta_t\) 保留多少信号
\(\bar\alpha_t\) \(\prod_{s=1}^t\alpha_s\) 从 \(x_0\) 到 \(x_t\) 累计保留多少信号
\(\epsilon\) 标准高斯噪声 \(\mathcal N(0,I)\)

核心关系:

\[ \alpha_t=1-\beta_t,\qquad \bar\alpha_t=\prod_{s=1}^{t}\alpha_s. \]

一句话:\(\beta_t\) 是“每一步的噪声增量”,\(\bar\alpha_t\) 是“累计信号保留率”。


4. 前向过程:马尔可夫加噪链

DDPM 定义:

\[ q(x_t\mid x_{t-1}) =\mathcal N\left(x_t;\sqrt{\alpha_t}x_{t-1},\beta_t I\right). \]

用重参数化写:

\[ x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{\beta_t}\epsilon_{t-1}, \quad \epsilon_{t-1}\sim\mathcal N(0,I). \]

整个链:

\[ q(x_{1:T}\mid x_0) =\prod_{t=1}^{T}q(x_t\mid x_{t-1}). \]

为什么叫“马尔可夫”?

  • 给定 \(x_{t-1}\),\(x_t\) 只依赖它,不依赖更早的历史;
  • 所以可以逐步写成一阶链;
  • 但边缘 \(q(x_t\mid x_0)\) 仍然是高斯的,可以一步采样。

5. 重参数化技巧:把随机性剥离出去

5.1 一般形式

若:

\[ z\sim\mathcal N(\mu,\sigma^2 I), \]

直接采样 \(z\) 不可导。改写成:

\[ z=\mu+\sigma\odot\epsilon, \quad \epsilon\sim\mathcal N(0,I). \]

这样:

  • 随机性全部来自 \(\epsilon\);
  • \(\mu,\sigma\) 通过确定性变换进入 \(z\);
  • 梯度可以对 \(\mu,\sigma\) 反传:
\[ \frac{\partial z}{\partial\mu}=1, \qquad \frac{\partial z}{\partial\sigma}=\epsilon. \]

5.2 在 VAE 中

编码器输出 \(\mu,\sigma\),采样:

\[ z=\mu+\sigma\odot\epsilon. \]

这让 ELBO 的重建项可以对编码器求导。

5.3 在 Diffusion 中

前向加噪:

\[ x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{\beta_t}\epsilon. \]

同样是“确定性缩放 + 标准噪声”。它让:

  • 任意时刻 \(x_t\) 可以直接从 \(x_0\) 采样;
  • 训练目标可以写成对 \(\epsilon\) 的回归;
  • 不需要逐步模拟整条链。

5.4 和 VQ-VAE 的区别

  • VAE/Diffusion:连续高斯,重参数化是无偏的路径导数;
  • VQ-VAE:离散选择,不能用普通重参数化,通常用 straight-through estimator(有偏)。

面试要点:重参数化不是“把参数重新定义”,而是“把随机性移到外部噪声 \(\epsilon\)”。


6. 闭式边缘分布:为什么能一步采样

我们想证明:

\[ q(x_t\mid x_0) =\mathcal N\left(x_t;\sqrt{\bar\alpha_t}x_0,(1-\bar\alpha_t)I\right), \]

即:

\[ x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon. \]

6.1 两步推导

先看 \(t=2\):

\[ x_1=\sqrt{\alpha_1}x_0+\sqrt{\beta_1}\epsilon_1, \]
\[ x_2=\sqrt{\alpha_2}x_1+\sqrt{\beta_2}\epsilon_2. \]

代入:

\[ x_2 =\sqrt{\alpha_2}\left(\sqrt{\alpha_1}x_0+\sqrt{\beta_1}\epsilon_1\right) +\sqrt{\beta_2}\epsilon_2 \]
\[ =\sqrt{\alpha_1\alpha_2}x_0 +\sqrt{\alpha_2\beta_1}\epsilon_1 +\sqrt{\beta_2}\epsilon_2. \]

两个独立高斯相加,方差相加:

\[ \alpha_2\beta_1+\beta_2 =\alpha_2(1-\alpha_1)+(1-\alpha_2) =1-\alpha_1\alpha_2. \]

所以:

\[ x_2=\sqrt{\bar\alpha_2}x_0+\sqrt{1-\bar\alpha_2}\epsilon. \]

6.2 归纳到 \(t\)

假设:

\[ x_{t-1}=\sqrt{\bar\alpha_{t-1}}x_0+\sqrt{1-\bar\alpha_{t-1}}\epsilon'. \]

则:

\[ x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{\beta_t}\epsilon'' \]
\[ =\sqrt{\alpha_t\bar\alpha_{t-1}}x_0 +\sqrt{\alpha_t(1-\bar\alpha_{t-1})}\epsilon' +\sqrt{\beta_t}\epsilon''. \]

方差合并:

\[ \alpha_t(1-\bar\alpha_{t-1})+\beta_t =1-\alpha_t\bar\alpha_{t-1} =1-\bar\alpha_t. \]

因此:

\[ \boxed{ x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon } \]

这就是“任意时刻一步采样”的来源。

6.3 一个容易忽略的点

如果 \(x_0\) 已经归一化到单位方差,那么:

\[ \mathrm{Var}(x_t) =\bar\alpha_t\mathrm{Var}(x_0)+(1-\bar\alpha_t)I =I. \]

信号方差 \(\bar\alpha_t\) 和噪声方差 \(1-\bar\alpha_t\) 加起来是 1。这就是“方差保持(variance-preserving)”的含义。


7. SNR 与“为什么噪声幅度不一致”

7.1 信号系数、噪声系数、SNR

由:

\[ x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon, \]

定义:

  • 信号系数:\(\sqrt{\bar\alpha_t}\);
  • 噪声系数:\(\sqrt{1-\bar\alpha_t}\);
  • 信噪比:
\[ \mathrm{SNR}(t) =\frac{\bar\alpha_t}{1-\bar\alpha_t}. \]

随着 \(t\) 增大:

  • \(\bar\alpha_t\) 单调下降;
  • 信号系数下降;
  • 噪声系数上升;
  • SNR 单调下降。

7.2 数值例子

取一个 4 步的玩具 schedule:

\[ \beta=[0.1,0.2,0.3,0.4]. \]

则:

\[ \alpha=[0.9,0.8,0.7,0.6]. \]

累计:

\(t\) \(\beta_t\) \(\bar\alpha_t\) 信号系数 \(\sqrt{\bar\alpha_t}\) 噪声系数 \(\sqrt{1-\bar\alpha_t}\) SNR
1 0.1 0.9 0.949 0.316 9.00
2 0.2 0.72 0.849 0.529 2.57
3 0.3 0.504 0.710 0.704 1.02
4 0.4 0.3024 0.550 0.835 0.43

观察:

  • 第 1 步噪声很小,信号还很清晰;
  • 第 3 步 SNR 接近 1,信号和噪声势均力敌;
  • 第 4 步噪声已经大于信号;
  • 到更晚的时刻,\(\bar\alpha_t\to0\),\(x_t\) 趋近标准高斯。

7.3 为什么每步 \(\beta_t\) 不一样

有三个层面的原因:

  1. 课程学习:早期图像结构清晰,应该加小噪声,让模型先学细节;后期需要破坏结构,让 \(x_T\) 接近高斯,所以加大噪声。
  2. SNR 平滑下降:训练时 \(t\) 通常均匀采样。如果某个区间 SNR 变化太剧烈,模型在该区间学不好。schedule 控制的是“难度曲线”。
  3. 端点匹配:\(t=T\) 时希望 \(x_T\approx\mathcal N(0,I)\),否则反向采样从标准高斯开始就不匹配。

7.4 “幅度不一致”到底指什么

容易混淆的两个层次:

  • 每步增量:\(\beta_t\) 从 \(10^{-4}\) 增到 \(0.02\),这是“每步加多少”;
  • 累计噪声:\(\sqrt{1-\bar\alpha_t}\) 从 0 增到 1,这是“总共加了多少”。

面试时要说清:\(\beta_t\) 是每步方差,\(\bar\alpha_t\) 是累计信号保留率,\(1-\bar\alpha_t\) 是累计噪声方差。

7.5 如果 \(\beta_t\) 取常数会怎样

理论上也能定义一个扩散过程,但 SNR 轨迹不同:

  • 可能早期噪声太大,细节被破坏;
  • 也可能后期噪声不够,\(x_T\) 不接近标准高斯;
  • 实际效果通常不如精心设计的 schedule。

所以 schedule 不是理论强制,而是工程/优化上的设计选择。


8. 常见噪声 schedule

8.1 线性 schedule

DDPM 原始:

\[ \beta_t=\beta_1+\frac{t-1}{T-1}(\beta_T-\beta_1), \]

常见 \(\beta_1=10^{-4}\),\(\beta_T=0.02\),\(T=1000\)。

特点:

  • 简单;
  • 高分辨率/大 \(T\) 时,两端 SNR 变化可能不够平滑。

8.2 Cosine schedule

定义:

\[ \bar\alpha_t=\frac{f(t)}{f(0)}, \qquad f(t)=\cos\left(\frac{t/T+s}{1+s}\cdot\frac{\pi}{2}\right)^2, \]

其中 \(s\) 是小偏移(如 0.008),避免 \(t=0\) 时导数太小。

特点:

  • SNR 下降更平滑;
  • 在中段保留更多信号;
  • 常用于改善生成质量。

8.3 Scaled linear / sigmoid

Stable Diffusion 常用 scaled linear:

  • \(\beta\) 从约 \(0.00085\) 到 \(0.012\);
  • 用平方根缩放;
  • 配合 leading 时间步间隔。

不同实现细节不同,面试时不必背具体数值,但要知道schedule 影响 SNR 轨迹。

8.4 Zero Terminal SNR

标准 schedule 在 \(t=T\) 时 \(\bar\alpha_T\) 往往很小但不严格为 0,导致训练/推理端点不完全一致。Zero terminal SNR 强制:

\[ \bar\alpha_T=0, \]

让最后一步信号完全消失,\(x_T\) 严格为标准高斯。常配合 \(v\)-prediction 使用。

特点:

  • 改善高噪声端的行为;
  • 减少“训练时 \(x_T\) 不是纯噪声”的 mismatch;
  • 与 Offset Noise 解决的是不同问题。

8.5 一张表

schedule 特点 常见场景
Linear 简单、原始 DDPM 基线
Cosine SNR 更平滑 图像生成改进
Scaled linear SD 常用 Stable Diffusion
Zero terminal SNR 端点严格匹配 高噪声端稳定训练
Karras sigma 采样时步长更合理 采样器配置

9. 90 秒回答:为什么 DDPM 加噪幅度不一致

面试官问:为什么 DDPM 加噪声的幅度是不一致的?

参考回答:

“因为 DDPM 的 \(\beta_t\) 是一个 schedule,不是常数。前向过程是 \(x_t=\sqrt{\alpha_t}x_{t-1}+\sqrt{\beta_t}\epsilon\),展开后 \(x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon\)。随着 \(t\) 增大,信号系数 \(\sqrt{\bar\alpha_t}\) 下降,噪声系数 \(\sqrt{1-\bar\alpha_t}\) 上升,SNR 从大变小。这样设计是为了让早期小噪声保留结构、后期大噪声把数据破坏成标准高斯,同时让训练难度平滑变化。\(\beta_t\) 是每步噪声方差,\(1-\bar\alpha_t\) 是累计噪声方差,两者不要混。”

结构:

  1. 先纠正:\(\beta_t\) 是 schedule;
  2. 公式:展开后的信号/噪声系数;
  3. 原因:早期/后期/SNR;
  4. 区分:每步增量 vs 累计噪声。

10. 90 秒回答:重参数技巧是什么

面试官问:重参数技巧是什么?

参考回答:

“重参数化是把随机采样写成‘确定性变换 + 外部噪声’。比如 \(z\sim\mathcal N(\mu,\sigma^2)\),直接采样不可导;写成 \(z=\mu+\sigma\odot\epsilon\),\(\epsilon\sim\mathcal N(0,I)\),随机性就只来自 \(\epsilon\),梯度可以对 \(\mu,\sigma\) 反传。VAE 用它训练编码器;Diffusion 的前向加噪也是同一个技巧,所以 \(x_t\) 可以直接从 \(x_0\) 采样,训练目标可以写成对噪声的回归。注意 VQ-VAE 的离散选择不能用普通重参数化,通常用 straight-through。”


11. 常见误区

  1. 把 \(\beta_t\) 当成 \(x_t\) 的方差:\(\beta_t\) 是每步增量;\(x_t\) 的噪声方差是 \(1-\bar\alpha_t\)。
  2. 把 \(\bar\alpha_t\) 当成累加:它是累乘。
  3. 认为 \(\beta_t\) 必须递增:线性 schedule 是递增的,但理论上可以有别的形状;关键是 SNR 轨迹。
  4. 忘记 \(x_0\) 归一化:方差保持的推导依赖 \(x_0\) 的单位方差。
  5. 把重参数化和 straight-through 混为一谈:前者无偏,后者有偏。
  6. 把“噪声幅度”与“噪声方差”混用:口语可以,但公式里要区分。

12. 课堂练习

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

  1. 用归纳法证明 \(q(x_t\mid x_0)\) 是高斯。
  2. 取 \(\beta=[0.1,0.2,0.3,0.4]\),计算 \(\bar\alpha_t\)、SNR,并判断哪一步 SNR 最接近 1。
  3. 若 \(\bar\alpha_t=0.5\),\(x_0=1\),\(\epsilon=0.2\),求 \(x_t\)。
  4. 解释:为什么 \(t=T\) 时希望 \(x_T\approx\mathcal N(0,I)\)?
  5. 如果 \(\beta_t\) 取常数,SNR 曲线会怎样?有什么潜在问题?
  6. 用 90 秒回答“为什么加噪幅度不一致”。

13. 自测清单

  • [ ] 能写出前向转移和马尔可夫链;
  • [ ] 能解释重参数化;
  • [ ] 能推导 \(q(x_t\mid x_0)\);
  • [ ] 能计算 \(\bar\alpha_t\) 和 SNR;
  • [ ] 能解释 \(\beta_t\) 与 \(1-\bar\alpha_t\) 的区别;
  • [ ] 能说出 3 种 schedule;
  • [ ] 能 90 秒回答 D10;
  • [ ] 能 90 秒回答 A3。

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

  • 先讲记号:很多卡壳不是数学难,而是符号混。
  • 两步推导 + 归纳:比直接甩公式更容易内化。
  • 数值例子:让 SNR 从抽象概念变成可感知的曲线。
  • schedule 对比:面试常问“怎么选”,不能只知道线性。
  • 90 秒回答:把推导压缩成面试语言。
  • 不写代码:本节重点是推导和直觉,代码不是必需。

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


15. 下一节

1.3 反向过程与 DDPM 损失