深度生成模型中的扩散模型(Diffusion Model)原理与去噪过程
题目描述
扩散模型(Diffusion Model)是一种生成模型,通过模拟数据从噪声中逐步恢复的过程生成新样本。其核心思想是:先对输入数据逐步添加噪声(前向过程),再训练一个神经网络逐步去噪(反向过程),最终从纯噪声中重构出数据。本题要求详细解释扩散模型的原理,尤其是前向与反向过程的数学推导及去噪步骤的实现细节。
1. 前向过程(加噪)
前向过程是一个固定的马尔可夫链,逐步向数据添加高斯噪声:
- 设原始数据为 \(x_0\),经过 \(T\) 步加噪后得到纯噪声 \(x_T\)。
- 每一步的加噪公式为:
\[ x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_t, \quad \epsilon_t \sim \mathcal{N}(0, I) \]
其中 \(\alpha_t\) 是预先设定的噪声调度参数(满足 \(\alpha_t \in (0, 1)\) 且逐渐减小),控制每一步的噪声强度。
- 通过递归推导,可以直接从 \(x_0\) 计算 \(x_t\):
\[ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon, \quad \bar{\alpha}_t = \prod_{i=1}^t \alpha_i \]
这一性质允许在训练时随机采样任意时间步 \(t\) 的噪声数据,无需逐步计算。
关键点:前向过程无需学习,其目的是为反向过程提供训练目标——即如何从 \(x_t\) 预测 \(x_{t-1}\)。
2. 反向过程(去噪)
反向过程是扩散模型的核心,通过学习高斯分布的均值和方差逐步去噪:
- 目标是从 \(x_T \sim \mathcal{N}(0, I)\) 开始,逐步生成 \(x_{t-1}\) 直到 \(x_0\)。
- 每一步的反向条件概率定义为:
\[ p_\theta(x_{t-1} \mid x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t, t), \Sigma_\theta(x_t, t)) \]
其中 \(\mu_\theta\) 和 \(\Sigma_\theta\) 由神经网络参数化。
- 为了训练 \(\mu_\theta\),需利用前向过程的性质:已知 \(x_t\) 和 \(x_0\) 时,\(x_{t-1}\) 的后验分布可解析表示为:
\[ q(x_{t-1} \mid x_t, x_0) = \mathcal{N}(x_{t-1}; \tilde{\mu}(x_t, x_0), \tilde{\beta}_t I) \]
其中:
\[ \tilde{\mu}(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}}(1 - \alpha_t)}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t \]
- 通过将 \(x_0 = \frac{x_t - \sqrt{1 - \bar{\alpha}_t} \epsilon}{\sqrt{\bar{\alpha}_t}}\) 代入上式,可得:
\[ \tilde{\mu}(x_t, \epsilon) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon \right) \]
此时,神经网络只需预测添加的噪声 \(\epsilon\),即:
\[ \mu_\theta(x_t, t) = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) \]
3. 训练与损失函数
扩散模型的训练目标是最小化噪声预测误差:
- 损失函数为均方误差(MSE):
\[ L(\theta) = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon - \epsilon_\theta(x_t, t) \|^2 \right] \]
其中 \(t\) 均匀采样自 \(\{1, \dots, T\}\),\(x_t\) 由前向过程生成。
- 训练时,随机采样 \(x_0\)(来自数据集)、时间步 \(t\) 和噪声 \(\epsilon\),计算 \(x_t\) 后输入网络预测 \(\epsilon_\theta\),并更新参数。
4. 生成过程(采样)
从噪声 \(x_T \sim \mathcal{N}(0, I)\) 开始,逐步执行以下步骤:
- 输入当前 \(x_t\) 和 \(t\) 到网络,得到预测的噪声 \(\epsilon_\theta(x_t, t)\)。
- 计算 \(\mu_\theta(x_t, t)\) 并采样 \(x_{t-1}\):
\[ x_{t-1} = \mu_\theta(x_t, t) + \sigma_t z, \quad z \sim \mathcal{N}(0, I) \]
其中 \(\sigma_t\) 通常取 \(\sqrt{1 - \alpha_t}\) 或根据调度策略调整。
3. 重复直到 \(t=1\),最终得到生成样本 \(x_0\)。
5. 关键改进与变体
- DDPM:原始扩散模型使用固定方差,简化训练。
- Improved DDPM:引入可学习的方差和噪声调度优化。
- 条件生成:通过输入类别标签或文本描述(如CLIP引导)控制生成内容。
总结:扩散模型通过前向过程破坏数据、反向过程学习去噪,实现了高质量的生成能力,其核心在于对噪声的预测而非直接生成数据。