DDPM 的原理是什么?为什么训练目标是预测噪声?
简化版
DDPM 定义固定的前向高斯马尔可夫加噪过程,并学习参数化的反向条件分布。闭式边缘允许从 x₀ 一步采样任意 x_t。原始工作把 ELBO 中的反向均值匹配重参数化为噪声预测,并采用去掉时间权重的 simple MSE。预测 ε、x₀ 或 v 可以相互换算,但对应的损失权重与优化性质不同,不能说噪声预测在所有模型上必然“最稳、最好”。
详细版
DDPM 的两条链
前向(固定,无参数):
q(x_t | x_{t-1}) = N(x_t; √(1-β_t)·x_{t-1}, β_t·I)
闭式解让我们能一步合成任意时刻的带噪图:
x_t = √ᾱ_t·x₀ + √(1-ᾱ_t)·ε, α_t=1-β_t, ᾱ_t=∏α, ε~N(0,I)
反向(可学):网络 ε_θ(x_t, t) 预测噪声,据此还原 x_{t-1}。
为什么预测噪声(三个层次的理由)
-
理论层面:ELBO 推导出的反向均值 μ 依赖于「已知 x_t 时对 x₀(或 ε)的估计」。由闭式解,x_t、x₀、ε 三者知二求一,所以预测 ε、预测 x₀、预测 μ 在数学上等价,可以互相换算。
-
形式层面:选择预测 ε 后,复杂的 ELBO 损失(含一堆 KL 散度)可简化为一个干净的 MSE:
L_simple = E_{t,x₀,ε} ‖ ε − ε_θ(√ᾱ_t·x₀ + √(1-ᾱ_t)·ε, t) ‖²
- 工程层面:训练时采样的 ε 边缘分布是标准高斯,目标尺度统一;但给定
x_t的预测难度随信噪比变化,x₀/v 参数化也可通过加权获得良好效果。
训练与采样流程
- 训练:取 x₀ → 随机 t、随机 ε → 合成 x_t → 网络预测 ε → MSE 反传。
- 采样:x_T~N(0,I) → 循环 T…1,每步用 ε_θ 算均值并加噪 → 得 x₀。
核心痛点:祖先采样需要多次网络评估;步数由训练时间表与采样器决定,历史常见 1000 步不是 DDPM 的固定定律。
完整版教学
一、DDPM 在扩散模型谱系里的位置
「扩散模型」是一大类方法的统称,DDPM 是 2020 年 Ho 等人提出的里程碑工作。它没有发明扩散思想(更早可追溯到 Sohl-Dickstein 等人的工作),但把加噪、反向生成与可训练目标连成了一套效果很强的方案。面试若问扩散模型原理,可以用 DDPM 解释基本机制,同时说明现代系统还会采用潜空间扩散、不同预测参数化和更高效的采样器。
二、前向过程为什么要设计成这样
前向过程 q(x_t|x_{t-1}) = N(√(1-β_t)·x_{t-1}, β_t·I) 有两个精心的设计:
- 系数 √(1-β_t) 的缩放:每步缩小已有信号并注入噪声。若数据已标准化为单位方差,这种 variance-preserving 参数化使各步的边缘方差保持在同一量级;当累计信号系数
ᾱ_T足够接近 0 时,x_T才近似标准高斯,而不是有限步下一定精确等于它。 - 噪声表 β_t:它决定信噪比怎样沿时间分配。经典线性表常让 β 随 t 增大,余弦表则直接设计累计信号;哪种更好取决于数据、训练目标和采样器,不能把“逐渐增大”或“余弦必胜”当成定义。
由此推出的闭式解是训练高效的关键:
x_t = √ᾱ_t·x₀ + √(1-ᾱ_t)·ε
有了它,训练时对任意 t 都能「一步到位」造出带噪样本,无需真的迭代 t 次。可以说,没有这个闭式解,DDPM 训练就不现实。
三、从 ELBO 到「预测噪声」的推导脉络(面试够用版)
不用背完整推导,但要能说清脉络:
-
我们想最大化数据似然
log p_θ(x₀),直接算不了,于是用变分下界 ELBO:引入前向 q 作为近似后验,把log p_θ(x₀)下界成一串可计算的项。 -
ELBO 展开后是若干 KL 散度之和,其中主项是让反向分布
p_θ(x_{t-1}|x_t)去逼近「真实反向后验」q(x_{t-1}|x_t, x₀)。后者是可以精确算出的高斯,其均值记为 μ̃。 -
于是训练变成让网络输出的均值 μ_θ 去匹配 μ̃。而 μ̃ 可以写成关于 x_t 和 ε 的表达式。
-
重参数化:把 μ_θ 也写成同样的形式,只让网络去预测其中的 ε。代入后,KL 项化简为「真实 ε 与预测 ε 的加权平方差」。
-
DDPM 发现扔掉那个随 t 变化的权重系数(即用 L_simple 而非带权版本),训练更稳、生成更好。这就是最终的噪声预测 MSE。
简要说串起来:最大化似然 → ELBO → 匹配反向后验高斯的均值 → 重参数化成预测 ε → 去掉权重变成简单 MSE。
四、预测噪声 vs 预测 x₀ vs 预测 v
这是高频追问,给一张对比表:
| 参数化 | 网络输出 | 特点 | 适用 |
|---|---|---|---|
| ε-prediction | 预测掺入的噪声 ε | DDPM 原始选择,目标边缘尺度统一 | 经典 DDPM 与大量潜扩散模型 |
| x₀-prediction | 直接预测干净样本 x₀ | 输出直观,但不同信噪比处的损失权重与 ε 预测不同 | 图像生成、离散或约束数据等配方 |
| v-prediction | 预测 v = √ᾱ_t·ε − √(1-ᾱ_t)·x₀ | 是 x₀ 与 ε 的旋转参数化,可改善特定训练配方的权重和数值性质 | 部分潜扩散、蒸馏配方 |
给定 x_t 和时间步时,它们可以线性换算;但用相同形式的 MSE 训练时,隐含的信噪比权重并不相同,所以“输出可换算”不等于“优化完全等价”。选择时应结合噪声调度、损失加权和采样器做消融。
五、采样过程的细节与随机项
采样单步公式:
x_{t-1} = 1/√α_t · ( x_t − (1-α_t)/√(1-ᾱ_t) · ε_θ(x_t,t) ) + σ_t·z, z~N(0,I)
- 前半部分是去噪均值:把预测噪声按比例减掉。
- 后半部分
σ_t·z是重新注入的随机性,让反向过程也是一条随机链(DDPM 是随机采样)。在最后一步 t=1 时不再加噪。 - 原始 DDPM 讨论过把反向方差固定为
β_t或前向后验方差β̃_t;它们代表不同的方差设定,效果是否接近要由具体数据和指标验证。
易错点:原始 DDPM 祖先采样是随机的,但生成多样性首先来自初始噪声,不能只归因于每步随机项。DDIM 构造了与训练边缘分布相容的非马尔可夫过程;取
η=0可得到确定性轨迹,不是简单把任意 DDPM 公式中的σ_t清零就解释完了。
六、手算一次前向采样与训练损失
设某个时间步的 ᾱ_t=0.64,标量干净样本 x₀=0.5,本次抽到的噪声 ε=-1。因为 √ᾱ_t=0.8、√(1-ᾱ_t)=0.6,所以:
x_t = 0.8 × 0.5 + 0.6 × (-1) = -0.2
若网络在 (x_t,t) 上预测 ε_θ=-0.8,这个标量样本的 simple loss 是 (-1-(-0.8))²=0.04。训练可以每次只随机抽一个 t,因为这是对全时间步期望损失的随机估计;生成时却必须从高噪声状态求解一条反向轨迹,不能据此推断“一步训练就能一步生成”。
七、常见误区与追问
- 误区:前向加噪过程也需要训练神经网络。 前向过程由预设噪声调度固定,可直接从
x0采样任意xt;学习发生在反向去噪模型。 - 追问:为什么常预测 ε 而不是直接预测 x0? 在常见参数化下二者可转换,预测标准高斯噪声让目标尺度更统一、训练实现简单稳定。
- 追问:训练为何可以随机抽一个 t,而采样要走多步? 损失对时间步的期望可用随机 t 无偏估计;生成却要从高噪声状态逐步数值求解到数据分布。
- 误区:减少采样步数不会影响任何结果。 少步求解误差更大,对调度器、模型预测精度和蒸馏配方更敏感。
- 追问:β schedule 改变什么? 它分配各时间步的信噪比与学习难度,影响模型更重视结构还是细节区间。
- 误区:DDPM 必须固定训练或采样 1000 步。 1000 是经典配置而非数学约束;时间离散、训练调度和推理函数评估次数需要分开描述。
- 误区:没有判别器就保证比 GAN 稳定且不会模式遗漏。 去噪回归避开了对抗博弈,但仍会受数据覆盖、损失权重、网络容量和优化问题影响。
八、加强记忆
DDPM 抓三点:(1)前向固定加噪,闭式解 x_t=√ᾱ_t·x₀+√(1-ᾱ_t)·ε;(2)原始常用噪声预测 simple MSE,它来自 ELBO 均值匹配的重参数化与重新加权;(3)原始祖先采样从近似高斯噪声逐步计算反向均值并按设定方差采样。 再补一句:ε、x₀、v 虽能换算,但相同 MSE 对不同信噪比的加权不同,实际优劣必须结合训练与采样配方验证。