DDPM 前向/反向过程的基础推导见 扩散模型与自动驾驶规划,本文聚焦变分下界的分解与最优参数化。

从直觉出发:拆楼与建楼

DDPM 的核心思想可以用一个朴素的类比来理解:一栋大楼(数据)可以逐步拆解为砖瓦水泥(噪声),反过来,学会拆楼的逆过程就能从砖瓦水泥重建大楼。这个类比的核心在于:逐步拆比一步拆更可控。如果一次爆破将大楼瞬间化为废墟,从废墟中重建大楼几乎不可能——因为信息丢失太严重,逆过程极度复杂。但如果每步只拆一小部分,每步的变化都很小,那么每步的逆过程也足够简单,可以用一个简单的高斯分布来描述。

这就是为什么 DDPM 需要 T=1000T=1000 步前向过程:使相邻步足够接近,每步之间的欧氏距离足够小,后验分布 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 更接近高斯。步数越多,单步变化越小,变分下界越紧致,训练信号越有效。

苏剑林在《生成扩散模型漫谈(一)》中刻意绕开了 ELBO 和变分推断的框架,仅利用正态分布的叠加性就推导出了与原论文一致的训练损失——从 xt=αˉtx0+1αˉtεx_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\varepsilon 出发,直接对 ε\varepsilon 做 MSE 回归即得到 LsimpleL_{\text{simple}}。这证明了理解 DDPM 并不需要先掌握变分推断;变分框架提供的是更严格的理论基础和更丰富的分析工具。下面我们用变分框架来形式化这个直觉。

一、生成模型的变分框架

生成模型的核心任务是建模数据分布 p(x)p(x)。当分布过于复杂而无法直接写出解析形式时,变分推断提供了一条迂回的路径:不直接优化 logp(x)\log p(x),而是优化它的一个下界——证据下界(Evidence Lower Bound, ELBO)。

1.1 ELBO 的两种推导路径

路径一:Jensen 不等式。 对数据对数似然 logp(x)\log p(x) 引入潜变量 zz

logp(x)=logp(x,z)dz=logp(x,z)q(zx)q(zx)dz \log p(x) = \log \int p(x, z)\, dz = \log \int \frac{p(x, z)}{q(z|x)} \cdot q(z|x)\, dz

由 Jensen 不等式,将对数移入积分内部:

logp(x)q(zx)logp(x,z)q(zx)dz=Eq(zx)[logp(x,z)q(zx)]:=LELBO \log p(x) \geq \int q(z|x) \log \frac{p(x, z)}{q(z|x)}\, dz = \mathbb{E}_{q(z|x)}\left[\log \frac{p(x, z)}{q(z|x)}\right] := \mathcal{L}_{\text{ELBO}}

路径二:KL 散度分解。 从 KL 散度的非负性出发:

KL(q(zx)p(zx))=Eq(zx)[logq(zx)p(zx)]0 \text{KL}(q(z|x) \| p(z|x)) = \mathbb{E}_{q(z|x)}\left[\log \frac{q(z|x)}{p(z|x)}\right] \geq 0

p(zx)=p(x,z)/p(x)p(z|x) = p(x,z)/p(x) 代入并展开:

Eq(zx)[logq(zx)p(x)p(x,z)]0 \mathbb{E}_{q(z|x)}\left[\log \frac{q(z|x) \cdot p(x)}{p(x, z)}\right] \geq 0

移项即得:

logp(x)Eq(zx)[logp(x,z)q(zx)]=LELBO \log p(x) \geq \mathbb{E}_{q(z|x)}\left[\log \frac{p(x, z)}{q(z|x)}\right] = \mathcal{L}_{\text{ELBO}}

两种路径殊途同归。Jensen 不等式路径简洁但缺乏直觉,KL 散度路径则揭示了更深层的信息:ELBO 与 logp(x)\log p(x) 之间的差距恰好是近似后验与真实后验之间的 KL 散度:

logp(x)=LELBO+KL(q(zx)p(zx)) \log p(x) = \mathcal{L}_{\text{ELBO}} + \text{KL}(q(z|x) \| p(z|x))

