扩散模型概述
好的,这是一个关于扩散模型正向过程与逆向过程的详细解释,并清晰地说明了它们在训练和使用(推理)阶段的不同角色。
核心思想
扩散模型的灵感来自于热力学中的扩散现象。其核心思想非常简单:
- 正向过程:逐步对一张图像添加噪声,直到它完全变成一个纯噪声图像。这个过程是固定的,不涉及任何学习。
- 逆向过程:训练一个神经网络,学习如何将上述过程逆转,即从纯噪声中逐步还原出一张清晰的图像。
1. 正向过程
正向过程也称为前向过程或扩散过程。它是一个固定的(非学习的)、连续的加噪声过程。
过程描述:
- 我们从一张真实的训练图像 x_(0)x_0 开始。
- 我们一步步地对其添加高斯噪声。在每一步 tt(从 1 到 T),我们都会根据一个预定义的方差表 beta _(t)\beta_t 来添加噪声。
- 经过 T 步之后,原始图像 x_(0)x_0 就变成了一个几乎完全无法辨认的、符合标准高斯分布的噪声 x_(T)x_T。
数学上,这一步可以直接从
x_(0)x_0 计算出
x_(t)x_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} \epsilon
其中:
- epsilon\epsilon 是标准高斯噪声 N(0,I)\mathcal{N}(0, I)。
- alpha _(t)=1-beta _(t)\alpha_t = 1 - \beta_t,bar(alpha)_(t)=prod_(i=1)^(t)alpha _(i)\bar{\alpha}_t = \prod_{i=1}^{t} \alpha_i。
- 这个公式是关键,它允许我们在任意时间步 tt 直接采样加噪后的图像,而无需一步步迭代。
在训练和应用中的角色:
| 阶段 |
正向过程的作用 |
| 训练阶段 |
核心角色。为每个训练样本随机选择一个时间步 tt,然后使用上述公式快速生成 x_(t)x_t。这个 x_(t)x_t 和对应的噪声 epsilon\epsilon 将作为训练数据对,用于训练模型。 |
| 推理/使用阶段 |
不参与。推理阶段只关心从噪声生成图像,因此完全不需要正向过程。 |
简单比喻:正向过程就像把一杯清水一滴墨汁一滴墨汁地搅浑,直到变成一杯纯黑的墨水。这个过程是确定且容易的。
2. 逆向过程
逆向过程是扩散模型的灵魂,是模型需要学习的部分。它的目标是“逆转时间”,将噪声恢复为图像。
过程描述:
- 我们从纯噪声 x_(T)∼N(0,I)x_T \sim \mathcal{N}(0, I) 开始。
- 我们一步步地(从 T 到 1)去除噪声,每一步都让图像变得更清晰一点。
- 最终,在经过 T 步去噪后,我们得到一张清晰的图像 x_(0)x_0。
关键问题:如何从
x_(t)x_t 去噪得到
x_(t-1)x_{t-1}?直接计算这个条件概率
p(x_(t-1)||x_(t))p(x_{t-1} \| x_t) 是非常困难的,因为它依赖于整个数据分布。
解决方案:训练一个神经网络来预测噪声
我们训练一个神经网络(通常是U-Net),它的任务非常简单:预测添加到图像中的噪声。
- 输入:当前时刻的噪声图像 x_(t)x_t 和当前时间步 tt。
- 输出:预测的正向过程中所添加的噪声 epsilon _(theta)(x_(t),t)\epsilon_\theta(x_t, t)。
- 损失函数:预测的噪声和真实添加的噪声之间的均方误差。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]
一旦我们有了这个训练好的噪声预测器
epsilon _(theta)\epsilon_\theta,我们就可以通过一个更新公式来从
x_(t)x_t 计算出
x_(t-1)x_{t-1}:
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 z
其中
zz 是额外的随机噪声,在采样时可以控制(例如,在DDIM采样器中可以设为0以实现确定性生成)。
在训练和应用中的角色:
| 阶段 |
逆向过程的作用 |
| 训练阶段 |
学习/优化。模型通过尝试预测正向过程中添加的噪声来学习逆向过程的分布。它并不执行完整的从 x_(T)x_T 到 x_(0)x_0 的生成,而是学习单个时间步的“去噪步骤”。 |
| 推理/使用阶段 |
核心角色。这是模型被使用的全部目的。我们从一个随机噪声 x_(T)x_T 开始,迭代地调用训练好的噪声预测器 epsilon _(theta)\epsilon_\theta,并应用上述更新公式,一步步执行逆向过程,最终生成一张全新的图像 x_(0)x_0。 |
简单比喻:逆向过程就像是一个魔术师,他能看着一杯被搅浑的墨水,准确地判断出每一滴墨汁的位置并将其移除,最终还原成一杯清水。这个“魔术”是通过大量练习(训练)学会的。
总结与对比
为了更清晰地理解,我们可以用一个表格来总结:
| 方面 |
正向过程 |
逆向过程 |
| 目的 |
破坏数据,添加噪声 |
重建数据,去除噪声 |
| 是否可学习 |
否,是一个固定的数学过程 |
是,核心是训练一个神经网络 |
| 在训练中 |
提供训练目标:生成带噪图像-噪声对 |
被训练的对象:模型学习预测噪声,即学习如何执行单步去噪 |
| 在推理/使用中 |
不参与 |
全程参与:执行完整的从噪声到图像的生成流程 |
| 类比 |
把一座沙堡踩成一片沙地 |
看着沙地,重新堆砌出一座沙堡 |
通过这种“破坏-学习修复”的范式,扩散模型能够学习到复杂的数据分布,从而生成高质量、多样性的样本。正向过程为训练提供了监督信号,而逆向过程则是模型能力的体现和应用。