DDPM(Denoising Diffusion Probabilistic Models)去噪扩散模型

1. 从一张清晰的图像开始#

2. 不断添加噪声逐步将其破坏#

3. 通过一步步逆转加噪过程,学习如何重建原始图像#

这种“先蓄意破坏,再学习修复”的思路,被证明是捕捉真实世界数据中复杂统计规律的极其有效的方法。

扩散模型的工作原理#

扩散模型的工作原理由两个相反的过程组成:
前向过程:系统地向图像中添加噪声。
反向过程:学习去除噪声。 image 前向加噪和反向去噪都是马尔可夫链,每一步仅依赖于前一步的状态。

1. 前向过程(扩散)#

假设有一张清晰的图像 x0x_0。前向过程 qq 在 TT 个时间步内逐步添加少量高斯噪声,得到 x1,x2,...,xTx_1, x_2, ..., x_T。
每一步的转移定义为:

q(xt∣xt−1)≔N(xt;1−βtxt−1,βtI)q(x_t|x_{t-1}) \coloneqq \mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_t I)

其中:βt\beta_t 控制第 tt 步的噪声水平;均值是 xt−1x_{t-1} 的缩放版本;方差是 βtI\beta_t I。
在最后一步 T(论文取 T = 1000)时,图像几乎完全抹去,变成纯高斯噪声。

由于高斯分布组合性质良好,我们可以直接从 x0x_0 跳到任意的 xtx_t,而无需模拟中间步骤:

q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)q(x_t|x_0)=\mathcal{N}(x_t;\sqrt{\bar{\alpha}_t}x_0,(1-\bar{\alpha}_t)I)

其中:αt=1−βt\alpha_t=1-\beta_t, αˉt=∏s=1tαs\bar{\alpha}_t=\prod_{s=1}^{t}\alpha_s
这意味着我们可以随机选一个时间步,一步采样到加噪后的图像。让训练非常高效。

2. 反向过程(生成)#

前向过程是固定的, 反向过程 pθp_\theta 才是学习发生的地方——模型学习如何撤销加噪操作。 从 xT∼N(0,I)x_T \sim \mathcal{N}(0,I) 开始,反向过程迭代地预测在 xtx_t 条件下噪声稍小的图像 xt−1x_{t-1}:

pθ(xt−1∣xt):=N(xt−1;μθ(xt,t),Σθ(xt,t))p_\theta(x_{t-1}|x_t):=\mathcal{N}(x_{t-1};\mu_\theta(x_t,t),\Sigma_\theta(x_t,t))

均值和方差由参数为 θ\theta 的神经网络预测。

使用变分推断进行训练#

我们通过最大化数据对数似然来训练网络,使用变分下界(VLB, Variational Lower Bound)(也称 ELBO)。

该下界自然分解为不同时间步对应的项:

Eq[DKL(q(xT∣x0)∥p(xT))⏟LT+∑t>1DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))⏟Lt−1−log⁡pθ(x0∣x1)⏟L0]\mathbb{E}_q \left[ \underbrace{ D_{KL}(q(x_T|x_0)\Vert p(x_T)) }_{L_T} + \sum_{t>1} \underbrace{ D_{KL}(q(x_{t-1}|x_t,x_0)\Vert p_\theta(x_{t-1}|x_t)) }_{L_{t-1}} - \underbrace{ \log p_\theta(x_0|x_1) }_{L_0} \right]

变量解释:
LTL_T:一组针对 t>1t>1 的去噪项 Lt−1L_{t-1},将最终噪声潜变量 xTx_T 与标准高斯分布比较。前向过程固定,因此该项是常数,训练中忽略。
Lt−1L_{t-1}:模型预测的反向步骤与前向过程真实后验分布之间的 KL 散度。这是核心去噪目标。
L0L_0:用于最终重建的重建项。从 x1x_1 解码出 x0x_0 的重建项。由于真实后验分布是高斯分布,这些 KL 散度有闭式解,训练稳定且高效。

DDPM 的关键洞见:预测噪声,而非均值#

最直接方法是让网络预测 μ~t\tilde{\mu}_t,即前向过程后验分布的均值:

Lt−1=Eq[12σt2∥μ~t(xt,x0)−μθ(xt,t)∥2]+CL_{t-1} = \mathbb{E}_q \left[ \frac{1}{2\sigma_t^2} \|\tilde{\mu}_t(x_t,x_0)-\mu_\theta(x_t,t)\|^2 \right] +C

注意:在前向过程中,

xt=αˉtx0+1−αˉtϵ0x_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon_0

将 x0x_0 用 xtx_t 和 ϵ\epsilon 表示,可发现预测 μ~t\tilde{\mu}_t 等价于预测噪声 ϵ\epsilon。

因此作者将反向过程的均值重新参数化为:

μθ(xt,t)=1αt(xt−βt1−αˉtϵθ(xt,t))\mu_\theta(x_t,t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t- \frac{\beta_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t,t) \right)

其中网络 ϵθ\epsilon_\theta 预测在第 tt 步添加的噪声。

简化损失函数#

通过这种参数化,损失函数简化为真实噪声与预测噪声之间简单的加权均方误差(MSE):

Ex0,ϵ[βt22σt2αt(1−αˉt)∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]\mathbb{E}_{x_0,\epsilon} \left[ \frac{\beta_t^2} {2\sigma_t^2\alpha_t(1-\bar{\alpha}_t)} \| \epsilon-\epsilon_\theta( \sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon,t ) \|^2 \right]

但加权项会弱化噪声较大的时间步(大 tt)的重要性。

实验表明,直接去掉加权项反而提升了样本质量。

最终的简化目标函数是:

Lsimple(θ):=Et,x0,ϵ[∥ϵ−ϵθ(αˉtx0+1−αˉtϵ,t)∥2]L_{\text{simple}}(\theta) := \mathbb{E}_{t,x_0,\epsilon} \left[ \| \epsilon-\epsilon_\theta( \sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon,t ) \|^2 \right]

简化的训练循环:#

  1. 随机选择一张数据图像 x0x_0。
  2. 随机选择时间步 t∈[1,T]t\in[1,T]。
  3. 采样高斯噪声 ϵ\epsilon。
  4. 计算:
xt=αˉtx0+1−αˉtϵx_t=\sqrt{\bar{\alpha}_t}x_0+\sqrt{1-\bar{\alpha}_t}\epsilon
  1. 将 xtx_t 和 tt 输入 U-Net 预测 ϵ\epsilon。
  2. 最小化真实噪声 ϵ\epsilon 与预测噪声 ϵ^\hat{\epsilon} 的均方误差。