因此,最大化 ELBO 等价于最小化近似后验与真实后验之间的距离。这一等价性是整个变分推断的理论基石。

1.2 从 ELBO 到 VAE:变分自编码器的训练目标

将 ELBO 进一步分解:

LELBO=Eq(zx)[logp(xz)]重构项KL(q(zx)p(z))正则项 \mathcal{L}_{\text{ELBO}} = \underbrace{\mathbb{E}_{q(z|x)}[\log p(x|z)]}_{\text{重构项}} - \underbrace{\text{KL}(q(z|x) \| p(z))}_{\text{正则项}}

这正是 VAE 的训练目标:重构项确保潜变量保留了数据信息,正则项将近似后验约束在先验附近。VAE 的根本局限在于:当后验 q(zx)q(z|x) 是简单的高斯分布时,它无法捕捉数据的复杂多模态结构。

DDPM 的根本改进在于:将单步编码替换为 TT 步渐进编码,每步只做极小的变换,使得每一步的后验都接近高斯——从而使得变分下界变得紧致。

二、DDPM 的变分下界

2.1 DDPM 作为多步 VAE

DDPM 的潜变量是整个噪声序列 x1:Tx_{1:T},前向过程 q(x1:Tx0)q(x_{1:T}|x_0) 充当编码器,反向过程 pθ(x0:T)p_\theta(x_{0:T}) 充当解码器。变分下界可以写为:

logpθ(x0)Eq[logpθ(x0:T)q(x1:Tx0)] \log p_\theta(x_0) \geq \mathbb{E}_q\left[\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)}\right]

将联合分布展开为马尔可夫链的乘积:

pθ(x0:T)=p(xT)t=1Tpθ(xt1xt),q(x1:Tx0)=t=1Tq(xtxt1) p_\theta(x_{0:T}) = p(x_T) \prod_{t=1}^{T} p_\theta(x_{t-1}|x_t), \quad q(x_{1:T}|x_0) = \prod_{t=1}^{T} q(x_t|x_{t-1})

代入并取负值,得到负变分下界:

L=Eq[logpθ(x0:T)q(x1:Tx0)]=Eq[logp(xT)LT+t=2Tlogq(xtxt1)pθ(xt1xt)Lt1logpθ(x0x1)L0] L = \mathbb{E}_q\left[-\log \frac{p_\theta(x_{0:T})}{q(x_{1:T}|x_0)}\right] = \mathbb{E}_q\left[\underbrace{-\log p(x_T)}_{L_T} + \sum_{t=2}^{T} \underbrace{\log \frac{q(x_t|x_{t-1})}{p_\theta(x_{t-1}|x_t)}}_{L_{t-1}} \underbrace{- \log p_\theta(x_0|x_1)}_{L_0}\right]

2.2 三项分解的物理意义

LTL_T:先验匹配项。 这一项衡量前向过程最终时刻的分布 q(xTx0)q(x_T|x_0) 与先验 p(xT)p(x_T) 之间的距离:

LT=DKL(q(xTx0)p(xT)) L_T = D_{\text{KL}}(q(x_T|x_0) \| p(x_T))

αˉT0\bar{\alpha}_T \to 0 时,q(xTx0)N(0,I)q(x_T|x_0) \approx \mathcal{N}(0, I),此时 LT0L_T \approx 0。这不是训练出来的——只要噪声调度设计得足够大(即 TT 足够大、βt\beta_t 足够激进),前向过程自然会将数据分布抹平为标准高斯。因此 LTL_T 与模型参数无关,是常量。

Lt1L_{t-1}:去噪匹配项。 这是训练的核心。每一项是一个 KL 散度:

Lt1=DKL(q(xt1xt,x0)pθ(xt1xt)) L_{t-1} = D_{\text{KL}}(q(x_{t-1}|x_t, x_0) \| p_\theta(x_{t-1}|x_t))

真实的反向转移 q(xt1xt,x0)q(x_{t-1}|x_t, x_0)x0x_0 为条件时是解析高斯,而模型 pθ(xt1xt)p_\theta(x_{t-1}|x_t) 学习逼近这个高斯。关键在于:模型不知道 x0x_0,必须从 xtx_t 推断 x0x_0 的信息——这就是"去噪"的含义。

