生成式AI(3):去噪扩散模型DDPM详解

近年来,扩散模型(Diffusion Models)在图像生成任务中展现出了极高的性能,逐渐成为继 GANs 和 VAEs 之后的一类重要生成模型。特别是在高分辨率图像合成、图像编辑和音频生成等领域,扩散模型因其稳定性强、生成质量高而备受关注。去噪扩散模型(Denoising Diffusion Probabilistic Models, DDPM)是扩散模型的代表性方法,其核心思想是将一个图像逐步添加噪声变成纯噪声,再通过一个反向过程一步步去噪还原原始图像。

扩散模型的关键在于两个过程:前向扩散过程反向去噪过程,它们通过构建可学习的马尔可夫链,实现从随机噪声中生成高质量数据。

1 介绍

扩散模型是一种生成模型,其特点包括:

  • 一个固定的前向过程 q q q,它使用马尔可夫链在 1.. T 1..T 1..T 个时间步中逐渐向输入图像添加噪声。当 T → ∞ T \to \infty T 时,图像最终变成纯噪声。

  • 一个反向过程 p θ p_\theta pθ,它从一张纯高斯噪声图像开始,学习在每个时间步移除噪声的方式,逐步还原出原始输入图像。

在这里插入图片描述

第一步:前向过程(加噪声)

在每一个固定的前向过程步骤中,稍微加噪后的图像 x t x_t xt 会基于前一步图像 x t − 1 x_{t-1} xt1 被计算出来。这个更嘈杂的新图像 x t x_t xt 是从条件分布 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1)​ 中采样得到的。假设我们有一张清晰的猫的照片 x 0 x_0 x0,然后每隔一小步,就往这张图里加一点点噪声:
x 1 ∼ q ( x 1 ∣ x 0 ) , x 2 ∼ q ( x 2 ∣ x 1 ) , … , x T ∼ q ( x T ∣ x T − 1 ) x_1 \sim q(x_1|x_0),\quad x_2 \sim q(x_2|x_1),\quad \dots,\quad x_T \sim q(x_T|x_{T-1}) x1q(x1x0),x2q(x2x1),,xTq(xTxT1)

加到最后 x T x_T xT 就完全变成一张看不出图像内容的纯高斯噪声。

第二步:反向过程(去噪声)

在每一个学习到的反向过程步骤中,稍微去噪后的图像 x t − 1 x_{t-1} xt1 会根据当前较嘈杂的图像 x t x_t xt 被计算出来。这个新的去噪图像 x t − 1 x_{t-1} xt1 是从条件分布 p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt) 中采样的。

现在我们从那张纯噪声图 x T x_T xT 开始,尝试一步一步“还原”出原图 x 0 x_0 x0,也就是:

x T − 1 ∼ p θ ( x T − 1 ∣ x T ) , x T − 2 ∼ p θ ( x T − 2 ∣ x T − 1 ) , … , x 0 ∼ p θ ( x 0 ∣ x 1 ) x_{T-1} \sim p_\theta(x_{T-1}|x_T),\quad x_{T-2} \sim p_\theta(x_{T-2}|x_{T-1}),\quad \dots,\quad x_0 \sim p_\theta(x_0|x_1) xT1pθ(xT1xT),xT2pθ(xT2xT1),,x0pθ(x0x1)

这个过程是用神经网络 p θ p_\theta pθ 来学的,目标就是一步步预测“如何去掉噪声”。


在每一步中添加和移除的噪声量都非常小,因此每一步的转移分布 q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1) p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt) 都可以被视为条件高斯分布,这使得使用神经网络进行训练变得更加容易。

  • 高斯分布就是“变化集中在中间、偶尔偏一点”的一种随机方式,非常适合描述扩散模型中逐步加噪/去噪的过程,也让训练更简单、更稳定。

为什么每一步使用高斯分布?

因为每一步添加或移除的噪声量都非常小,我们可以假设当前图像只和前一步图像差一点点。这种“微小变化”可以很好地用高斯分布来建模:

  • q ( x t ∣ x t − 1 ) q(x_t|x_{t-1}) q(xtxt1) 表示“添加一点噪声”;
  • p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1}|x_t) pθ(xt1xt) 表示“去掉一点噪声”。

这样一来,整个模型就可以被训练成一个“逐步去噪器”,最终从纯噪声恢复出真实图像。

2 前向扩散过程

2.1 数学原理

在这里插入图片描述

前向过程会在原始图像 x 0 x_0 x0 上逐步添加少量的高斯噪声,持续 t = 1 , . . . , T t = 1, ..., T t=1,...,T 个时间步。在给定 x t − 1 x_{t-1} xt1 的前提下生成 x t x_t xt 的分布为:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t \mathbf{I}) q(xtxt1)=N(xt;1βt xt1,βtI)

其中每一步添加的噪声的方差 β t \beta_t βt 是由一个“方差调度表”确定的,其中 0 < β 1 < β 2 < ⋯ < β T < 1 0 < \beta_1 < \beta_2 < \dots < \beta_T < 1 0<β1<β2<<βT<1

方差调度表是一组预定义的 β t \beta_t βt 值,决定了扩散过程中每一步添加多少噪声,是整个扩散模型的“噪声时间计划”。

  1. 稳定训练:如果一开始就加很多噪声,图像马上就毁了,训练没法进行;
  2. 平滑过渡:让整个模糊过程是逐渐的,便于神经网络去学习“逆过程”;
  3. 可控性强:我们可以尝试不同的 β t \beta_t βt 曲线,比如线性增加、余弦曲线、固定值等,调节生成质量和速度。

