扩散模型(Diffusion Models)的去噪过程与图像生成原理
题目描述
扩散模型是一类深度生成模型,其核心思想是通过一个渐进式的加噪过程将原始数据分布(如图像)转化为一个简单的已知分布(如高斯噪声),然后学习一个反向的去噪过程,从纯噪声中逐步重建出新的数据样本。本题将详细讲解扩散模型的前向加噪(扩散)过程和反向去噪(生成)过程的数学原理,以及如何通过训练一个神经网络来学习这个复杂的去噪变换。
解题过程
1. 前向加噪过程:从数据到噪声
前向过程是一个固定的马尔可夫链,它会在T个时间步内,逐步向输入数据 \(x_0\)(一张真实图像)添加高斯噪声。
- 数学定义:对于每一个时间步 \(t\)(从1到T),前向过程由以下条件分布定义:
\[ q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t} x_{t-1}, \beta_t I) \]
其中:
* $ \mathcal{N} $ 表示高斯分布。
* $ \sqrt{1-\beta_t} x_{t-1} $ 是分布的均值。它是对上一步数据 $ x_{t-1} $ 的缩放,目的是在添加噪声的同时保留部分原始信号。
* $ \beta_t $ 是方差调度参数,它是一个在(0,1)区间内预先设定好的、随时间步t递增的序列(例如,从0.0001线性增长到0.02)。$ \beta_t $ 控制了每一步添加的噪声量。
* $ \beta_t I $ 是协方差矩阵,表示噪声是各向同性的(各个维度独立且方差相同)。
- 关键性质:任意时间步的闭式解
由于每一步都添加高斯噪声,我们可以通过重参数化技巧,直接从原始图像 \(x_0\) 计算出任意时间步 \(t\) 的噪声图像 \(x_t\),而无需一步步迭代。这极大地简化了后续的训练过程。
\[ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon \]
其中:
* $ \alpha_t = 1 - \beta_t $。
* $ \bar{\alpha}_t = \prod_{i=1}^{t} \alpha_i $,即所有 $ \alpha_i $ 的连乘积。
* $ \epsilon \sim \mathcal{N}(0, I) $ 是标准高斯噪声。
这个公式告诉我们,$ t $ 时刻的噪声图像 $ x_t $,是原始图像 $ x_0 $ 和一个纯噪声 $ \epsilon $ 的线性组合。组合的权重由 $ \bar{\alpha}_t $ 决定。当 $ t $ 趋近于T时,$ \bar{\alpha}_t $ 趋近于0,$ x_t $ 就几乎完全变成了纯噪声 $ \epsilon $,其分布近似于 $ \mathcal{N}(0, I) $。至此,前向过程完成。
2. 反向去噪过程:从噪声到数据
生成新图像的目标,是逆转上述的前向过程。即,我们想从一个纯噪声 \(x_T \sim \mathcal{N}(0, I)\) 开始,逐步“去噪”,最终得到一张清晰的图像 \(x_0\)。这个反向过程同样被建模为一个马尔可夫链,但每一步的转换需要通过学习得到。
- 数学定义:反向过程由以下条件分布定义:
\[ p_\theta(x_{t-1} | x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) \]
其中 $ \mu_\theta $ 和 $ \Sigma_\theta $ 是神经网络的输出,该神经网络的参数为 $ \theta $。我们的目标就是训练这个网络,让它能够预测出从 $ x_t $ 到 $ x_{t-1} $ 这一步去噪操作的均值和方差。
- 训练目标:预测噪声
直接预测 \(x_{t-1}\) 或 \(\mu_\theta\) 比较困难。一个巧妙且有效的简化方法是:训练神经网络去预测在前向过程中添加到 \(x_0\) 上的那个噪声 \(\epsilon\)。
回顾前向过程的闭式解:\(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon\)。如果我们能预测出噪声 \(\epsilon\),就可以通过重新排列这个公式来估计出 \(x_0\):
\[ x_0 \approx \frac{x_t - \sqrt{1-\bar{\alpha}_t} \epsilon_\theta(x_t, t)}{\sqrt{\bar{\alpha}_t}} \]
一旦有了对 $ x_0 $ 的估计,再结合 $ x_t $ 和一些高斯噪声,就可以构造出 $ p_\theta(x_{t-1} | x_t) $ 的均值 $ \mu_\theta(x_t, t) $。最终的训练损失函数是一个均方误差,形式非常简单:
\[ L(\theta) = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] \]
这里,$ t $ 从 {1, ..., T} 中均匀采样,$ x_0 $ 来自训练数据集,$ \epsilon $ 是采样自标准高斯分布的噪声。网络 $ \epsilon_\theta $ 的输入是噪声图像 $ x_t $ 和时间步 $ t $(通常通过位置编码嵌入),输出是预测的噪声。
3. 图像生成(采样)过程
当神经网络 \(\epsilon_\theta\) 训练好后,我们就可以用它来生成新的图像。
- 步骤1:从标准高斯分布中采样一个随机噪声:\(x_T \sim \mathcal{N}(0, I)\)。
- 步骤2:从 \(t = T\) 开始,逐步迭代到 \(t = 1\)。
- 将当前噪声图像 \(x_t\) 和时间步 \(t\) 输入到训练好的网络 \(\epsilon_\theta\) 中,得到预测的噪声 \(\epsilon_\theta(x_t, t)\)。
- 利用预测的噪声,计算出去噪后图像的均值 \(\mu_\theta(x_t, t)\)。
- 从分布 \(\mathcal{N}(\mu_\theta(x_t, t), \sigma_t^2 I)\) 中采样得到 \(x_{t-1}\)。这里 \(\sigma_t^2\) 通常根据 \(\beta_t\) 来设定。
- 步骤3:当循环进行到 \(t=0\) 时,得到的 \(x_0\) 就是最终生成的新图像。
通过这个逐步去噪的过程,扩散模型能够从完全无结构的噪声中,合成出高度复杂和逼真的数据样本。