L0L_0:数据重构项。 这是从 x1x_1 重构 x0x_0 的离散解码项。Ho et al. (2020) 将其处理为从高斯分布中提取离散像素值的概率,但在实践中其贡献很小。

ELBO 三项分解
Loading visualization...
变分下界的三项贡献随噪声调度形状的变化。拖动滑块切换线性/余弦调度,观察各项损失的相对变化。

理解变分下界的三项分解后,一个自然的问题是:前向过程如何将数据分布逐步"抹平"为噪声?下面的动画展示了这一过程——从一个多模态的混合高斯分布出发,随着噪声逐步叠加,分布从多峰逐渐收缩为单峰标准高斯。

前向过程:多模态→单峰高斯
Loading visualization...
1D 混合高斯分布逐步加噪的马尔可夫链。播放/暂停控制,拖动时间步滑块观察分布演化。

2.3 去噪匹配项的深入分析

去噪匹配项 Lt1L_{t-1} 是两个高斯分布之间的 KL 散度。对于两个高斯分布 N(μ1,σ12I)\mathcal{N}(\mu_1, \sigma_1^2 I)N(μ2,σ22I)\mathcal{N}(\mu_2, \sigma_2^2 I),KL 散度有解析解:

DKL(N(μ1,σ12I)N(μ2,σ22I))=12σ22μ1μ22+方差项 D_{\text{KL}}(\mathcal{N}(\mu_1, \sigma_1^2 I) \| \mathcal{N}(\mu_2, \sigma_2^2 I)) = \frac{1}{2\sigma_2^2}\|\mu_1 - \mu_2\|^2 + \text{方差项}

当模型方差 σ22\sigma_2^2 取为真实后验方差 β~t\tilde{\beta}_t 时(Ho et al. 将其固定而非学习),KL 散度完全由均值之差决定:

Lt1=12β~tμ~tμθ(xt,t)2+C L_{t-1} = \frac{1}{2\tilde{\beta}_t}\|\tilde{\mu}_t - \mu_\theta(x_t, t)\|^2 + C

其中 μ~t\tilde{\mu}_t 是真实后验均值,μθ\mu_\theta 是模型预测的均值,CC 是与参数无关的常数。这揭示了训练的本质:让模型在每个噪声水平上都准确预测后验均值。

三、最优参数化:为什么预测噪声?

3.1 后验均值的两种参数化

如前所述,真实后验均值可以写为:

μ~t=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxt \tilde{\mu}_t = \frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t

直接让模型预测 μ~t\tilde{\mu}_t 在数学上没有问题,但实践中效果很差——因为 μ~t\tilde{\mu}_t 的表达式中同时包含 x0x_0xtx_t,它们的系数随时间剧烈变化,模型需要学习一个高度非平稳的映射。

利用 xt=αˉtx0+1αˉtεx_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t}\varepsilon 的关系,将 x0x_0 替换为 ε\varepsilon

μ~t=1αt(xt1αt1αˉtε) \tilde{\mu}_t = \frac{1}{\sqrt{\alpha_t}}\left(x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}}\varepsilon\right)

这意味着后验均值完全由 xtx_tε\varepsilon 决定。让模型预测 ε\varepsilon 而非 μ~t\tilde{\mu}_t,训练目标变为:

Lt1=(1αt)22αt(1αˉt)β~tεεθ(xt,t)2+C L_{t-1} = \frac{(1-\alpha_t)^2}{2\alpha_t(1-\bar{\alpha}_t)\tilde{\beta}_t}\|\varepsilon - \varepsilon_\theta(x_t, t)\|^2 + C

3.2 预测 ε\varepsilon 与预测 x0x_0 的等价性

xt=αˉtx0+1αˉtεx_t = \sqrt{\bar{\alpha}_t}x_0 + \sqrt{1-\bar{\alpha}_t}\varepsilon 出发,知道 ε\varepsilon 就可以恢复 x0x_0

x^0=1αˉt(xt1αˉtεθ(xt,t)) \hat{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}}\left(x_t - \sqrt{1-\bar{\alpha}_t}\,\varepsilon_\theta(x_t, t)\right)