接下来我们从这个分布中采样一张图像 x t x_t xt,即从 x t − 1 x_{t-1} xt1 得到下一张更嘈杂的图像。为此,我们使用重参数化技巧:

x t = 1 − β t x t − 1 + β t ϵ x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon xt=1βt xt1+βt ϵ

  • x t x_t xt 的均值为 1 − β t x t − 1 \sqrt{1 - \beta_t} x_{t-1} 1βt xt1,这个缩放因子 1 − β t \sqrt{1 - \beta_t} 1βt 会把前一张图像缩小,使得添加噪声后整体方差保持一致 。
  • 添加的噪声的方差是 β t \beta_t βt,因此标准差是 β t \sqrt{\beta_t} βt
  • ϵ \epsilon ϵ 是从 N ( 0 , I ) \mathcal{N}(0, \mathbf{I}) N(0,I) 中采样得到的噪声。
  • 第一项 1 − β t x t − 1 \sqrt{1 - \beta_t} x_{t-1} 1βt xt1 表示我们保留上一张图像的一部分内容;
  • 第二项 β t ϵ \sqrt{\beta_t} \epsilon βt ϵ 表示我们加了一点新的随机噪声;
  • 每一步只变动一点点,这样才方便后面“反过来”去噪。

在这里插入图片描述

上图展示了一次前向步骤的计算过程,完整的前向过程 q ( x 1 : T ∣ x 0 ) q(x_{1:T}|x_0) q(x1:Tx0) 定义如下:

q ( x 1 : T ∣ x 0 ) = q ( x T ∣ x T − 1 ) q ( x T − 1 ∣ x T − 2 ) … q ( x 2 ∣ x 1 ) q ( x 1 ∣ x 0 ) q(x_{1:T}|x_0) = q(x_T|x_{T-1})q(x_{T-1}|x_{T-2}) \dots q(x_2|x_1)q(x_1|x_0) q(x1:Tx0)=q(xTxT1)q(xT1xT2)q(x2x1)q(x1x0)

也可以简写为:

q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(x_{1:T}|x_0) = \prod_{t=1}^T q(x_t|x_{t-1}) q(x1:Tx0)=t=1Tq(xtxt1)

2.2 方差调度

我们回顾一下每一步扩散的加噪公式是:
x t = 1 − β t x t − 1 + β t ϵ x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon xt=1βt xt1+βt ϵ

  • β t \beta_t βt 越大,加进去的噪声越多;
  • β t \beta_t βt 越小,保留的图像信息越多。

方差调度(Variance Schedule)决定了在每个时间步添加的噪声的方差。这一方差在 t = 1 , . . . , T t = 1,...,T t=1,...,T 的整个扩散过程中并不是固定的,而是满足如下关系:
0 < β 1 < β 2 < . . . < β T − 1 < β T < 1 0 < \beta_1 < \beta_2 < ... < \beta_{T-1} < \beta_T < 1 0<β1<β2<...<βT1<βT<1
常见的调度方式包括线性调度(linear)、余弦调度(cosine)、S型调度(sigmoid)以及二次调度(quadratic)等。

原始的 DDPM 论文中提出了线性调度,并在常数调度(constant)、线性调度和二次调度中,选取其为性能最优者。作者设置了 β 1 = 1 0 − 4 \beta_1 = 10^{-4} β1=104 β T = 0.02 \beta_T = 0.02 βT=0.02

余弦调度相比线性调度更加“平缓”地添加噪声,使得生成图像中前期保留更多清晰信息,效果更自然。下面左图显示了 t = 1 t = 1 t=1 t = 1000 t = 1000 t=1000 的线性方差调度图;右图显示了相同范围内的余弦方差调度图。

在这里插入图片描述

线性调度:

β t \beta_t βt 从小到大线性增加,比如从 0.0001 0.0001 0.0001 0.02 0.02 0.02,图像会慢慢变模糊,但后期突然变得很糊。

  • 优点:简单;
  • 缺点:后期图像快速崩坏。

余弦调度:

β t \beta_t βt 的增加速度在前期很慢,后期才快(像余弦函数那样缓缓上升)。图像更长时间保持清晰,过渡更平滑。

  • 优点:生成图像更自然;
  • 缺点:计算上略复杂。

为什么调度方式会影响效果?

  • 如果节奏突然加快(线性调度),图像会很快失真;
  • 如果节奏平稳(余弦调度),图像逐渐模糊,神经网络更容易学会如何“反过来恢复”。

如下图所示,上排显示了使用线性调度进行前向扩散的各个阶段,下排则为余弦调度。可以观察到余弦调度下的图像逐渐加噪更平滑,而线性调度后期图像接近纯噪声。

在这里插入图片描述

下图展示了扩散过程中的前四个步骤。由于 β t \beta_t βt 随着 t t t 增大而增大,噪声所占比例也逐步增加:几乎全部是从采样的噪声中构建出来的图像。与此同时,前一步图像所占的比例(对比度)则逐渐减小。

在这里插入图片描述

2.3 实际的前向步骤

在实践中,前向过程并不需要逐步地计算 x 1 , x 2 , … , x t x_1, x_2, \dots, x_t x1,x2,,xt。由于方差调度是固定的,我们只需要已知调度表和随机噪声 ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, \mathbf{I}) ϵN(0,I),就可以直接计算任意时刻的 x t x_t xt

我们知道:

x t = 1 − β t x t − 1 + β t ϵ t − 1 x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} xt=1βt xt1+βt ϵt1

其中 ϵ t ∼ N ( 0 , I ) \epsilon_t \sim \mathcal{N}(0, \mathbf{I}) ϵtN(0,I)

