【概述】
对于 DDPM 来说,一个最大的缺点是需要设置较长的扩散步数才能得到好的效果,这导致了生成样本的速度较慢,比如扩散步数为 $1000$ 的话,那么生成一个样本就要模型推理 $1000$ 次
为此 Jiaming Song 等学者在《Denoising Diffusion Implicit Models》 中针对 DDPM 进行了改进,提出了去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM),不再限制前向和反向过程必须是马尔卡夫链,在不牺牲质量的情况下,允许更少的采样步数来加速反向生成过程
此外 DDIM 的另一个特点是从一个随机噪音生成样本的过程是一个确定的过程,即中间再额外没有加入随机噪音
【引入】
对于 DDPM 的简化优化目标:
可以发现,DDPM 其实仅依赖于边缘分布 $q(\mathbf{x}_t|\mathbf{x}_0)$,而不是直接作用在联合分布 $q(\mathbf{x}_{1:T}|\mathbf{x}_0)$ 上,也就是说 DDPM 这个隐变量模型可以有很多推理分布来选择,只要推理分布满足边缘分布条件(扩散过程的特性)即可,而且这些推理过程并不一定要是马尔可夫链
需要注意的是,要得到 DDPM 的优化目标,还需要知道后验分布 $q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)$,在 DDPM 中,这个分布的推导是依赖于马尔可夫链和 $q(\mathbf{x}_t|\mathbf{x}_0)$ 得到的,如果要解除对前向过程的依赖,就需要直接定义 $q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)$ 这个分布
【原理】
非马尔可夫前向扩散过程
根据 DDPM 的前向扩散过程:
DDIM 令 $\alpha_t=\overline{\alpha}_t$,根据推导(详见论文附录),将前向扩散分布定义为:
其中,方差 $\sigma_t^2$ 是一个实数,不同的值代表了不同的高斯分布,因此 $q_{\sigma}(\mathbf{x}_{1:T}|\mathbf{x}_0) $ 其实是一系列的前向扩散分布,而均值也被定义为依赖于 $\mathbf{x}_0$ 和 $\mathbf{x}_t$ 的组合函数
根据 $q(\mathbf{x}_T|\mathbf{x}_0)$,根据数学归纳法,可以得到对于所有 $t$,均满足:
也就是说,这里虽然没有直接定义前向扩散过程,但满足了之前提到的两个条件:
- 已知边缘分布 $q(\mathbf{x}_t|\mathbf{x}_0)$
- 已知后验分布 $q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)$
此时,得到的前向扩散过程是一个非马尔可夫链的前向扩散过程,同时采用与 DDPM 一样的方式去推导优化目标,最终也会得到相同的 $L_{t-1}^{\text{simple}}$
如下图所示,给出了非马尔可夫前向扩散过程的示例
非马尔可夫反向生成过程
根据 DDPM 的反向生成过程:
根据 $q_{\sigma}(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)$ 的形式,可使用如下公式来从 $\mathbf{x}_t$ 生成 $\mathbf{x}_{t-1}$:
这个过程分为三个部分:
- 由预测的 $\mathbf{x}_0$ 来产生
- 指向 $\mathbf{x}_t$ 的部分($\epsilon_{\theta}(\theta{x}_t,t)$ 是与 $\mathbf{x}_t$ 无关的噪声)
- 随机噪声
进一步,将 $\sigma_t^2$ 定义为:
当 $\eta=1$ 时,$\sigma_t^2=\tilde{\beta}_t$,此时反向生成过程与 DDPM 相同;当 $\eta=0$ 时,这个时候反向生成过程就没有随机噪声了,一旦最初的与 $\mathbf{x}_t$ 无关的噪声 $\epsilon_{\theta}(\theta{x}_t,t)$ 确定,那么样本生成就变成了一个确定性的过程,这种情况即 DDIM
【反向生成过程的加速】
虽然 DDIM 和 DDPM 的训练过程一样,但 DDIM 并没有明确的前向扩散过程,这意味着可以定义一个更短时间步 $t$ 的前向扩散过程
对于原始序列 $t=[1,2,\cdots,T]$,采样一个长度为 $S$ 的子序列 $\tau=[\tau_1,\tau_2,\cdots,\tau_S]$,将 $\mathbf{x}_{\tau_1},\mathbf{x}_{\tau_2},\cdots,\mathbf{x}_{\tau_S}$ 的前向扩散过程定义为一个马尔可夫链,且满足:
如下图所示,展示了 $\tau=[1,3]$ 的前向扩散过程
那么,反向生成过程就可以用这个子序列的反向马尔可夫链来替代,由于可以设置比原来的步数要小,就可以加速反向生成过程
本质上来说,上述的加速,其实是将前向扩散过程按照如下方式进行了分解,一个是由 $\{\mathbf{x}_{\tau_i}\}_{i=1}^S$ 组成的马尔可夫链,另一个是由剩余变量 $\{\mathbf{x}_t\}_{t\in\overline{\tau}}$ 组成的星状图
其中,$\overline{\tau}=\{1,2,\cdots,T\}-\tau$
同时,对于反向生成过程,也只用马尔可夫链的那部分进行生成: