前向扩散过程是一种通过在T个时间步中迭代添加高斯噪声来系统地破坏数据x0的方法。
x0→x1→x2→⋯→xT
在此过程结束时,xT基本上与纯高斯噪声无法区分。我们现在的目标是生成模型:我们想生成新的数据样本,使其看起来像是来自原始数据分布q(x0)。为了实现此目的,我们需要找出如何逆转加噪过程。
设想从一个简单分布(如标准高斯分布N(0,I))中抽样得到的xT开始。如果我们可以某种方式逆转前向过程的每一步,从t=T向后移动到t=1,我们可能将这个初始噪声样本xT转换成一个真实的数据样本x0:
xT→xT−1→xT−2→⋯→x0
这种逆转定义了扩散模型的生成路径。
图示了前向(加噪)和逆向(生成)过程,它们是向相反方向移动的马尔可夫链。
前向过程由转移概率q(xt∣xt−1)定义,它指定了如何通过添加受控量的噪声从xt−1得到xt。逆向过程的核心目标是学习相反的转移:概率分布p(xt−1∣xt)。这个分布告诉我们,给定时间步t的一个带噪声样本xt,在前一个时间步t−1上,可能的“更少噪声”样本xt−1的分布是怎样的。
如果我们能成功建模所有相关时间步t(从T到1)的逆向转移概率p(xt−1∣xt),我们就可以实现生成过程:
- 从纯噪声开始:抽样xT∼N(0,I)。
- 迭代去噪:对于t=T,T−1,…,1:
- 抽样xt−1∼p(xt−1∣xt)。
- 最终样本x0就是生成结果。
因此,构建扩散模型的主要难题在于有效地估计或参数化这些逆向条件概率p(xt−1∣xt)。前向过程q(xt∣xt−1)设计得在数学上很方便(即添加高斯噪声)。正如我们将在接下来的章节中看到,真实的逆向转移q(xt−1∣xt,x0)(注意对x0的条件依赖)是已知的,但计算所需的q(xt−1∣xt)需要知道完整的数据分布,而这正是我们试图学习的目标。这种难处理性促使我们使用强大的函数逼近器,特别是神经网络,来学习一个逼近真实逆向转移的模型pθ(xt−1∣xt)。
我们的目标已明确:学习一个模型,它能够根据当前状态xt预测前一个状态xt−1,使我们能够沿着链从噪声向数据逆向推演。接下来的章节将详细说明我们如何构建和训练一个神经网络来执行此任务。