扩散模型(二):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|x_0)=\mathcal{N}(x_t;\sqrt{\overline{\alpha}_t}x_0,\sqrt{1-\overline{\alpha}_t}\mathbf{I}) \]

注意这里的上划线并没有连乘的含义,只是为了统一符号。

为了得到 \(q(x_{t-1}|x_t,x_0)\) 的表达式,我们使用待定系数法:

\[q(x_{t-1}|x_t,x_0)=\mathcal{N}(x_{t-1};kx_0+mx_t,\sigma_t^2\mathbf{I}) \]

\[\begin{align*} x_{t-1} &= kx_0+mx_t+\sigma_t\epsilon \\ &= kx_0+m(\sqrt{\overline{\alpha}_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilon_1)+\sigma_t\epsilon \\ &= (k+m\sqrt{\overline{\alpha}_t})x_0+m\sqrt{1-\overline{\alpha}_t}\epsilon_1+\sigma_t\epsilon \\ &= (k+m\sqrt{\overline{\alpha}_t})x_0+\sqrt{m\sqrt{1-\overline{\alpha}_t}+\sigma_t}\epsilon' \\ &= \sqrt{\overline{\alpha}_{t-1}}x_0+\sqrt{1-\overline{\alpha}_{t-1}}\epsilon' \end{align*} \]

求解得到如下结果:

\[q(x_{t-1}|x_t,x_0)=\mathcal{N}(x_{t-1};\sqrt{\overline{\alpha}_{t-1}}x_0+\sqrt{1-\overline{\alpha}_{t-1}-\sigma_t^2}\frac{x_t-\sqrt{\overline{\alpha}_t}x_0}{\sqrt{1-\overline{\alpha}_t}},\sigma_t^2\mathbf{I}) \]

与DDPM的处理相似,将 \(x_0=\frac{1}{\sqrt{\overline{\alpha}_t}}x_t-\frac{\sqrt{1-\overline{\alpha}_t}}{\sqrt{\overline{\alpha}_t}}\overline{\epsilon}_t\) 代入上式化简可得:

\[x_{t-1}=\sqrt{\overline{\alpha}_{t-1}}(\frac{x_t-\sqrt{1-\overline{\alpha}_t}}{\sqrt{\overline{\alpha}_t}}\overline{\epsilon}_t)+\sqrt{1-\overline{\alpha}_{t-1}-\sigma_t^2}\overline{\epsilon}_t+\sigma_t\epsilon \]

特殊情形

在我们推导过程中并未涉及 \(\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的损失函数:

\[L=\mathbb{E}_{x_0,\epsilon\sim\mathcal{N}(0,1)}\left[||\epsilon-\epsilon_{\theta}(\sqrt{\overline{\alpha}_t}x_0+\sqrt{1-\overline{\alpha}_t}\epsilon,t)||^2\right] \]

发现其同样只与 \(\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)\) 步模型进行采样,从而减少生成步数,加速采样:

\[x_{\tau_{t-1}}=\sqrt{\overline{\alpha}_{\tau_{t-1}}}(\frac{x_{\tau_{t}}-\sqrt{1-\overline{\alpha}_{\tau_{t}}}}{\sqrt{\overline{\alpha}_{\tau_{t}}}}\overline{\epsilon}_{\tau_{t}})+\sqrt{1-\overline{\alpha}_{\tau_{t-1}}-\sigma^2}\overline{\epsilon}_{\tau_{t}}+\sigma_{\tau_{t}}\epsilon \]

posted @ 2025-03-19 15:06  kawhiSYZ  阅读(298)  评论(0)    收藏  举报