一句话定义
DDPM 训练一个网络 ε_θ(x_t, t) 预测「当前样本里混入了哪份噪声」,用均方误差优化,采样时从纯噪声出发反复执行去噪公式直到还原图像。
为什么重要
这是整个扩散模型的心脏:三个公式——后验均值、参数化代入、简化损失——构成一条可复现的推导链,是从「知道有扩散模型」到「能解释每个超参数」的分水岭。之后一切工程(采样器 kp-009、CFG kp-010、v-prediction)都是对这条链上某一项的替换或加速。面试与审稿中最常考的也正是这一段。
前置知识
kp-005(前向链、α/ᾱ 记号、闭式解);贝叶斯定理的基本形式。
核心概念
- 反向过程(reverse process):学习 p_θ(x_{t−1}|x_t),从 x_T ∼ 𝒩(0,I) 逐步退回 x_0。
- 真实后验 q(x_{t−1}|x_t, x₀):在已知原点时的反向转移,可用贝叶斯定理解析求出,仍是高斯。
- 噪声预测网络 ε_θ:通常为 U-Net/DiT(kp-007),输入含噪样本与时刻 t,输出对 ε 的估计。
- 简化损失 L_simple:把变分下界中的整链 KL 散度简化为单点 MSE。
- 参数化(parameterization):把反向均值改写成由 ε_θ 表示的形式;另有 x₀ 预测与 v 预测变体。
原理与机制
训练目标源于最大化对数似然的变分下界(ELBO),把它按时刻分解后,每一项是两个高斯之间的 KL 散度,最终只取决于均值差。真实的反向转移均值(后验均值)为:
μ̃t(xt, x0) = √ᾱt−1 · βt1 − ᾱt x0 + √αt · (1 − ᾱt−1)1 − ᾱt xt
其中含未知的 x₀。用前向闭式解反解 x₀ = (x_t − √(1−ᾱ_t) ε)/√ᾱ_t,再令网络输出 ε̂ = ε_θ(x_t, t) 代入,均值差就变成「ε 与 ε_θ 的差」乘一个常数系数。DDPM 的关键一步是丢掉该系数(等价于给不同 t 重加权),得到稳定且好调的简化目标:
Lsimple(θ) = 𝔼t, x₀, ε [ ‖ ε − εθ( √ᾱt x0 + √(1−ᾱt) ε , t ) ‖² ]
训练流程因此极简:抽一张图 x₀、抽一个时刻 t、抽一份噪声 ε,合成 x_t,让网络猜 ε,算 MSE,反传。采样用学到的 ε_θ 逼近均值(方差取 β_t 或 β̃_t):
xt−1 = 1√αt ( xt − βt√(1−ᾱt) εθ(xt, t) ) + σt z, z ∼ 𝒩(0, I)
注意训练时 t 均匀采样、单步预测——模型从不学习「整条链」,整条链是采样时串起来的。这一性质解释了为什么采样器可以换成非训练时的策略(kp-009),也是为什么 20 步 DDIM 能跑在 1000 步训练链上。
公式与推导
推导链条四步(建议纸笔跟一遍):① ELBO 分解为若干 KL 之和,主导项为 L_{t−1} = KL(q(x_{t−1}|x_t,x₀) ‖ p_θ(x_{t−1}|x_t));② 两个高斯的 KL 是均值差平方加方差项;③ 用闭式解把后验均值中的 x₀ 换成 ε 的函数;④ 丢系数得 L_simple。第③步代入时用到 √ᾱ_t x₀ = x_t − √(1−ᾱ_t) ε 这一次代数移项——整条推导唯一需要的「技巧」。
图示
上排为训练:一次前向、单点回归;采样则沿链反向:x_T → x_{T−1} → … → x₀,每步调用一次 ε_θ。
直观类比
修复老照片的学徒:师傅把清晰照片按已知比例混入噪点(前向可复现),让学徒看脏照片猜「刚才加了哪份噪声」。猜得准,就能从纯噪声出发反着走完全程——因为他只被训练过「任何脏度的去噪」,而不是「某一张图的复原」。
实例或案例
- 训练伪代码(可复现骨架):循环{ x₀ ← 数据;t ← Uniform{1..T};ε ← N(0,I);x_t ← √ᾱ_t x₀ + √(1−ᾱ_t)ε;loss ← MSE(ε, ε_θ(x_t,t)) }。
- 同一模型用 ε 预测与 x₀ 预测训练,采样轨迹不同:x₀ 预测在低步数下更稳(直接给出「你想要的全图」),v 预测在零末端 SNR 调度下更均衡——现代实现多支持三种参数化切换。
常见误区
- 误区一:训练损失低 = 生成质量高。L_simple 只约束单步噪声预测;分布级质量还取决于骨干容量、数据与调度,损失相近的检查点质量可差很远(这也是评估指标 kp-026 存在的理由)。
- 误区二:模型「学过」完整去噪链。训练只见单步对;多步一致性完全靠每步均为局部最优的近似累积,这是低步数采样的误差来源。
- 误区三:σ_t 必须等于 β̃_t。方差有两种合法选择(β_t 与 β̃_t),对 L_simple 不可学习、对样本质量影响小,实现常取简化值。
自测题
- 从 ELBO 到 L_simple 的四步是什么?
答案要点:ELBO 分解 → 高斯 KL 归结为均值差 → 闭式解代入参数化 → 丢系数简化。
- 为什么采样步数可以少于训练步数?
答案要点:模型只依赖「当前 x_t 与 t」做单步预测,采样器可以自定义跨越时刻表,只要 ᾱ 取值落在训练区间内。
- ε 参数化下,x₀ 的估计怎么写?
答案要点:x̂₀ = (x_t − √(1−ᾱ_t)·ε_θ(x_t,t)) / √ᾱ_t。
与其他知识点的关系
kp-007 回答 ε_θ 内部是什么网络;kp-009 把采样公式换成更高效的数值格式;kp-010 在采样公式上叠加引导项;kp-005 提供全部记号。
延伸阅读
DDPM 论文(NeurIPS 2020)第 3 节给出完整推导与两个方差选择;其附录 A 有训练与采样伪代码,与本文伪代码一一对应。