DDPM采样算法提供了一套合理方法来反转扩散过程。然而,它通常需要模拟许多小步骤(等于正向步骤的数量,T),这可能在计算上代价高昂且耗时。试想一下,生成一张图片需要1000个步骤;这对许多应用来说很快就变得不实用。
幸运的是,由Song、Meng和Ermon(2020)提出的去噪扩散隐式模型(DDIM)提供了一种更灵活且通常明显更快的替代方案。DDIM的思路是,用于训练噪声预测网络ϵθ的目标函数并不严格依赖于DDPM假设的正向过程的马尔可夫性质。DDIM通过提出一种不同的生成过程(反向过程),该过程是非马尔可夫的,但仍然使用相同的已训练网络ϵθ来做到这一点。
DDIM的核心思路
回顾DDPM的反向步骤旨在近似p(xt−1∣xt)。DDIM采取了不同的方法。它从以下属性开始:给定原始数据x0和用于生成xt的噪声ϵ,我们可以写出:
xt=αˉtx0+1−αˉtϵ
我们可以重新排列此式,根据当前带噪样本xt和预测噪声ϵθ(xt,t),得到原始数据x0的估计值:
x^0(xt,t)=αˉtxt−1−αˉtϵθ(xt,t)
这个x^0表示从带噪中间样本xt对最终干净数据点进行的预测。
DDIM接着通过将这个预测的x^0与预测噪声ϵθ(xt,t)结合来定义到xt−1的步骤,但其方式使得能够进行确定性过渡和跳步。通用的DDIM更新规则是:
xt−1=预测的 x0 缩放后αˉt−1x^0(xt,t)+指向 xtext的方向1−αˉt−1−σt2ϵθ(xt,t)+随机噪声σtz
其中z∼N(0,I)是标准高斯噪声,σt决定随机性程度。
确定性采样 (η=0)
DDIM的一个重要特点是我们可以选择标准差σt。一个常见选择是设置σt=0。这使得更新步骤在给定xt和预测ϵθ(xt,t)的情况下完全确定:
xt−1=αˉt−1x^0(xt,t)+1−αˉt−1ϵθ(xt,t)
代入x^0(xt,t)的表达式:
xt−1=αˉt−1(αˉtxt−1−αˉtϵθ(xt,t))+1−αˉt−1ϵθ(xt,t)
这种确定性意味着从相同的初始噪声xT开始,我们总是会生成相同的最终输出x0。这与DDPM有很大不同,DDPM在每一步添加的噪声σtz会产生变化,即使从相同的xT开始。
使用子序列进行更快采样
非马尔可夫性质和确定性更新规则(当σt=0时)使得DDIM即使只使用原始时间步[1,...,T]的子序列也能有效工作。例如,我们可能不是取1000个步骤,而是定义一个只有50或100个时间步的采样序列S,比如S=(T,T−NstepsT,T−2NstepsT,...,1),其中Nsteps是所需的采样步骤数(例如50)。
DDIM更新接着通过在这个子序列中的连续时间步之间进行。如果t和t′是子序列S中两个连续的时间步(且t′<t),则更新根据xt计算xt′,使用相同的公式但将t−1替换为t′。这使得去噪过程可以有更大的“跳跃”,大幅加速生成。
DDIM算法
以下是使用DDIM进行采样的步骤,常常采用确定性设置(σt=0):
- 选择时间步: 从(1,...,T)中选择一个包含Nsteps个时间步的子序列S=(s1,s2,...,sNsteps),通常按降序排列(例如,s1=T,s2≈T−NstepsT,...,sNsteps≈1)。令s0=0。
- 初始噪声: 采样起始噪声xs1=xT∼N(0,I)。
- 迭代去噪: 对于i=1,...,Nsteps:
- 获取当前时间步t=si和前一个时间步t′=si+1(如果i=Nsteps则使用t′=0)。
- 使用训练好的模型预测噪声:ϵθ(xt,t)。
- 预测干净数据:x^0(xt,t)=αˉtxt−1−αˉtϵθ(xt,t)。
- 必要时截断x^0(例如,对于归一化图像截断到[−1,1])。
- 计算方差σt。一种通用方式是使用参数η∈[0,1]:
σt=η1−αˉt1−αˉt′1−αˉt′αˉt
设置η=0得到σt=0(确定性DDIM)。设置η=1得到随机版本。
- 计算下一个样本xt′:
xt′=αˉt′x^0(xt,t)+1−αˉt′−σt2ϵθ(xt,t)+σtz
其中,如果σt>0,则z∼N(0,I);如果σt=0,则z=0。请注意,如果t′=0,则αˉt′=1并且公式简化为:x0=x^0(xt,t)。
- 输出: 返回最终样本x0。
DDPM和确定性DDIM(η=0)采样的比较。DDPM基于马尔可夫假设使用小的随机步骤。DDIM在每一步计算一个预测的x0,并根据选定的子序列S用它来执行更大的确定性步骤,大幅减少了所需的网络评估次数。
使用更少步骤(Nsteps≪T)的能力使得DDIM成为对生成速度有要求的实际使用中一个非常受欢迎的选择。在下一节中,我们将探讨这两种采样方法之间的权衡。