DDPM(Denoising Diffusion Probabilistic Models)去噪扩散模型
1. 从一张清晰的图像开始#
2. 不断添加噪声逐步将其破坏#
3. 通过一步步逆转加噪过程,学习如何重建原始图像#
这种“先蓄意破坏,再学习修复”的思路,被证明是捕捉真实世界数据中复杂统计规律的极其有效的方法。
扩散模型的工作原理#
扩散模型的工作原理由两个相反的过程组成:
前向过程:系统地向图像中添加噪声。
反向过程:学习去除噪声。
前向加噪和反向去噪都是马尔可夫链,每一步仅依赖于前一步的状态。
1. 前向过程(扩散)#
假设有一张清晰的图像 x0。前向过程 q 在 T 个时间步内逐步添加少量高斯噪声,得到 x1,x2,...,xT。
每一步的转移定义为:
q(xt∣xt−1):=N(xt;1−βtxt−1,βtI)
其中:βt 控制第 t 步的噪声水平;均值是 xt−1 的缩放版本;方差是 βtI。
在最后一步 T(论文取 T = 1000)时,图像几乎完全抹去,变成纯高斯噪声。
由于高斯分布组合性质良好,我们可以直接从 x0 跳到任意的 xt,而无需模拟中间步骤:
q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
其中:αt=1−βt, αˉt=∏s=1tαs
这意味着我们可以随机选一个时间步,一步采样到加噪后的图像。让训练非常高效。
2. 反向过程(生成)#
前向过程是固定的, 反向过程 pθ 才是学习发生的地方——模型学习如何撤销加噪操作。
从 xT∼N(0,I) 开始,反向过程迭代地预测在 xt 条件下噪声稍小的图像 xt−1:
pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t))
均值和方差由参数为 θ 的神经网络预测。
使用变分推断进行训练#
我们通过最大化数据对数似然来训练网络,使用变分下界(VLB, Variational Lower Bound)(也称 ELBO)。
该下界自然分解为不同时间步对应的项:
EqLTDKL(q(xT∣x0)∥p(xT))+t>1∑Lt−1DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))−L0logpθ(x0∣x1)
变量解释:
LT:一组针对 t>1 的去噪项 Lt−1,将最终噪声潜变量 xT 与标准高斯分布比较。前向过程固定,因此该项是常数,训练中忽略。
Lt−1:模型预测的反向步骤与前向过程真实后验分布之间的 KL 散度。这是核心去噪目标。
L0:用于最终重建的重建项。从 x1 解码出 x0 的重建项。由于真实后验分布是高斯分布,这些 KL 散度有闭式解,训练稳定且高效。
DDPM 的关键洞见:预测噪声,而非均值#
最直接方法是让网络预测 μ~t,即前向过程后验分布的均值:
Lt−1=Eq[2σt21∥μ~t(xt,x0)−μθ(xt,t)∥2]+C
注意:在前向过程中,
xt=αˉtx0+1−αˉtϵ0
将 x0 用 xt 和 ϵ 表示,可发现预测 μ~t 等价于预测噪声 ϵ。
因此作者将反向过程的均值重新参数化为:
μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))
其中网络 ϵθ 预测在第 t 步添加的噪声。
简化损失函数#
通过这种参数化,损失函数简化为真实噪声与预测噪声之间简单的加权均方误差(MSE):
Ex0,ϵ[2σt2αt(1−αˉt)βt2∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]
但加权项会弱化噪声较大的时间步(大 t)的重要性。
实验表明,直接去掉加权项反而提升了样本质量。
最终的简化目标函数是:
Lsimple(θ):=Et,x0,ϵ[∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]
简化的训练循环:#
- 随机选择一张数据图像 x0。
- 随机选择时间步 t∈[1,T]。
- 采样高斯噪声 ϵ。
- 计算:
xt=αˉtx0+1−αˉtϵ
- 将 xt 和 t 输入 U-Net 预测 ϵ。
- 最小化真实噪声 ϵ 与预测噪声 ϵ^ 的均方误差。