前向扩散过程是一个逐步马尔可夫链,在每个时间步t t t 都会加入少量高斯噪声,由方差计划β t \beta_t β t 控制。其转移定义为q ( x t ∣ x t − 1 ) q(x_t | x_{t-1}) q ( x t ∣ x t − 1 ) 。模拟这个过程从初始数据点x 0 x_0 x 0 逐步获得含噪声样本x t x_t x t 可能会在计算上非常昂贵,特别是当T T T 很大时。幸运的是,存在一种更直接的方法。
这种特定加噪过程的一个重要特性是,我们可以推导出一个封闭形式的方程,从而在任何时间步t t t 直接从x 0 x_0 x 0 采样得到x t x_t x t ,而无需计算所有中间状态x 1 , x 2 , . . . , x t − 1 x_1, x_2, ..., x_{t-1} x 1 , x 2 , ... , x t − 1 。这在扩散模型训练阶段特别有用。
我们来推导这个关系。回顾一下单步转移:
x t = 1 − β t x t − 1 + β t ϵ t − 1 当 ϵ t − 1 ∼ N ( 0 , I ) x_t = \sqrt{1 - \beta_t} x_{t-1} + \sqrt{\beta_t} \epsilon_{t-1} \quad \text{当} \quad \epsilon_{t-1} \sim \mathcal{N}(0, I) x t = 1 − β t x t − 1 + β t ϵ t − 1 当 ϵ t − 1 ∼ N ( 0 , I )
为方便起见,我们定义α t = 1 − β t \alpha_t = 1 - \beta_t α t = 1 − β t 。该方程变为:
x t = α t x t − 1 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t-1} x t = α t x t − 1 + 1 − α t ϵ t − 1
现在,我们可以递归地展开此式。我们来看x t − 1 x_{t-1} x t − 1 用x t − 2 x_{t-2} x t − 2 表示的形式:
x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 x_{t-1} = \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2
将此代入x t x_t x t 的方程:
x t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \begin{align*}
x_t &= \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2}) + \sqrt{1 - \alpha_t} \epsilon_{t-1} \\
&= \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t(1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1}
\end{align*} x t = α t ( α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 ) + 1 − α t ϵ t − 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1
可以观察到一个规律。乘以x t − 2 x_{t-2} x t − 2 的项是α \alpha α 值平方根的乘积。噪声项也在累积。我们可以借助高斯分布的一个性质:将两个独立的高斯变量相加,结果会得到另一个高斯变量。具体来说,如果Z 1 ∼ N ( 0 , σ 1 2 I ) Z_1 \sim \mathcal{N}(0, \sigma_1^2 I) Z 1 ∼ N ( 0 , σ 1 2 I ) 和Z 2 ∼ N ( 0 , σ 2 2 I ) Z_2 \sim \mathcal{N}(0, \sigma_2^2 I) Z 2 ∼ N ( 0 , σ 2 2 I ) 是独立的,那么Z 1 + Z 2 ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) Z_1 + Z_2 \sim \mathcal{N}(0, (\sigma_1^2 + \sigma_2^2) I) Z 1 + Z 2 ∼ N ( 0 , ( σ 1 2 + σ 2 2 ) I ) 。
在我们的展开式中,ϵ t − 1 \epsilon_{t-1} ϵ t − 1 和ϵ t − 2 \epsilon_{t-2} ϵ t − 2 是独立的标准高斯噪声(N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) )。组合噪声项α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 \sqrt{\alpha_t(1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 也是高斯的。它的方差是( α t ( 1 − α t − 1 ) ) V a r ( ϵ t − 2 ) + ( 1 − α t ) V a r ( ϵ t − 1 ) = α t ( 1 − α t − 1 ) + ( 1 − α t ) = α t − α t α t − 1 + 1 − α t = 1 − α t α t − 1 (\alpha_t(1 - \alpha_{t-1})) Var(\epsilon_{t-2}) + (1 - \alpha_t) Var(\epsilon_{t-1}) = \alpha_t(1 - \alpha_{t-1}) + (1 - \alpha_t) = \alpha_t - \alpha_t\alpha_{t-1} + 1 - \alpha_t = 1 - \alpha_t\alpha_{t-1} ( α t ( 1 − α t − 1 )) Va r ( ϵ t − 2 ) + ( 1 − α t ) Va r ( ϵ t − 1 ) = α t ( 1 − α t − 1 ) + ( 1 − α t ) = α t − α t α t − 1 + 1 − α t = 1 − α t α t − 1 。因此,我们可以将组合噪声项改写为1 − α t α t − 1 ϵ ˉ t − 2 \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\epsilon}_{t-2} 1 − α t α t − 1 ϵ ˉ t − 2 ,这里ϵ ˉ t − 2 ∼ N ( 0 , I ) \bar{\epsilon}_{t-2} \sim \mathcal{N}(0, I) ϵ ˉ t − 2 ∼ N ( 0 , I ) 。
这得到:
x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ˉ t − 2 x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_t \alpha_{t-1}} \bar{\epsilon}_{t-2} x t = α t α t − 1 x t − 2 + 1 − α t α t − 1 ϵ ˉ t − 2
如果我们继续将此展开一直到x 0 x_0 x 0 ,我们引入累积乘积符号α ˉ t = ∏ i = 1 t α i \bar{\alpha}_t = \prod_{i=1}^t \alpha_i α ˉ t = ∏ i = 1 t α i 。一般形式变为:
x t = α ˉ t x 0 + 1 − α ˉ t ϵ 当 ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon \quad \text{当} \quad \epsilon \sim \mathcal{N}(0, I) x t = α ˉ t x 0 + 1 − α ˉ t ϵ 当 ϵ ∼ N ( 0 , I )
这是扩散模型的基本方程。它告诉我们,任何含噪声版本x t x_t x t 都可以直接从原始数据x 0 x_0 x 0 获得,方法是将x 0 x_0 x 0 按α ˉ t \sqrt{\bar{\alpha}_t} α ˉ t 缩放,生成一个标准高斯噪声向量 (vector)ϵ \epsilon ϵ ,再将其按1 − α ˉ t \sqrt{1 - \bar{\alpha}_t} 1 − α ˉ t 缩放,然后将这两个结果相加。
等价地,我们可以说条件分布q ( x t ∣ x 0 ) q(x_t | x_0) q ( x t ∣ x 0 ) 是一个高斯分布:
q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t | x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I) q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I )
这个分布的均值是α ˉ t x 0 \sqrt{\bar{\alpha}_t} x_0 α ˉ t x 0 ,方差是( 1 − α ˉ t ) I (1 - \bar{\alpha}_t) I ( 1 − α ˉ t ) I 。
由于α t = 1 − β t \alpha_t = 1 - \beta_t α t = 1 − β t ,且β t \beta_t β t 通常很小且为正,因此α t \alpha_t α t 略小于1。累积乘积α ˉ t \bar{\alpha}_t α ˉ t (按照惯例)从α ˉ 0 = 1 \bar{\alpha}_0 = 1 α ˉ 0 = 1 开始,并随着t t t 增加到总步数T T T 而单调递减趋近于0。因此,α ˉ t \sqrt{\bar{\alpha}_t} α ˉ t (“信号率”)从1减小到0,而1 − α ˉ t \sqrt{1 - \bar{\alpha}_t} 1 − α ˉ t (“噪声率”)从0增加到1。这与我们的直觉一致:随着t t t 增加,原始数据x 0 x_0 x 0 的影响减弱,样本x t x_t x t 越来越多地被噪声主导,当α ˉ T ≈ 0 \bar{\alpha}_T \approx 0 α ˉ T ≈ 0 时,最终接近标准高斯分布N ( 0 , I ) \mathcal{N}(0, I) N ( 0 , I ) 。
此图显示了信号率(α ˉ t \sqrt{\bar{\alpha}_t} α ˉ t )和噪声率(1 − α ˉ t \sqrt{1 - \bar{\alpha}_t} 1 − α ˉ t )在使用从β 1 = 10 − 4 \beta_1 = 10^{-4} β 1 = 1 0 − 4 到β 1000 = 0.02 \beta_{1000} = 0.02 β 1000 = 0.02 的线性方差计划时,在1000个时间步上的典型变化。随着t t t 增加,原始数据的影响减小,而噪声的影响增加。
对训练的意义
这个封闭形式表达式x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon x t = α ˉ t x 0 + 1 − α ˉ t ϵ 对高效训练扩散模型很重要。训练的目标是学习一个神经网络 (neural network)ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵ θ ( x t , t ) ,使其能够预测被加入以得到x t x_t x t 的噪声ϵ \epsilon ϵ 。为此,我们需要训练样本,这些样本包含含噪声数据x t x_t x t 以及用于生成它的相应噪声ϵ \epsilon ϵ 。
使用此公式,我们可以快速创建这些训练对:
从您的数据集中选择一个数据点x 0 x_0 x 0 。
从{ 1 , . . . , T } \{1, ..., T\} { 1 , ... , T } 中均匀地随机采样一个时间步t t t 。
采样一个标准高斯噪声向量 (vector)ϵ ∼ N ( 0 , I ) \epsilon \sim \mathcal{N}(0, I) ϵ ∼ N ( 0 , I ) 。
使用公式计算含噪声样本x t x_t x t : x t = α ˉ t x 0 + 1 − α ˉ t ϵ x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon x t = α ˉ t x 0 + 1 − α ˉ t ϵ 。
将( x t , t ) (x_t, t) ( x t , t ) 作为输入提供给网络ϵ θ \epsilon_\theta ϵ θ ,并训练它输出一个接近原始噪声ϵ \epsilon ϵ 的预测ϵ θ ( x t , t ) \epsilon_\theta(x_t, t) ϵ θ ( x t , t ) (通常使用均方误差损失)。
这种直接跳到任何时间步t t t 的能力,使得训练批次的并行高效生成成为可能,这比为每个训练样本逐步模拟马尔可夫链要快得多。这种采样策略是我们将在第4章讨论的训练循环的一个组成部分。