α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt,以及 α ˉ t = ∏ s = 1 t α s \bar{\alpha}_t = \prod_{s=1}^{t} \alpha_s αˉt=s=1tαs

我们可以将 α t \alpha_t αt 代入上式,得到:

x t = α t x t − 1 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αt xt1+1αt ϵt1

我们也知道:

x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 \mathbf{x}_{t-1} = \sqrt{\alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} xt1=αt1 xt2+1αt1 ϵt2

x t − 1 x_{t-1} xt1 代入 x t x_t xt 的表达式中,得:

x t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t 1 − α t − 1 ϵ t − 2 + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \begin{aligned} \mathbf{x}_t &= \sqrt{\alpha_t} \left( \sqrt{\alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} \right) + \sqrt{1 - \alpha_t} \epsilon_{t-1} \\ &= \sqrt{\alpha_t} \sqrt{\alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{\alpha_t} \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} \\ &= \sqrt{\alpha_t \alpha_{t-1}} \mathbf{x}_{t-2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} \end{aligned} xt=αt (αt1 xt2+1αt1 ϵt2)+1αt ϵt1=αt αt1 xt2+αt 1αt1 ϵt2+1αt ϵt1=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1
回顾一下两个高斯分布随机变量相加的公式:如果 X ∼ N ( μ X , σ X 2 ) X \sim \mathcal{N}(\mu_X, \sigma_X^2) XN(μX,σX2) Y ∼ N ( μ Y , σ Y 2 ) Y \sim \mathcal{N}(\mu_Y, \sigma_Y^2) YN(μY,σY2),那么 Z = X + Y ∼ N ( μ X + μ Y , σ X 2 + σ Y 2 ) Z = X + Y \sim \mathcal{N}(\mu_X + \mu_Y, \sigma_X^2 + \sigma_Y^2) Z=X+YN(μX+μY,σX2+σY2)

我们将 α t ( 1 − α t − 1 ) ϵ t − 2 \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} αt(1αt1) ϵt2 1 − α t ϵ t − 1 \sqrt{1 - \alpha_t} \epsilon_{t-1} 1αt ϵt1 合并得到一个新的高斯分布,其方差为:

α t ( 1 − α t − 1 ) + ( 1 − α t ) = 1 − α t α t − 1 \alpha_t(1 - \alpha_{t-1}) + (1 - \alpha_t) = 1 - \alpha_t \alpha_{t-1} αt(1αt1)+(1αt)=1αtαt1

因此其标准差为 1 − α t α t − 1 \sqrt{1 - \alpha_t \alpha_{t-1}} 1αtαt1 ,合并得到的高斯项为:

1 − α t α t − 1 ϵ ′ \sqrt{1 - \alpha_t \alpha_{t-1}} \epsilon' 1αtαt1 ϵ

所以我们可以将 x t x_t xt 重写为:

x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ′ , ϵ ′ ∼ N ( 0 , I ) x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \epsilon', \quad \epsilon' \sim \mathcal{N}(0, \mathbf{I}) xt=αtαt1 xt2+1αtαt1 ϵ,ϵN(0,I)

我们可以继续将这个链式计算展开到 x t − 2 x_{t-2} xt2 x t − 3 x_{t-3} xt3,最终展开到 x 0 x_0 x0

x t = α t α t − 1 … α 1   x 0 + 1 − α t α t − 1 … α 1   ϵ 0 ′ x t = α ˉ t   x 0 + 1 − α ˉ t   ϵ \mathbf{x}_t = \sqrt{\alpha_t \alpha_{t-1} \dots \alpha_1} \, \mathbf{x}_0 + \sqrt{1 - \alpha_t \alpha_{t-1} \dots \alpha_1} \, \epsilon_0' \\ \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \, \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \, \epsilon xt=αtαt1α1 x0+1αtαt1α1 ϵ0xt=αˉt x0+1αˉt ϵ

因此,我们不需要从 x 0 → x 1 → x 2 … x_0 \to x_1 \to x_2 \dots x0x1x2 一步步计算 x t x_t xt,而是直接从 x 0 x_0 x0 生成任意时间步的 x t x_t xt

3 反向去噪过程

3.1 原理

在反向过程中,我们从纯高斯噪声图像开始,并在每个时间步逐步移除噪声,最终还原出原始图像。在每一个时间步 t t t,我们需要根据当前图像 x t \mathbf{x}_t xt 得到下一个更干净的图像 x t − 1 \mathbf{x}_{t-1} xt1

我们并不知道真实的分布 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt1xt),因为这就需要我们知道所有图像的真实分布。

就像我们有一个模糊图像 x t \mathbf{x}_t xt,但并不知道它是从哪一张清晰图像 x t − 1 \mathbf{x}_{t-1} xt1 加噪得来的。如果我们能知道这个“反推路径”的分布,那就能一步步把噪声“反过来去掉”。但这个真实分布很难获取。

在这里插入图片描述

因此,我们希望用一个可学习的神经网络模型来近似这个真实分布,即:

p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt)

其中 θ \theta θ 表示模型参数。

反向过程的起点是纯噪声,因此我们规定:

q ( x T ) = p θ ( x T ) = N ( x T ; 0 , I ) q(\mathbf{x}_T) = p_\theta(\mathbf{x}_T) = \mathcal{N}(\mathbf{x}_T; \mathbf{0}, \mathbf{I}) q(xT)=pθ(xT)=N(xT;0,I)

也就是说:我们一开始给模型一个标准正态分布的随机图像 x T \mathbf{x}_T xT,然后一步步去噪出最终图像。

我们希望神经网络可以学习到每一步“去噪”的方式。由于每一步只添加/移除很少的噪声,我们可以将这个“去噪过程”视作高斯分布,其均值和方差由网络输出:

