扩散模型(Diffusion Models)的去噪过程与图像生成原理
字数 3018 2025-11-11 05:45:38

扩散模型(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. 步骤1:从标准高斯分布中采样一个随机噪声:\(x_T \sim \mathcal{N}(0, I)\)
  2. 步骤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. 步骤3:当循环进行到 \(t=0\) 时,得到的 \(x_0\) 就是最终生成的新图像。

通过这个逐步去噪的过程,扩散模型能够从完全无结构的噪声中,合成出高度复杂和逼真的数据样本。

扩散模型(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 \) 就是最终生成的新图像。 通过这个逐步去噪的过程,扩散模型能够从完全无结构的噪声中,合成出高度复杂和逼真的数据样本。