反过来,知道 x0x_0 也可以恢复 ε\varepsilon

ε^=11αˉt(xtαˉtx0) \hat{\varepsilon} = \frac{1}{\sqrt{1-\bar{\alpha}_t}}\left(x_t - \sqrt{\bar{\alpha}_t}\,x_0\right)

因此 ε\varepsilon-prediction 和 x0x_0-prediction 包含完全相同的信息量,理论上等价。但实践差异显著:

  • ε\varepsilon-prediction 的优势。 在高噪声时间步(tt 大),xtx_t 主要由 ε\varepsilon 决定,预测 ε\varepsilon 相当于从纯噪声中提取信号——这是模型需要关注的核心任务。而预测 x0x_0 在高噪声时需要从几乎纯噪声中预测原始数据,目标值的方差极大,优化困难。

  • x0x_0-prediction 的优势。 在低噪声时间步(tt 小),预测 x0x_0 更直接——此时 xtx_t 已经很接近 x0x_0,直接预测残差更自然。一些工作(如 Progressive Distillation)发现在蒸馏场景中 x0x_0-prediction 更稳定。

四、简化训练目标

4.1 从完整 ELBO 到 LsimpleL_{\text{simple}}

完整 ELBO 中去噪匹配项的权重随时间变化:

wt=(1αt)22αt(1αˉt)β~t w_t = \frac{(1-\alpha_t)^2}{2\alpha_t(1-\bar{\alpha}_t)\tilde{\beta}_t}

Ho et al. (2020) 的关键实验发现:丢弃这些权重,使用等权 MSE,样本质量反而更好:

Lsimple=EtU[1,T],x0,ε[εεθ(xt,t)2] L_{\text{simple}} = \mathbb{E}_{t \sim \mathcal{U}[1,T], x_0, \varepsilon}\left[\|\varepsilon - \varepsilon_\theta(x_t, t)\|^2\right]

从方差降低的角度也能理解这一简化的好处。原始 VLB 损失中包含 4 个随机变量:数据 x0x_0、前向噪声 εt1\varepsilon_{t-1}、累积噪声 εˉt\bar{\varepsilon}_t 和时间步 tt,导致梯度的方差极大。通过重参数化(将 εt1\varepsilon_{t-1}εˉt\bar{\varepsilon}_t 用同一个 ε\varepsilon 表达)和时间步均匀采样,随机变量减少到 2 个(x0x_0tt),方差显著降低。LsimpleL_{\text{simple}} 进一步去掉了与时间相关的缩放系数,虽然引入了权重偏差(不再严格优化 VLB),但方差更低、训练更稳定——这正是实践优先于理论精确性的一个典型案例。

4.2 为什么简化反而更好?

这并非偶然,背后有明确的理论解释,可以从两个角度理解:

角度一:权重导致的训练失衡。 完整 ELBO 的权重 wtw_ttt 接近 TT 时极大——因为此时 αˉt0\bar{\alpha}_t \to 0,分母中的 1αˉt1 - \bar{\alpha}_t 接近 1,但分子中的 (1αt)2(1-\alpha_t)^2 保持有限,而 β~tβt\tilde{\beta}_t \to \beta_t 较小,导致权重爆炸。这意味着完整目标将训练重心压向高噪声时间步。但高噪声时间步的信息最粗糙——xtx_t 几乎是纯噪声,模型从中学到的主要是全局结构而非细节。等权训练让模型在每个噪声水平上获得均衡的监督。

角度二:与去噪得分匹配的等价性。 可以证明,LsimpleL_{\text{simple}} 等价于一种加权去噪得分匹配目标,其权重恰好是噪声水平的信号。等权训练隐式地将得分函数的优化重心放在了信号最丰富的中间噪声水平上。

4.3 LsimpleL_{\text{simple}}LVLBL_{\text{VLB}} 的关系

精确的关系是:

Lsimple=AtLVLB,t+Ct L_{\text{simple}} = A_t \cdot L_{\text{VLB},t} + C_t

