扩散模型(二):DDIM
扩散模型(二):DDIM
原理推导
DDPM的一个缺点在于采样时需要进行逐步去噪,推理速度过慢,因而其定义正反向过程都是马尔科夫链过程,无法进行跳步处理。
回到DDPM的推导过程,我们发现虽然结果从 \(q(x_t|x_{t-1})\) 推导得出,但结果并未涉及 \(q(x_t|x_{t-1})\) ,那么能否直接打破马尔科夫链的性质,直接从 \(q(x_t|x_0)\) 推导得到 \(q(x_{t-1}|x_t,x_0)\) ?这便是DDIM方法思想的由来。
为了可以直接利用使用DDPM方法训练的模型,我们采用与DDPM相同的定义:
注意这里的上划线并没有连乘的含义,只是为了统一符号。
为了得到 \(q(x_{t-1}|x_t,x_0)\) 的表达式,我们使用待定系数法:
求解得到如下结果:
与DDPM的处理相似,将 \(x_0=\frac{1}{\sqrt{\overline{\alpha}_t}}x_t-\frac{\sqrt{1-\overline{\alpha}_t}}{\sqrt{\overline{\alpha}_t}}\overline{\epsilon}_t\) 代入上式化简可得:
特殊情形
在我们推导过程中并未涉及 \(\sigma_t\) 这个自由变量。当 \(\sigma_t\) 取值不同时,采样过程会呈现不同的特点。当 \(\sigma_t^2=\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t}(1-\frac{\overline{\alpha}_t}{\overline{\alpha}_{t-1}})\) 时,我们便得到了DDPM。当 \(\sigma_t^2=0\) 时,采样过程便是一个确定的过程,此时得到一个确定的隐变量模型,这便是DDIM名字中"I"的含义"Implicit"。
实际代码实现中,为了方便调参,我们令 \(\sigma^{'}_{t}=\sqrt{\frac{1-\overline{\alpha}_{t-1}}{1-\overline{\alpha}_t}(1-\frac{\overline{\alpha}_t}{\overline{\alpha}_{t-1}})}\) ,设置 \(\sigma_t=\eta\sigma^{'}_{t}\) ,调参时只需要调整 \(\eta\) 的大小即可。当 \(\eta=1\) 时,DDIM变回DDPM,当 \(\eta=0\) 时,采样过程不含随机性。
加速采样
在DDIM中,我们直接定义了 \(\overline{\alpha}_t\) ,而DDPM中定义的 \(\alpha_t=\frac{\overline{\alpha}_t}{\overline{\alpha}_{t-1}}\) , \(\beta_t=1-\frac{\overline{\alpha}_t}{\overline{\alpha}_{t-1}}\) ,均可以直接从 \(\overline{\alpha}_t\) 求出,再观察DDPM的损失函数:
发现其同样只与 \(\overline{\alpha}_t\) 有关。因此,令 \(\mathbf{\tau}=\left[\tau_1,\tau_2,...,\tau_{dim(\tau)} \right]\) 为 \(\left[1,2,...,T\right]\) 的任意子序列,那么给定 \(\overline{\alpha}_{\tau_i}\) 为参数训练一个扩散步数为 \(dim(\tau)\) 步的DDPM可以看作原始扩散步数为 \(T\) 的DDPM的目标函数的子集,包含了其任意子序列参数的训练结果。
因此,对一个训练好的 \(T\) 步DDPM模型,在采样过程中,我们可以把其当作以 \(\mathbf{\tau}=\left[\tau_1,\tau_2,...,\tau_{dim(\tau)} \right]\) 子序列对应参数训练的 \(dim(\tau)\) 步模型进行采样,从而减少生成步数,加速采样:
浙公网安备 33010602011771号