DDPM(Denoising Diffusion Probabilistic Models)是一类基于扩散过程的生成模型。它的核心思想是通过模拟数据从噪声中恢复的过程,来生成新的数据样本。DDPM的构建过程与传统的生成对抗网络(GAN)和变分自编码器(VAE)不同,主要通过一系列的“去噪”操作来训练模型。
①正向过程:
正向过程是一个逐步给数据添加噪声的过程,目标是将原始数据 逐渐转化为一个完全的噪声样本
。
设 T 为总步数(也可以理解为噪声的添加次数),从原始数据 开始,经过每一时间步 t,每一步都加上一些噪声,最终得到纯噪声
。正向过程是一个马尔可夫链,意味着当前时刻的状态
仅依赖于前一时刻的状态
。这种过程可以通过条件概率
来描述。这个过程的数学表达是一个马尔可夫链的形式:
其中:
是第 t 步的图像,
是一个预先定义的序列,通常随着 t 的增加而增加(即噪声逐渐增大,
的选择对模型性能至关重要。常见的设置是线性增加或余弦调度的
。)
表示高斯分布。
是带有缩放因子的当前样本,它控制了噪声加入的程度。
是在每个时间步 t 添加的噪声大小。这里的
是一个随着时间逐渐增大的系数,通常是一个非常小的值,控制每一步加入的噪声量。
为什么需要缩放因子?
在DDPM的前向过程中,每一步都会向数据
添加高斯噪声,生成
。如果不加缩放因子,直接添加噪声会导致数据的尺度(即数据的方差)逐渐增大,最终可能发散到无穷大(即图像
的原始内容可能会过度被噪声覆盖)。为了避免这种情况,我们需要对当前样本
进行缩放,确保数据的尺度在每一步都保持稳定。
缩放因子
的选择是为了确保前向过程的确保 xt 的方差在每一步都保持为 1,最终分布 q(xT) 是一个标准高斯分布(即均值为 0,方差为 1)
我们逐步增加噪声,直到 变成一个完全的高斯噪声样本。这个过程可以写作:
为了简化计算,可以直接从初始数据 计算任意一步
的分布,而不需要逐步迭代。具体公式如下(虽然我数学不好推不出来,但是说是这个就是这个叭!)
其中,
② 反向过程:
反向过程的目标是学习如何从噪声图像 恢复到原始图像
。假设我们有一个去噪网络
,它通过条件生成去噪过程,将每一步的噪声图像恢复到原始图像。
我们可以通过贝叶斯定理来推导反向过程的条件概率。贝叶斯定理告诉我们:
但在实际推导中,我们关心的更多是 近似 的过程,因此我们引入一个噪声模型来简化推导。通过变分推断和正向过程的定义,我们可以得到反向过程的高斯分布形式。每一步都根据以下公式从 生成
:
其中,
-
是神经网络预测的均值。
-
是神经网络预测的方差。
-
θ是神经网络的参数。
反向过程的目标是根据当前的样本 预测出上一时刻的样本
。为了得到
,我们需要用到正向过程的相关信息,并进行推导。在扩散模型中,我们通过训练网络来学习在每个时间步 t 给定
的条件下,预测出噪声
。即我们训练的目标是使得模型能够预测出给定
的噪声。
根据正向过程中的加噪方式,真实的噪声部分 ϵ 是:
从这个式子我们可以看到,噪声 ϵ 是当前样本 和前一个样本
之间的差异的一部分。因此,模型通过预测这个噪声
,就能够从
恢复出
。
通过推导,我们得到以下公式:
其中, 是根据预测的噪声
从当前样本
中去除噪声,恢复上一时刻的图像
。而
是引入的噪声项,它控制了反向过程中生成的随机性。
是从标准正态分布中采样的噪声,
是噪声的标准差,通常随着时间步的增加而增加。
为什么要添加噪声项
?
由于扩散过程本质上是一个随机过程,反向去噪过程需要在每个步骤中引入适量的随机噪声,确保最终的生成结果具有多样性,而不是陷入局部最优解。(原来是这样吗?)
③反向过程的训练目标:
最大化数据的对数似然 :
为什么最大化对数似然?
最大化对数似然可以确保生成的数据 x0 尽可能接近真实数据分布 q(x0),如果 pθ(x0)接近 q(x0),说明模型能够生成高质量的样本。
ELBO
- But 直接最大化
是非常困难的,因为它涉及高维积分和复杂的概率计算。因此,DDPM 使用 变分下界(Evidence Lower Bound, ELBO) 来间接优化
。
- 引入隐变量
,表示前向过程的中间状态。根据概率的链式法则,可以写成
- 引入变分分布
,表示前向过程的分布。根据 Jensen 不等式,可以推导出下界:
- 将联合分布
分解为:
- 将分解后的联合分布代入下界,并简化得到
具体的ELBO推导过程也可以参考VAE,是类似的。===》》VAE学习笔记
也就是原论文中的公式(3)
上式经过整理和变换可以变为:
对于公式5,里面一共有三项:
- 对于
的含义:
与
尽可能接近
- 对于
的含义:
和
尽可能的接近;实际上这项 loss 最后没用
- 因此,核心的优化目标就是
最后就变成了令 和
的KL散度尽量小
代入KL散度的式子进行一番推理:
(过程略,因为我看不懂)
最终可以求得,
论文的作者固定了方差,优化二者的均值。
这样损失值的式子就变成了,只要优化这一项就可以了。通过此最终去预测噪声。
MSE
在实际训练中,直接优化 ELBO 仍然比较复杂,因此 通常简化为预测噪声的均方误差(MSE),通过优化损失函数,学习去噪网络的参数 θ(通过梯度下降法更新神经网络的参数 θ)。
其中:
-
ϵ 是前向过程中添加的噪声。
-
是神经网络预测的噪声。