p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_t, t), \Sigma_\theta(\mathbf{x}_t, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))

其中, μ θ ( x t , t ) \mu_\theta(\mathbf{x}_t, t) μθ(xt,t) Σ θ ( x t , t ) \Sigma_\theta(\mathbf{x}_t, t) Σθ(xt,t) 分别是神经网络预测的均值和协方差。

  • 通常我们把协方差矩阵简化为对角矩阵,是为了让模型只预测每个像素自己的不确定性,不考虑像素之间的联系,从而更高效、更稳定地建模去噪过程。

整个反向过程是从 t = T t = T t=T 一步步推到 t = 0 t = 0 t=0,所以可以写成联合分布形式:

p θ ( x 0 : T ) : = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{0:T}) := p(\mathbf{x}_T) \prod_{t=1}^{T} p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(x0:T):=p(xT)t=1Tpθ(xt1xt)

反向过程是多个“单步去噪”的串联。每一步从 x t → x t − 1 \mathbf{x}_t \rightarrow \mathbf{x}_{t-1} xtxt1,由神经网络决定怎么移除噪声,最终从纯噪声一步步还原成清晰图像。

我们希望 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 能尽量贴近真实的后验分布 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt1xt)。尽管这个真实分布本身不能直接获得,但在已知原始图像 x 0 \mathbf{x}_0 x0 时,我们可以准确计算这个条件分布:

q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)

虽然 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt1xt) 是未知的,但我们知道如何根据 x 0 \mathbf{x}_0 x0 x t \mathbf{x}_t xt 推出 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0),这为我们提供了训练目标!

因此,接下来的目标就是求出 μ ~ ( x t , x 0 ) \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) μ~(xt,x0) β ~ t \tilde{\beta}_t β~t,从而构建出可监督学习的目标分布。

3.2 数学推导

首先回顾贝叶斯公式(Bayes’ Rule):

P ( A ∣ B ) = P ( A , B ) P ( B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(A, B)}{P(B)} = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(A,B)=P(B)P(BA)P(A)

以及条件贝叶斯公式:

P ( A ∣ B , C ) = P ( A , B , C ) P ( B , C ) = P ( B ∣ A , C ) P ( A ∣ C ) P ( C ) P ( B ∣ C ) P ( C ) = P ( B ∣ A , C ) P ( A ∣ C ) P ( B ∣ C ) P(A|B, C) = \frac{P(A, B, C)}{P(B, C)} = \frac{P(B|A, C)P(A|C)P(C)}{P(B|C)P(C)} = \frac{P(B|A, C)P(A|C)}{P(B|C)} P(AB,C)=P(B,C)P(A,B,C)=P(BC)P(C)P(BA,C)P(AC)P(C)=P(BC)P(BA,C)P(AC)

利用贝叶斯公式,我们可以得到:

q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) ⋅ q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) = \frac{q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) \cdot q(\mathbf{x}_{t-1} | \mathbf{x}_0)}{q(\mathbf{x}_t | \mathbf{x}_0)} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)

也就是说,我们可以把 x t \mathbf{x}_t xt 给定的前一帧 x t − 1 \mathbf{x}_{t-1} xt1 的真实分布(在已知 x 0 \mathbf{x}_0 x0 的条件下),拆解成三个前向过程相关的分布项来重新组合。


根据我们在前向过程中的推导,我们已经知道以下几个分布:

q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t   x t − 1 , β t I ) q ( x t − 1 ∣ x 0 ) = N ( x t − 1 ; α ˉ t − 1   x 0 , ( 1 − α ˉ t − 1 ) I ) q ( x t ∣ x 0 ) = N ( x t ; α ˉ t   x 0 , ( 1 − α ˉ t ) I ) \begin{aligned} q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) &= q(\mathbf{x}_t | \mathbf{x}_{t-1}) = \mathcal{N}(\mathbf{x}_t; \sqrt{1 - \beta_t} \, \mathbf{x}_{t-1}, \beta_t \mathbf{I}) \\\\ q(\mathbf{x}_{t-1} | \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_{t-1}; \sqrt{\bar{\alpha}_{t-1}} \, \mathbf{x}_0, (1 - \bar{\alpha}_{t-1}) \mathbf{I}) \\\\ q(\mathbf{x}_t | \mathbf{x}_0) &= \mathcal{N}(\mathbf{x}_t; \sqrt{\bar{\alpha}_t} \, \mathbf{x}_0, (1 - \bar{\alpha}_t) \mathbf{I}) \end{aligned} q(xtxt1,x0)q(xt1x0)q(xtx0)=q(xtxt1)=N(xt;1βt xt1,βtI)=N(xt1;αˉt1 x0,(1αˉt1)I)=N(xt;αˉt x0,(1αˉt)I)

这些分布都源于我们前面提到的“从 x 0 \mathbf{x}_0 x0 一步加噪到 x t \mathbf{x}_t xt”的闭式表达式。

接下来我们回顾标准高斯分布的概率密度函数:

f ( x ) = 1 σ 2 π exp ⁡ ( − 1 2 ( x − μ σ ) 2 ) f(x) = \frac{1}{\sigma \sqrt{2\pi}} \exp\left( -\frac{1}{2} \left( \frac{x - \mu}{\sigma} \right)^2 \right) f(x)=σ2π 1exp(21(σxμ)2)

💬 对于我们来说,最重要的是其中的指数项 exp ⁡ ( − 1 2 ( ⋅ ) 2 ) \exp(-\frac{1}{2} (\cdot)^2) exp(21()2),因为我们后面要比较的是多个高斯分布的指数形式。


