生成式AI之DDIM
DDPM为了公式推导简单,定义了前向过程是马尔科夫链,因此使得反向过程也是一个马尔可夫过程,即每个状态都只受前一个状态的影响。所以如果训练的时候有$T$步,后续采样的时候也需要有$T$步,速度很慢。
公式推导如下:
在DDPM中,由贝叶斯公式可知:
$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})} $
其中,已知$p(x_{t-1}|x_{0})$和$p(x_{t}|x_{0})$,$p(x_{t}|x_{t-1},x_{0})$未知。
在DDPM中,假设是前向过程是马尔科夫链。但是在DDIM中,做了一个假设,即$p(x_{t}|x_{t-1},x_{0})$为任意分布,只需满足等式即可。DDIM不符合马尔可夫性质,只是在前向过程中,符合DDPM一样的公式,即:$x_{t}=\sqrt{\bar{\alpha_{t}}}x_{0}+\sqrt{1-\bar{\alpha}} \varepsilon_{t}$即可。
可以由待定系数法求$p(x_{t}|x_{t-1},x_{0})$,过程如下:
设:$p(x_{t}|x_{t-1},x_{0})\sim N(kx_{0}+mx_{t}, \sigma^{2}I)$,则:
$x_{t-1}=kx_{0}+mx_{t}+\sigma\epsilon$,其中$\epsilon\sim N(0,I)$,
因为$x_{t}=\sqrt{\bar{\alpha_{t}}}x_{0}+\sqrt{1-\bar{\alpha_{t}}}\epsilon_{t}$
所以:$x_{t-1}=kx_{0}+m(\sqrt{\bar{\alpha}}x_{0}+\sqrt{1-\bar{\alpha}}\epsilon_{t})+\sigma\epsilon$
合并同类相,可得:
$x_{t-1}=(k+m\sqrt{\bar{\alpha}})x_{0}+m\sqrt{1-\bar{\alpha}}\epsilon_{t}+\epsilon$
$x_{t-1}=(k+m\sqrt{\bar{\alpha}})x_{0}+{\epsilon}' $,其中${\epsilon}'\sim N(0,m^2(1-\bar{\alpha})+\sigma ^2)$
因为:$x_{t-1}=\sqrt{\bar{\alpha_{t-1}}}x_{0}+\sqrt{1-\bar{\alpha_{t-1}}}\epsilon_{t-1}$
所以:$k+m\sqrt{\bar{\alpha_{t}}}=\sqrt{\bar{\alpha_{t-1}}}$,$m^2(1-\bar{\alpha_{t}})+\sigma^2=1-\bar{\alpha_{t-1}}$,
求得:$m=\frac{\sqrt{1-\bar{\alpha_{t-1}}-\sigma^2}}{\sqrt{1-\bar{\alpha_{t}}}}$和$k=\sqrt{\alpha_{t-1}}-\sqrt{1-\bar{\alpha_{t-1}}-\sigma^2}\frac{\sqrt{\bar{\alpha_{t}}}}{\sqrt{1-\bar{\alpha_{t}}}}$。
所以:$p(x_{t-1}|x_{t},x_{0}) \sim N((\sqrt{\bar{\alpha_{t-1}}}-\sqrt{1-\bar{\alpha_{t-1}}-\sigma ^2}\frac{\sqrt{\bar{\alpha_{t}}}}{\sqrt{1-\bar{\alpha_{t}}}})x_{0}+\frac{\sqrt{1-\bar{\alpha_{t-1}}-\sigma^2}}{\sqrt{1-\bar{\alpha_{t}}}}x_{t},\sigma^2I)\sim N(\sqrt{\bar{\alpha_{t-1}}}x_{0}+\sqrt{1-\bar{\alpha_{t-1}}-\sigma^2}\frac{x_{t}-\sqrt{\bar{\alpha_{t}}}x_{0}}{\sqrt{1-\bar{\alpha_{t}}}},\sigma^2I)$
最后由如下关系式得:
$x_{0}=\frac{1}{\sqrt{\bar{\alpha_{t}}}}(x_{t}-\sqrt{1-\bar{\alpha_{t}}}\epsilon_{\theta})$
$\epsilon_{\theta}=\frac{x_{t}-\sqrt{\bar{\alpha_{t}}}x_{0}}{\sqrt{1-\bar{\alpha_{t}}}}$
将$\epsilon_{\theta}$代入可得:
$x_{t-1}=\sqrt{\bar{\alpha_{t-1}}}(\frac{x_{t}-\sqrt{1-\bar{\alpha_{t}}}\epsilon_{\theta}}{\sqrt{\bar{\alpha_{t}}}}+\sqrt{1-\bar{\alpha_{t-1}}-\sigma^2}\epsilon_{\theta})+\sigma^2\epsilon$
这里,DDIM的反向过程不是马尔可夫过程,所以不需要像DDPM那样遵守$x_{t}\longrightarrow x_{t-1}$。因此使用如下更加通用的表达式:
$x_{s}=\sqrt{\bar{\alpha_{s}}}(\frac{x_{z}-\sqrt{1-\bar{\alpha_{z}}}\epsilon_{\theta}}{\sqrt{\bar{\alpha_{z}}}}+\sqrt{1-\bar{\alpha_{s}}-\sigma^2}\epsilon_{\theta})+\sigma^2\epsilon$
其中,$s<z, z \le T$,$s$和$z$不需要连续。推导过程发现和$\sigma$无关,因此其取任何值等式都成立。
DDIM的训练代码和DDPM一样,只是在采样的时候不同,符合上述公式即可。