扩散模型概述

好的,这是一个关于扩散模型正向过程与逆向过程的详细解释,并清晰地说明了它们在训练和使用(推理)阶段的不同角色。

核心思想

扩散模型的灵感来自于热力学中的扩散现象。其核心思想非常简单:
  1. 正向过程:逐步对一张图像添加噪声,直到它完全变成一个纯噪声图像。这个过程是固定的,不涉及任何学习。
  2. 逆向过程:训练一个神经网络,学习如何将上述过程逆转,即从纯噪声中逐步还原出一张清晰的图像。

1. 正向过程

正向过程也称为前向过程扩散过程。它是一个固定的(非学习的)、连续的加噪声过程。

过程描述:

  • 我们从一张真实的训练图像 x 0 x 0 x_(0)x_0x0 开始。
  • 我们一步步地对其添加高斯噪声。在每一步 t t ttt(从 1 到 T),我们都会根据一个预定义的方差表 β t β t beta _(t)\beta_tβt 来添加噪声。
  • 经过 T 步之后,原始图像 x 0 x 0 x_(0)x_0x0 就变成了一个几乎完全无法辨认的、符合标准高斯分布的噪声 x T x T x_(T)x_TxT
数学上,这一步可以直接从 x 0 x 0 x_(0)x_0x0 计算出 x t x t x_(t)x_txt
x t = α ¯ t x 0 + 1 α ¯ t ϵ x t = α ¯ t x 0 + 1 α ¯ t ϵ x_(t)=sqrt( bar(alpha)_(t))x_(0)+sqrt(1- bar(alpha)_(t))epsilonx_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilonxt=α¯tx0+1α¯tϵ
其中:
  • ϵ ϵ epsilon\epsilonϵ 是标准高斯噪声 N ( 0 , I ) N ( 0 , I ) N(0,I)\mathcal{N}(0, I)N(0,I)
  • α t = 1 β t α t = 1 β t alpha _(t)=1-beta _(t)\alpha_t = 1 - \beta_tαt=1βt α ¯ t = i = 1 t α i α ¯ t = i = 1 t α i bar(alpha)_(t)=prod_(i=1)^(t)alpha _(i)\bar{\alpha}_t = \prod_{i=1}^{t} \alpha_iα¯t=i=1tαi
  • 这个公式是关键,它允许我们在任意时间步 t t ttt 直接采样加噪后的图像,而无需一步步迭代。

在训练和应用中的角色:

阶段 正向过程的作用
训练阶段 核心角色。为每个训练样本随机选择一个时间步 t t ttt,然后使用上述公式快速生成 x t x t x_(t)x_txt。这个 x t x t x_(t)x_txt 和对应的噪声 ϵ ϵ epsilon\epsilonϵ 将作为训练数据对,用于训练模型。
推理/使用阶段 不参与。推理阶段只关心从噪声生成图像,因此完全不需要正向过程。
简单比喻:正向过程就像把一杯清水一滴墨汁一滴墨汁地搅浑,直到变成一杯纯黑的墨水。这个过程是确定且容易的。

2. 逆向过程

逆向过程是扩散模型的灵魂,是模型需要学习的部分。它的目标是“逆转时间”,将噪声恢复为图像。

过程描述:

  • 我们从纯噪声 x T N ( 0 , I ) x T N ( 0 , I ) x_(T)∼N(0,I)x_T \sim \mathcal{N}(0, I)xTN(0,I) 开始。
  • 我们一步步地(从 T 到 1)去除噪声,每一步都让图像变得更清晰一点。
  • 最终,在经过 T 步去噪后,我们得到一张清晰的图像 x 0 x 0 x_(0)x_0x0
关键问题:如何从 x t x t x_(t)x_txt 去噪得到 x t 1 x t 1 x_(t-1)x_{t-1}xt1?直接计算这个条件概率 p ( x t 1 x t ) p ( x t 1 x t ) p(x_(t-1)||x_(t))p(x_{t-1} \| x_t)p(xt1xt) 是非常困难的,因为它依赖于整个数据分布。