所以我们可以将上述三个正态分布写为指数形式的比例:

q ( x t ∣ x t − 1 , x 0 ) ∝ exp ⁡ ( − 1 2 ⋅ ( x t − α t x t − 1 ) 2 β t ) q ( x t − 1 ∣ x 0 ) ∝ exp ⁡ ( − 1 2 ⋅ ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 ) q ( x t ∣ x 0 ) ∝ exp ⁡ ( − 1 2 ⋅ ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) \begin{aligned} q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) &\propto \exp\left( -\frac{1}{2} \cdot \frac{ \left( \mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1} \right)^2 }{ \beta_t } \right) \\\\ q(\mathbf{x}_{t-1} | \mathbf{x}_0) &\propto \exp\left( -\frac{1}{2} \cdot \frac{ \left( \mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0 \right)^2 }{ 1 - \bar{\alpha}_{t-1} } \right) \\\\ q(\mathbf{x}_t | \mathbf{x}_0) &\propto \exp\left( -\frac{1}{2} \cdot \frac{ \left( \mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0 \right)^2 }{ 1 - \bar{\alpha}_t } \right) \end{aligned} q(xtxt1,x0)q(xt1x0)q(xtx0)exp(21βt(xtαt xt1)2)exp(211αˉt1(xt1αˉt1 x0)2)exp(211αˉt(xtαˉt x0)2)

这些形式让我们可以把贝叶斯公式的分子、分母都用相似的指数形式表示,然后组合后再整理成一个新的高斯分布。

我们接下来将利用这些表达式重写 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0),从而推导出我们想要的均值 μ ~ ( x t , x 0 ) \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) μ~(xt,x0) 和方差 β ~ t \tilde{\beta}_t β~t 的具体表达。
q ( x t − 1 ∣ x t , x 0 ) ∝ e x p ( − 1 2 ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) e x p ( − 1 2 ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 ) e x p ( − 1 2 ( x t − α t x t − 1 ) 2 β t ) = e x p ( − 1 2 ( ( x t − α t x t − 1 ) 2 β t + ( x t − 1 − α ˉ t − 1 x 0 ) 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \propto \frac{exp\left(-\frac{1}{2} \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0)^2}{1 - \bar{\alpha}_t}\right) exp\left(-\frac{1}{2} \frac{(\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0)^2}{1 - \bar{\alpha}_{t-1}}\right)}{exp\left(-\frac{1}{2} \frac{(\mathbf{x}_t - \sqrt{\alpha_t}\mathbf{x}_{t-1})^2}{\beta_t}\right)} \\\\ = exp\left(-\frac{1}{2} \left( \frac{(\mathbf{x}_t - \sqrt{\alpha_t}\mathbf{x}_{t-1})^2}{\beta_t} + \frac{(\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}}\mathbf{x}_0)^2}{1 - \bar{\alpha}_{t-1}} - \frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t}\mathbf{x}_0)^2}{1 - \bar{\alpha}_t} \right) \right) q(xt1xt,x0)exp(21βt(xtαt xt1)2)exp(211αˉt(xtαˉt x0)2)exp(211αˉt1(xt1αˉt1 x0)2)=exp(21(βt(xtαt xt1)2+1αˉt1(xt1αˉt1 x0)21αˉt(xtαˉt x0)2))

因为 e a e b / e c = e a + b − c e^a e^b / e^c = e^{a + b - c} eaeb/ec=ea+bc,所以我们继续展开:

= exp ⁡ ( − 1 2 ( x t 2 − 2 x t α t x t − 1 + α t x t − 1 2 β t + x t − 1 2 − 2 x t − 1 α ˉ t − 1 x 0 + α ˉ t − 1 x 0 2 1 − α ˉ t − 1 − ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) \begin{aligned} &= \exp\left( -\frac{1}{2} \left( \frac{\mathbf{x}_t^2 - 2 \mathbf{x}_t \sqrt{\alpha_t} \mathbf{x}_{t-1} + \alpha_t \mathbf{x}_{t-1}^2}{\beta_t}+\frac{\mathbf{x}_{t-1}^2 - 2 \mathbf{x}_{t-1} \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0 + \bar{\alpha}_{t-1} \mathbf{x}_0^2}{1 - \bar{\alpha}_{t-1}}-\frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1 - \bar{\alpha}_t} \right) \right) \end{aligned} =exp(21(βtxt22xtαt xt1+αtxt12+1αˉt1xt122xt1αˉt1 x0+αˉt1x021αˉt(xtαˉt x0)2))

展开各个二次项,合并 x t − 1 2 \mathbf{x}_{t-1}^2 xt12 x t − 1 \mathbf{x}_{t-1} xt1 项:

= exp ⁡ ( − 1 2 ( ( α t β t + 1 1 − α ˉ t − 1 ) x t − 1 2 − ( 2 α t x t β t + 2 α ˉ t − 1 x 0 1 − α ˉ t − 1 ) x t − 1 + ( x t − α ˉ t x 0 ) 2 1 − α ˉ t ) ) \begin{aligned} &= \exp\left( -\frac{1}{2} \left( \left( \frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}} \right) \mathbf{x}_{t-1}^2 -\left( \frac{2 \sqrt{\alpha_t} \mathbf{x}_t}{\beta_t} + \frac{2 \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0}{1 - \bar{\alpha}_{t-1}} \right) \mathbf{x}_{t-1}+\frac{(\mathbf{x}_t - \sqrt{\bar{\alpha}_t} \mathbf{x}_0)^2}{1 - \bar{\alpha}_t} \right) \right) \end{aligned} =exp(21((βtαt+1αˉt11)xt12(βt2αt xt+1αˉt12αˉt1 x0)xt1+1αˉt(xtαˉt x0)2))

x t − 1 \mathbf{x}_{t-1} xt1 相关项整理成平方形式:

= e x p ( ( x t − 1 − α t β t x t + α ˉ t − 1 1 − α ˉ t − 1 x 0 α t β t + 1 1 − α ˉ t − 1 ( α t β t + 1 1 − α ˉ t − 1 ) − 1 ) 2 ) = exp\left(\left( \frac{\mathbf{x}_{t-1} - \frac{\frac{\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0}{\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}}}}{\left( \sqrt{\frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}}} \right)^{-1}} \right)^2 \right) =exp (βtαt+1αˉt11 )1xt1βtαt+1αˉt11βtαt xt+1αˉt1αˉt1 x0 2

根据上述计算,我们最终可以写为:

q ( x t − 1 ∣ x t , x 0 ) ∝ exp ⁡ ( ( x t − 1 − μ ~ t ( x t , x 0 ) ) 2 β ~ t ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) \propto \exp\left(\frac{(\mathbf{x}_{t-1} - \tilde{\mu}_t(\mathbf{x}_t, \mathbf{x}_0))^2}{\tilde{\beta}_t} \right) q(xt1xt,x0)exp(β~t(xt1μ~t(xt,x0))2)

根据高斯分布的形式,我们可以得到:

β ~ t = ( α t β t + 1 1 − α ˉ t − 1 ) − 1 = β t ( 1 − α ˉ t − 1 ) α t − α ˉ t + β t = β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t \tilde{\beta}_t = \left( \frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}} \right)^{-1} = \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{\alpha_t - \bar{\alpha}_t + \beta_t} = \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} β~t=(βtαt+1αˉt11)1=αtαˉt+βtβt(1αˉt1)=1αˉtβt(1αˉt1)
我们可以使用 β ~ t \tilde{\beta}_t β~t 的值来计算 μ ~ t \tilde{\mu}_t μ~t

μ ~ t ( x t , x 0 ) = ( α t β t x t + α ˉ t − 1 1 − α ˉ t − 1 x 0 ) / ( α t β t + 1 1 − α ˉ t − 1 ) \tilde{\mu}_t(\mathbf{x}_t, \mathbf{x}_0) = \left( \frac{\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0 \right) \Big/ \left( \frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}} \right) μ~t(xt,x0)=(βtαt xt+1αˉt1αˉt1 x0)/(βtαt+1αˉt11)

= ( α t β t x t + α ˉ t − 1 1 − α ˉ t − 1 x 0 ) ( β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t ) = \left( \frac{\sqrt{\alpha_t}}{\beta_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_{t-1}} \mathbf{x}_0 \right) \left( \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \right) =(βtαt xt+1αˉt1αˉt1 x0)(1αˉtβt(1αˉt1))

因为:
1 α t β t + 1 1 − α ˉ t − 1 = β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t \frac{1}{ \frac{\alpha_t}{\beta_t} + \frac{1}{1 - \bar{\alpha}_{t-1}} } = \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} βtαt+1αˉt111=1αˉtβt(1αˉt1)

最终化简为:
μ ~ t ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + β t α ˉ t − 1 1 − α ˉ t x 0 \tilde{\mu}_t(\mathbf{x}_t, \mathbf{x}_0) = \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\beta_t \sqrt{\bar{\alpha}_{t-1}}}{1 - \bar{\alpha}_t} \mathbf{x}_0 μ~t(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtβtαˉt1 x0

我们已知:

x t = α ˉ t   x 0 + 1 − α ˉ t   ϵ t \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \, \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t xt=αˉt x0+1αˉt ϵt

我们可以将其变形为:

x 0 = 1 α ˉ t ( x t − 1 − α ˉ t   ϵ t ) \mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t \right) x0=αˉt 1(xt1αˉt ϵt)
我们可以将 x 0 \mathbf{x}_0 x0 表达式代入 μ ~ t \tilde{\mu}_t μ~t 的公式中:

