逆向扩散过程旨在逆转加噪效果,从一个含噪样本xt开始,并尝试估计含噪程度稍低的样本xt−1。真实的逆向概率q(xt−1∣xt)难以计算,但可以使用神经网络pθ(xt−1∣xt)来近似。一个常用的方法是利用网络ϵθ(xt,t),它经过训练用于预测添加到原始数据x0以得到xt的噪声ϵ。该预测噪声随后被用于定义去噪单步的数学运算。
目标是定义分布pθ(xt−1∣xt)。结果表明,如果我们知道原始数据点x0,真实的后验分布q(xt−1∣xt,x0)可以解析计算,并且是一个高斯分布。虽然我们在此不进行完整的推导(它涉及将贝叶斯定理应用于前向过程的高斯分布,如Ho等人2020年原始DDPM论文附录B中所述),但其结果很重要。后验分布q(xt−1∣xt,x0)由以下式子给出:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI)
均值μ~t(xt,x0)和方差β~t如下:
μ~t(xt,x0)=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt
β~t=1−αˉt1−αˉt−1βt
请记住,αt=1−βt和αˉt=∏i=1tαi源自噪声调度βt。
现在,在逆向(生成)过程中,我们无法获取原始的x0。这时,我们训练好的神经网络ϵθ(xt,t)就派上用场了。我们用它来近似x0。回想一下允许直接从x0采样xt的前向过程方程:
xt=αˉtx0+1−αˉtϵ
其中ϵ∼N(0,I)。我们可以重新排列此式,用xt和ϵ表示x0:
x0=αˉt1(xt−1−αˉtϵ)
由于我们的网络ϵθ(xt,t)经过训练用于预测ϵ,我们可以使用网络的输出得到x0的一个估计,我们称之为x^0:
x^0=αˉt1(xt−1−αˉtϵθ(xt,t))
这基于当前含噪图像xt和预测的噪声ϵθ(xt,t),为我们提供了原始图像的近似值。
现在,我们将这个估计值x^0代回到后验均值μ~t(xt,x0)的方程中。这为我们提供了参数化逆向步骤的均值μθ(xt,t):
μθ(xt,t)=1−αˉtαˉt−1βt(αˉt1(xt−1−αˉtϵθ(xt,t)))+1−αˉtαt(1−αˉt−1)xt
这看起来很复杂,但在经过一些代数简化后(使用关系式αt=1−βt和αˉt=αtαˉt−1),它简化为一个更简洁的形式:
μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))
这个方程是去噪步骤的核心。它告诉我们,给定当前状态xt以及U-Net模型在该时间步预测的噪声ϵθ(xt,t),如何计算上一时间步xt−1的分布均值。
对于逆向步骤pθ(xt−1∣xt)的方差,我们需要选择一个值σt2。DDPM论文建议使用源自后验分布q(xt−1∣xt,x0)的方差,即σt2=β~t=1−αˉt1−αˉt−1βt。后面讨论的另一个选项是简单地将σt2=βt。这个方差项为生成过程引入了随机性;从这个分布中采样涉及添加按σt缩放的高斯噪声。
因此,逆向扩散过程中的单一步骤定义为从高斯分布中采样xt−1:
pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2I)
如下:
- xt是当前时间步的含噪数据。
- ϵθ(xt,t)是神经网络预测的噪声。
- μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))是xt−1的预测均值。
- σt2是方差,通常选择为β~t或βt。
- αt、βt、αˉt是噪声调度决定的常数。
通过反复应用此公式,从纯噪声xT∼N(0,I)开始,并从t=T逆向步进到t=1,我们可以生成一个样本x0,它应该类似于模型训练时的数据。这个迭代过程,在每一步都由神经网络的噪声预测引导,就是扩散模型生成新数据的方式。我们将在第5章介绍完整的采样算法。