解决方案:训练一个神经网络来预测噪声

我们训练一个神经网络(通常是U-Net),它的任务非常简单:预测添加到图像中的噪声
  • 输入:当前时刻的噪声图像 x t x t x_(t)x_txt 和当前时间步 t t ttt
  • 输出:预测的正向过程中所添加的噪声 ϵ θ ( x t , t ) ϵ θ ( x t , t ) epsilon _(theta)(x_(t),t)\epsilon_\theta(x_t, t)ϵθ(xt,t)
  • 损失函数:预测的噪声和真实添加的噪声之间的均方误差。 L = E t , x 0 , ϵ [ ϵ ϵ θ ( x t , t ) 2 ] L = E t , x 0 , ϵ ϵ ϵ θ ( x t , t ) 2 L=E_(t,x_(0),epsilon)[||epsilon-epsilon _(theta)(x_(t),t)||^(2)]L = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right]L=Et,x0,ϵ[ϵϵθ(xt,t)2]
一旦我们有了这个训练好的噪声预测器 ϵ θ ϵ θ epsilon _(theta)\epsilon_\thetaϵθ,我们就可以通过一个更新公式来从 x t x t x_(t)x_txt 计算出 x t 1 x t 1 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 = 1 α t x t 1 α t 1 α ¯ t ϵ θ ( x t , t ) + σ t z x_(t-1)=(1)/(sqrt(alpha _(t)))(x_(t)-(1-alpha _(t))/(sqrt(1- bar(alpha)_(t)))epsilon _(theta)(x_(t),t))+sigma _(t)zx_{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 zxt1=1αt(xt1αt1α¯tϵθ(xt,t))+σtz
其中 z z zzz 是额外的随机噪声,在采样时可以控制(例如,在DDIM采样器中可以设为0以实现确定性生成)。

在训练和应用中的角色:

阶段 逆向过程的作用
训练阶段 学习/优化。模型通过尝试预测正向过程中添加的噪声来学习逆向过程的分布。它并不执行完整的从 x T x T x_(T)x_TxT x 0 x 0 x_(0)x_0x0 的生成,而是学习单个时间步的“去噪步骤”。
推理/使用阶段 核心角色。这是模型被使用的全部目的。我们从一个随机噪声 x T x T x_(T)x_TxT 开始,迭代地调用训练好的噪声预测器 ϵ θ ϵ θ epsilon _(theta)\epsilon_\thetaϵθ,并应用上述更新公式,一步步执行逆向过程,最终生成一张全新的图像 x 0 x 0 x_(0)x_0x0
简单比喻:逆向过程就像是一个魔术师,他能看着一杯被搅浑的墨水,准确地判断出每一滴墨汁的位置并将其移除,最终还原成一杯清水。这个“魔术”是通过大量练习(训练)学会的。

总结与对比

为了更清晰地理解,我们可以用一个表格来总结:
方面 正向过程 逆向过程
目的 破坏数据,添加噪声 重建数据,去除噪声
是否可学习 ,是一个固定的数学过程 ,核心是训练一个神经网络
在训练中 提供训练目标:生成带噪图像-噪声对 被训练的对象:模型学习预测噪声,即学习如何执行单步去噪
在推理/使用中 不参与 全程参与:执行完整的从噪声到图像的生成流程
类比 把一座沙堡踩成一片沙地 看着沙地,重新堆砌出一座沙堡
通过这种“破坏-学习修复”的范式,扩散模型能够学习到复杂的数据分布,从而生成高质量、多样性的样本。正向过程为训练提供了监督信号,而逆向过程则是模型能力的体现和应用。


用AI生成所需内容的提示技巧:

AI技术、CDVAE 模型、扩散模型:


>> AI热点技术目录