μ ~ t ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + β t α ˉ t − 1 1 − α ˉ t ( 1 α ˉ t ( x t − 1 − α ˉ t   ϵ t ) ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + β t α ˉ t − 1 1 − α ˉ t ⋅ 1 α t α ˉ t − 1 ( x t − 1 − α ˉ t   ϵ t ) \tilde{\mu}_t(\mathbf{x}_t, \mathbf{x}_0) = \frac{ \sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1}) }{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{ \beta_t \sqrt{ \bar{\alpha}_{t-1} } }{1 - \bar{\alpha}_t} \left( \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t \right) \right) \\\\ = \frac{ \sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1}) }{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{ \beta_t \sqrt{ \bar{\alpha}_{t-1} } }{1 - \bar{\alpha}_t} \cdot \frac{1}{\sqrt{{\alpha}_t\bar{\alpha}_{t-1}}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t \right) μ~t(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtβtαˉt1 (αˉt 1(xt1αˉt ϵt))=1αˉtαt (1αˉt1)xt+1αˉtβtαˉt1 αtαˉt1 1(xt1αˉt ϵt)

α ˉ t \sqrt{\bar{\alpha}_t} αˉt 展开为 α t ⋅ α ˉ t − 1 \sqrt{\alpha_t} \cdot \sqrt{ \bar{\alpha}_{t-1} } αt αˉt1
= α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + ( 1 − α t ) ( 1 − α ˉ t ) α t ( x t − 1 − α ˉ t   ϵ t ) = \frac{ \sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1}) }{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{(1 - \alpha_t)}{(1 - \bar{\alpha}_t)\sqrt{\alpha_t}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t \right) =1αˉtαt (1αˉt1)xt+(1αˉt)αt (1αt)(xt1αˉt ϵt)

β t \beta_t βt 替换为 1 − α t 1 - \alpha_t 1αt,分子分母都使用 α t \sqrt{\alpha_t} αt 统一:
= α t ( 1 − α ˉ t − 1 ) α t ( 1 − α ˉ t ) x t + ( 1 − α t ) ( 1 − α ˉ t ) α t x t − ( 1 − α t ) ( 1 − α ˉ t ) α t 1 − α ˉ t   ϵ t = \frac{ \alpha_t (1 - \bar{\alpha}_{t-1}) }{ \sqrt{\alpha_t}(1 - \bar{\alpha}_t) } \mathbf{x}_t + \frac{ (1 - \alpha_t) }{ (1 - \bar{\alpha}_t)\sqrt{\alpha_t} } \mathbf{x}_t - \frac{ (1 - \alpha_t) }{ (1 - \bar{\alpha}_t)\sqrt{\alpha_t} } \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t =αt (1αˉt)αt(1αˉt1)xt+(1αˉt)αt (1αt)xt(1αˉt)αt (1αt)1αˉt ϵt

合并同类项(两个 x t \mathbf{x}_t xt 项):
= ( α t − α t + 1 ) α t ( 1 − α ˉ t ) x t − ( 1 − α t ) ( 1 − α ˉ t ) α t 1 − α ˉ t   ϵ t = \frac{ (\alpha_t - \alpha_t + 1) }{ \sqrt{\alpha_t}(1 - \bar{\alpha}_t) } \mathbf{x}_t - \frac{ (1 - \alpha_t) }{ (1 - \bar{\alpha}_t)\sqrt{\alpha_t} } \sqrt{1 - \bar{\alpha}_t} \, \epsilon_t =αt (1αˉt)(αtαt+1)xt(1αˉt)αt (1αt)1αˉt ϵt

化简得:

= 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ t ) = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_t \right) =αt 1(xt1αˉt 1αtϵt)

从上式可以看出, μ ~ t \tilde{\mu}_t μ~t 不再依赖于 x 0 \mathbf{x}_0 x0,它只依赖于当前图像 x t \mathbf{x}_t xt 和噪声 ϵ t ∼ N ( 0 , I ) \epsilon_t \sim \mathcal{N}(0, \mathbf{I}) ϵtN(0,I)

因此我们可以将 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0) 表达为如下形式:

q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ t ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\mu}_t(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)

其中:
μ ~ t = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ t ) β ~ t = β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t \tilde{\mu}_t = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_t \right) \\\\ \tilde{\beta}_t = \frac{ \beta_t (1 - \bar{\alpha}_{t-1}) }{1 - \bar{\alpha}_t} μ~t=αt 1(xt1αˉt 1αtϵt)β~t=1αˉtβt(1αˉt1)

我们可以对学习得到的分布 p θ p_\theta pθ 使用类似的公式:

p θ ( x t − 1 ∣ x t ) = N ( x t − 1 ; μ θ ( x t , t ) , Σ θ ( x t , t ) ) p_\theta(\mathbf{x}_{t-1} | \mathbf{x}_t) = \mathcal{N}(\mathbf{x}_{t-1}; \mu_\theta(\mathbf{x}_t, t), \Sigma_\theta(\mathbf{x}_t, t)) pθ(xt1xt)=N(xt1;μθ(xt,t),Σθ(xt,t))

其中:

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

其中 ϵ θ \epsilon_\theta ϵθ 是模型预测出的噪声,用于从 x t − 1 \mathbf{x}_{t-1} xt1 得到 x t \mathbf{x}_t xt

对于方差部分, Σ θ = β t I \Sigma_\theta = \beta_t \mathbf{I} Σθ=βtI Σ θ = β ~ t I \Sigma_\theta = \tilde{\beta}_t \mathbf{I} Σθ=β~tI 都可以使用。实际中,它们的效果差异不大。

为了从 x t \mathbf{x}_t xt 得到 x t − 1 \mathbf{x}_{t-1} xt1,我们可以将该分布转换为如下形式的公式:

x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t   ϵ θ ) + β t ( 1 − α ˉ t − 1 ) 1 − α ˉ t z \mathbf{x}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \, \epsilon_\theta \right) + \frac{\beta_t (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{z} xt1=αt 1(xt1αˉt 1αtϵθ)+1αˉtβt(1αˉt1)z

其中 ϵ θ \epsilon_\theta ϵθ 是在时间步 t t t 模型预测的噪声, z ∼ N ( 0 , I ) \mathbf{z} \sim \mathcal{N}(0, \mathbf{I}) zN(0,I)。这个计算过程会用于采样阶段。

4 理解扩散模型

理解扩散模型最关键的一点是:我们不是在凭空创造图像,而是在构造一个可以正着加噪、反着去噪的数学过程,这个过程必须足够规则和可控,才能被神经网络有效学习。

前向扩散:一个高斯模糊的马尔可夫链

我们可以把前向过程想象成一个马尔可夫链加模糊滤镜的过程。一开始我们有原图 x 0 x_0 x0,每一步我们都往图像里加一点高斯噪声,像是给图像盖上一层模糊面纱:

  • 每一步的操作是: x t = 1 − β t x t − 1 + β t ϵ x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon xt=1βt xt1+βt ϵ
  • ϵ \epsilon ϵ 是从标准正态分布中采样的纯随机噪声;
  • 随着 t t t 增大,图像逐渐失真,直到变成几乎纯噪声的 x T x_T xT

这个过程之所以选用高斯分布,是因为它具有非常好的封闭性:一连串高斯扰动的组合,仍然是高斯分布,这让我们能推导出从任意 x 0 x_0 x0 x t x_t xt 的直接表达式:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon xt=αˉt x0+1αˉt ϵ
这意味着我们可以跳过中间所有步骤,直接计算任意时间步的图像结果,这是模型训练中非常重要的技巧。

反向扩散:从模糊图像中推测“它曾经是什么”

如果前向是加模糊,反向就是猜清晰:已知现在的图像 x t x_t xt 是模糊的,我们要推测它最有可能来自哪一张更清晰的图 x t − 1 x_{t-1} xt1

关键在于:由于我们知道加噪是高斯操作,我们可以精确推导出 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1} | x_t, x_0) q(xt1xt,x0) 的真实形式 —— 它仍然是一个高斯分布,并且我们可以计算出它的均值和方差。这一点很重要,它让我们可以用一个神经网络来学习如何从 x t x_t xt 预测出其中的噪声成分 ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵθ(xt,t),从而近似得到 x t − 1 x_{t-1} xt1 的分布。最终我们使用下面这个公式从 x t x_t xt 采样出 x t − 1 x_{t-1} xt1
x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sigma_t z xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz
其中 z z z 是标准高斯噪声, σ t \sigma_t σt 控制采样过程的“模糊度”。这样,模型就能一步步把图像从“全是噪声”的 x T x_T xT 还原成我们想要的 x 0 x_0 x0