其中 AtA_t 是一个与时间相关的缩放因子。对于接近 0 的时间步,AtA_t 极大;对于接近 TT 的时间步,AtA_t 较小。因此 LsimpleL_{\text{simple}} 相当于对 LVLBL_{\text{VLB}} 做了时间加权的重平衡——压低了高噪声步的权重,提升了低噪声步的权重。

后续工作(如 VDM, Kingma et al., 2021)提出了更精细的加权策略,在 LsimpleL_{\text{simple}}LVLBL_{\text{VLB}} 之间取得平衡,以同时优化样本质量和似然。

五、DDPM 与 VAE 的结构对照

将 DDPM 放回 VAE 的框架中审视,可以清晰地看到它如何解决了 VAE 的根本局限。

维度VAEDDPM
编码步数1TT
每步变换幅度大(直接映射到潜空间)小(只加微量噪声)
后验 q(zx)q(z\vert x)单高斯,表达力弱每步近似高斯,联合表达力强
先验固定标准高斯固定标准高斯(反向转移 pθp_\theta 可学习)
解码1 步TT 步去噪
下界紧致性弱(单步 KL 大)强(每步 KL 小,总和可控)

DDPM 的核心洞察可以概括为一句话:与其让一个强大的编码器一步完成困难的潜变量推断,不如让 TT 个简单的编码器各做一步微小的推断,然后在变分框架下保证总误差有界。 每一步的后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 都是简单的高斯分布——因为前向过程只加了一点点噪声,所以以 x0x_0 为条件的反向一步也是近高斯的。这种"分而治之"的策略使得变分下界远比 VAE 紧致。

从信息论的角度看,VAE 的信息瓶颈集中在单次编码中,模型必须在"保留足够信息以重构"和"匹配先验分布"之间做硬性取舍。DDPM 将信息瓶颈分散到 TT 步中,每步只需要做极小的信息压缩,因此几乎不存在信息丢失。

六、应用:Stable Diffusion 的实践验证

理解了变分下界的结构,便能更深刻地理解 Stable Diffusion 的训练设计。

Stable Diffusion 使用的正是本文推导的 LsimpleL_{\text{simple}} 训练目标。其 U-Net 预测的正是噪声 ε\varepsilon,与 ε\varepsilon-prediction 参数化完全一致——这是理论推导的直接工程实现,并非巧合。在实践中,ε\varepsilon-prediction 在高噪声时间步上的稳定性使得 U-Net 能够从近纯噪声的状态中逐步提取结构信息,这是生成高质量图像的关键。

Stable Diffusion 的另一个核心设计是潜空间扩散:VAE 编码器将 512×512512 \times 512 的图像压缩为 64×6464 \times 64 的潜表示,扩散过程在潜空间中进行。潜空间设计的变分意义在于使变分下界更紧致——在低维空间中,每步后验 q(xt1xt,x0)q(x_{t-1}|x_t, x_0) 的高斯近似更加准确,KL 散度更小,训练信号更有效。这与本文第二节的分析完全吻合:维度越低、每步变化越小,变分下界越紧致。

关于 Flow Matching 在生成模型中的应用,见本系列第三篇。


从 ELBO 出发,我们建立了扩散训练的变分理解:三项分解揭示了先验匹配、去噪匹配和重构各自的物理意义;最优参数化解释了为什么预测噪声在实践中更有效;简化目标的成功暗示了变分下界的精确权重并非最优——等权训练恰好是更好的隐式加权。下一篇文章将从离散马尔可夫链走向连续 SDE,建立扩散模型的随机微分方程视角。

相关概念


参考文献

  1. 苏剑林. 生成扩散模型漫谈(一):DDPM = 拆楼 + 建楼. https://kexue.fm/archives/9119
  2. 苏剑林. 生成扩散模型漫谈(二):DDPM = 自回归式VAE. https://kexue.fm/archives/9152
  3. 苏剑林. 生成扩散模型漫谈(三):DDPM = 贝叶斯 + 去噪. https://kexue.fm/archives/9164
  4. Ho, J., Jain, A., & Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. NeurIPS 2020.
  5. Kingma, D., et al. (2021). Variational Diffusion Models. NeurIPS 2021.
  6. Rombach, R., et al. (2022). High-Resolution Image Synthesis with Latent Diffusion Models. CVPR 2022.