反向去噪与 DDPM 训练目标

核心 约 30 分钟 ★ 最小路径 扩散模型DDPM损失函数反向过程数学推导最小路径
前置知识点(建议先学)
学习状态:

一句话定义

DDPM 训练一个网络 ε_θ(x_t, t) 预测「当前样本里混入了哪份噪声」,用均方误差优化,采样时从纯噪声出发反复执行去噪公式直到还原图像。

为什么重要

这是整个扩散模型的心脏:三个公式——后验均值、参数化代入、简化损失——构成一条可复现的推导链,是从「知道有扩散模型」到「能解释每个超参数」的分水岭。之后一切工程(采样器 kp-009、CFG kp-010、v-prediction)都是对这条链上某一项的替换或加速。面试与审稿中最常考的也正是这一段。

前置知识

kp-005(前向链、α/ᾱ 记号、闭式解);贝叶斯定理的基本形式。

核心概念

原理与机制

训练目标源于最大化对数似然的变分下界(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₀加噪(q)x_t预测 ε̂ε_θ(x_t,t)MSE真实 ε

上排为训练:一次前向、单点回归;采样则沿链反向:x_T → x_{T−1} → … → x₀,每步调用一次 ε_θ。

直观类比

修复老照片的学徒:师傅把清晰照片按已知比例混入噪点(前向可复现),让学徒看脏照片猜「刚才加了哪份噪声」。猜得准,就能从纯噪声出发反着走完全程——因为他只被训练过「任何脏度的去噪」,而不是「某一张图的复原」。

实例或案例

常见误区

自测题

  1. 从 ELBO 到 L_simple 的四步是什么?

答案要点:ELBO 分解 → 高斯 KL 归结为均值差 → 闭式解代入参数化 → 丢系数简化。

  1. 为什么采样步数可以少于训练步数?

答案要点:模型只依赖「当前 x_t 与 t」做单步预测,采样器可以自定义跨越时刻表,只要 ᾱ 取值落在训练区间内。

  1. ε 参数化下,x₀ 的估计怎么写?

答案要点:x̂₀ = (x_t − √(1−ᾱ_t)·ε_θ(x_t,t)) / √ᾱ_t。

与其他知识点的关系

kp-007 回答 ε_θ 内部是什么网络;kp-009 把采样公式换成更高效的数值格式;kp-010 在采样公式上叠加引导项;kp-005 提供全部记号。

延伸阅读

DDPM 论文(NeurIPS 2020)第 3 节给出完整推导与两个方差选择;其附录 A 有训练与采样伪代码,与本文伪代码一一对应。

相关知识点