DDIM简介

引子

DDIM不是一个太容易理解的东西,尤其是当思维被定式成DDPM那一套之后。首先我们用最快的方式回顾DDPM的推导,从贝叶斯定理开始,我们希望用前向分布估计反向分布: \[ p(x_{t-1}|x_t)=\frac{p(x_{t}|x_{t-1})p(x_{t-1})}{p(x_t)}, \] 由于 \(p(x_{t-1}),p(x_t)\) 的不确定,退而求其次以 \(x_0\) 作为额外的条件,得到: \[ p(x_{t-1}|x_t,x_0) =\frac{p(x_{t}|x_{t-1},x_0)p(x_{t-1}|x_0)}{p(x_t|x_0)}, \] 这样一来,等式右边所有的分布都可以被写作高斯分布,相乘或相除之后依然是高斯分布。而对于等式左边,还差一个 \(x_0\) 不知道。因此可以将 \(x_0\) 参数化为 \(x_t\) 和噪声 \(\epsilon\) 的组合,由神经网络负责预测 \(\epsilon\) ,从而实现 \(x_{t}\) 推算 \(x_{t-1}\) ,即反向去噪。

上述过程看起来可以说行云流水。但一个潜在的问题是:既然神经网络预测了噪声 \(\epsilon\) ,为什么不能直接返回 \(x_0\) 或者 \(x_s(s<t)\) 呢?他们也是 \(x_t\)\(\epsilon\) 的组合,如果可以“跳步”,岂不是可以更快速地采样?这个问题的另一个表述是:DDPM为什么一定要一步一步去噪?

我们不妨来试一试。假设 \(s<t\) ,且 \(t-s>1\) ,那么可以得到: \[ p(x_s|x_t,x_0)=\frac{p(x_{t}|x_s,x_0)p(x_s|x_0)}{p(x_t|x_0)}, \] 注意到 \(p(x_{t}|x_s,x_0)\) 其实可以表示为: \[ p(x_{t}|x_s,x_0) = \frac{p(x_s|x_0)p(x_t|x_s)}{p(x_s)}, \] 其中 \(p(x_s)\) 不是高斯分布,因此 \(p(x_t|x_s,x_0)\) 也不是高斯分布,这使得推导过程被破坏。而之所以 \(p(x_t|x_{t-1},x_0)\) 可以成立,是得益于马尔科夫链性质使得其等价于 \(p(x_t|x_{t-1})\) ,从而依然保持高斯分布。换言之,在DDPM中,我们可知的逆向分布只有\(p(x_t|x_{t-1},x_0)\),这使得采样无法被跳步。

那我非要跳步呢?DDIM提供了一个更粗暴的解决办法:我不要求 \(p(x_t|x_s,x_0)\) 为高斯分布,而是直接假设目标分布 \(p(x_s|x_t,x_0)\) 为高斯分布。这样一来,相当于带着答案找步骤,让我们看看DDIM是如何导出一个新的采样公式的。

DDIM的待定系数法

既然我们假设了高斯分布,那么仿照DDPM的推导结果,可以设置三个系数,将其表示为: \[ p(x_s|x_t,x_0) = \mathcal{N}(x_s;kx_0+mx_t, \sigma^2\mathbf{I}), \] 根据重参数化,可以将 \(x_s\) 写成 \(kx_0+mx_t+\sigma\epsilon\) ,另一方面 \(x_s = \sqrt{\overline{\alpha}_s}x_0 + \sqrt{1-\overline{\alpha}_s}\epsilon\) 。我们可以从均值和方差两个方面构建这两者之间的等价性。

首先,\(x_t = \sqrt{\overline{\alpha}_t}x_0 + \sqrt{1-\overline{\alpha}_t}\epsilon\) ,因此 \[ x_s = (k+m\sqrt{\overline{\alpha}_t})x_0 + \sigma\epsilon_1+m\sqrt{1-\overline{\alpha}_t}\epsilon_2, \] 服从均值为 \((k+m\sqrt{\overline{\alpha}_t})x_0\) ,方差为 \(\sqrt{\sigma^2+m^2(1-\overline{\alpha}_t)}\) 的高斯分布。因此有对应的等式: \[ \begin{aligned} k+m\sqrt{\overline{\alpha}_t} = \overline{\alpha}_s \\ \sigma^2+m^2(1-\overline{\alpha}_t) = 1 - \overline{\alpha}_s \end{aligned} \] 两个方程,三个未知数,DDIM将 \(\sigma\) 作为可变参数,解出 \(k\)\(m\)\[ m=\frac{\sqrt{1-\overline{\alpha}_s-\sigma^2}}{\sqrt{1 - \overline{\alpha}_t}},\qquad k=\overline{\alpha}_s-\frac{\sqrt{1-\overline{\alpha}_s-\sigma^2}}{\sqrt{1 - \overline{\alpha}_t}}\overline{\alpha}_t. \] 这样,我们就导出了采样公式: \[ x_s = \sqrt{\overline{\alpha}_s}\left(\frac{x_t-\sqrt{1-\overline{\alpha}_t}\epsilon_{\theta}(x_t, t)}{\sqrt{\overline{\alpha}_t}}\right)+\sqrt{1-\overline{\alpha}_s-\sigma^2}\epsilon_{\theta}(x_t, t)+\sigma\epsilon. \] 这个采样公式也可以退化成 \(s=t-1\) 的形式。

可以看到,神经网络 \(\epsilon_\theta\) 的定义和DDPM完全一致。事实上,DDIM只是一种采样方法,并不影响训练的目标。换言之,对于任意训练好的diffusion模型,只需要换一个采样公式,就可以实现跳步的采样,因为脱离了马尔科夫的要求。

此外,也不必担心DDIM破坏了前向过程,无论 \(\sigma\) 取何值,前向分布 \(p(x_t|x_0)\) 还是原定的高斯分布,由 \(\alpha_t\) 给出。

不同的\(\sigma\)

回顾DDPM的采样公式: \[ x_{t-1} = \frac{1}{\sqrt{\alpha_t}}\left(x_t-\frac{1-\alpha_t}{\sqrt{1-\overline{\alpha}_t}}\epsilon_{\theta}(x_t, t)\right)+\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}}\beta_t\epsilon. \] 令DDIM中的 \(\sigma=\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_{t}}\beta_t\) ,则可以得到和上式一样的结果,这严格表明了DDIM和DDPM并不冲突,是一种更灵活的形式。

更特别地,令 \(\sigma=0\),则反向采样过程变成确定性的,采样的 \(x_T\) 确定时,\(x_0\) 随即确定。在确定性采样时,能够取得最好的加速结果,也就是采样步数对生成质量的影响最小。直观上来说,确定性的轨迹会更简单,无需那么多的步骤去拟合。但另一方面,模型终究只是分布的近似,因此即便是确定性的,依然是步数越多质量越好。

而在DDPM中,方差的选取是被回避的,直接通过计算得到,这是因为方差必须是这个值,如果变了就和前向过程相互矛盾。因此一句话总结:DDIM直接让方差变成一个可变值,为了使其和前向过程依然保持一致,需要改变前面的系数。


DDIM简介
http://zcliangyue.github.io/2025/03/30/DDIM/
Author
SGGZCL
Posted on
March 30, 2025
Updated on
March 30, 2025
Licensed under