5 损失函数与变分下界

扩散模型的训练目标是最大化图像的生成概率 log ⁡ p θ ( x 0 ) \log p_\theta(\mathbf{x}_0) logpθ(x0)。由于这个目标难以直接优化,DDPM 使用了一个更容易处理的替代目标:变分下界(Variational Lower Bound, VLB)。我们通过最小化其上界,即负对数似然的变分下界来训练模型。

log ⁡ p θ ( x 0 ) ≥ log ⁡ p θ ( x 0 ) − D KL ( q ( x 1 : T ∣ x 0 ) ∥ p θ ( x 1 : T ∣ x 0 ) ) \log p_\theta(\mathbf{x}_0) \geq \log p_\theta(\mathbf{x}_0) - D_{\text{KL}}(q(\mathbf{x}_{1:T}|\mathbf{x}_0) \| p_\theta(\mathbf{x}_{1:T}|\mathbf{x}_0)) logpθ(x0)logpθ(x0)DKL(q(x1:Tx0)pθ(x1:Tx0))

其中, q ( x 1 : T ∣ x 0 ) q(\mathbf{x}_{1:T}|\mathbf{x}_0) q(x1:Tx0) 是前向加噪过程, p θ ( x 1 : T ∣ x 0 ) p_\theta(\mathbf{x}_{1:T}|\mathbf{x}_0) pθ(x1:Tx0) 是模型学习到的反向去噪过程。我们希望模型能够逐步还原出接近真实图像的数据。

KL 散度(Kullback-Leibler divergence)是衡量两个概率分布差异的指标,它的值总是大于等于 0,因此右侧始终小于等于左侧。

基于这一目标,可以推导出以下损失函数(推导过程略):

E [ − log ⁡ p θ ( x 0 ) ] ≤ E q [ D KL ( q ( x T ∣ x 0 ) ∥ q ( x T ) ) + ∑ t = 2 T D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) − log ⁡ p θ ( x 0 ∣ x 1 ) ] = L \mathbb{E}[-\log p_\theta(\mathbf{x}_0)] \leq \mathbb{E}_q \left[ D_{\text{KL}}(q(\mathbf{x}_T|\mathbf{x}_0) \| q(\mathbf{x}_T)) + \sum_{t=2}^{T} D_{\text{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)) - \log p_\theta(\mathbf{x}_0|\mathbf{x}_1) \right] = L E[logpθ(x0)]Eq[DKL(q(xTx0)q(xT))+t=2TDKL(q(xt1xt,x0)pθ(xt1xt))logpθ(x0x1)]=L

这个损失函数由三部分组成:

  • 重建误差项(从最后一步还原图像):
    L 0 = log ⁡ p θ ( x 0 ∣ x 1 ) L_0 = \log p_\theta(\mathbf{x}_0|\mathbf{x}_1) L0=logpθ(x0x1)

  • 初始噪声项(衡量 x T x_T xT 是否接近标准高斯):
    L T = D KL ( q ( x T ∣ x 0 ) ∥ q ( x T ) ) L_T = D_{\text{KL}}(q(\mathbf{x}_T|\mathbf{x}_0) \| q(\mathbf{x}_T)) LT=DKL(q(xTx0)q(xT))

  • 去噪拟合项(每一步都需要尽可能复原干净):
    L t − 1 = D KL ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) L_{t-1} = D_{\text{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)) Lt1=DKL(q(xt1xt,x0)pθ(xt1xt))

实际训练中,通常只保留中间每一步的去噪损失项,并将其简化为均方误差(MSE)来计算,效率更高、收敛更稳定。

6 总结

扩散模型的魅力就在于它建立了一个结构清晰、数学上对称的生成框架:先用一条固定的马尔可夫链逐步将图像加噪到纯高斯噪声,然后训练一个神经网络去模拟这条链的反向过程,逐步预测和去除每一步的噪声成分。由于前向过程是高斯结构,我们不仅可以快速采样任意时间步的图像,还能解析地推导出真实的后验分布,使模型能够以“预测噪声”的形式高效学习。最终,这种从纯随机中逐步“清晰化”的方式,不仅稳定、可控,而且生成质量极高,成为当前最强大的生成建模方法之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tilblackout

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值