ddpm逆向过程推导
本文正式开始了ddpm逆向过程的推导,在逆向推导之前,我们将前一篇文章的推导结果做一个总结。
前文总结
我们目前已知前线过程\(q\)
\[q(x_t|x_{t-1}):=\mathcal N(x_t;\sqrt{1-\beta_t}x_{t-1},\beta_tI)
\tag{Eq.1}
\]
\[q(x_t|x_0)=\mathcal N(x_t; \sqrt{\bar{\alpha_t}}x_0,(1-\bar\alpha_t)I)
\tag{Eq.2}
\]
其中
\[\bar \alpha_t=\alpha_t\alpha_{t-1}...\alpha_1=\prod_{i=1}^t\alpha_i
\tag{Eq.3}
\]
\[\alpha_t + \beta_t=1
\tag{Eq.4}
\]
高斯公式如下:
\[\mathcal N(\mu,\sigma^2I)=\frac{1}{\sqrt{2\pi \sigma^2}}\exp \left[-\frac{1}{2}(\frac{x^2}{\sigma^2}-\frac{2\mu x}{\sigma^2}+\frac{\mu^2}{\sigma^2})\right]
\tag{Eq.5}
\]
逆向过程
逆向过程就是将\(q(x_t|x_{t-1})\)方向颠倒过来成为\(q(x_{t-1}|x_t)\),一步一步就能将高斯噪声重新生成图片。我们通过贝叶斯公式如下:
\[q(x_{t-1}|x_t) = \frac{q(x_t|x_{t-1})q(x_{t-1})}{q(x_t)}
\tag{Eq.6}
\]
但是Eq.5最大的问题在于它和我们已知的条件完全无关,为此我们需要引入一些条件,在ddpm中合理的条件就是\(x_0\),也就是原图,直觉上很合理,在已知原图的基础上,逆向过程可以改写为如下形式:
\[\begin{aligned}
q(x_{t-1}|x_t,x_0) &= \frac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)} \\
&=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)}
\end{aligned}
\tag{Eq.7}
\]
在引入了\(x_0\)条件后Eq.6可以引入已知条件。由此我们可以用高斯公式计算Eq.6的表达式,由于这个过程太过枯燥,我们跳过中间过程,结果如下:
\[q(x_{t-1}|x_t,x_0)=\exp\left(-\frac{1}{2}\left[\left(\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar \alpha_{t-1}}\right)x_{t-1}^2-\left(\frac{2\sqrt{\alpha_t}}{\beta_t}x+\frac{2\sqrt{\bar\alpha_{t-1}}}{1-\bar{\alpha_{t-1}}}x_0\right)x_{t-1}+C(x_t,x_0)\right]\right)
\tag{Eq.8}
\]
我们将Eq.8套入Eq.5的形式可以的得到:
\[\begin{aligned}
\frac{1}{\sigma^2} &=\frac{\alpha_t}{\beta_t}+\frac{1}{1-\bar\alpha_{t-1}} \\
&=\frac{\alpha_t(1-\bar\alpha_{t-1})+\beta_t}{{\beta_t(1-\bar\alpha_{t-1})}} \\
&=\frac{1-\bar{\alpha}_{t}}{{\beta_t(1-\bar\alpha_{t-1})}}
\end{aligned}
\tag{Eq.9}
\]
则
\[\sigma^2=\tilde \beta=\frac{{\beta_t(1-\bar\alpha_{t-1})}}{1-\bar{\alpha}_{t}}
\tag{Eq.10}
\]
Eq.10和附件中的公式(7)结果一致,并且我们可以发现方差\(\sigma^2\)只和\(\alpha,\beta\)相关。除此以外均值\(\mu\)如下:
\[\frac{2\mu}{\sigma^2}=\frac{2\sqrt{\alpha_t}}{\beta_t}+\frac{2\sqrt{\alpha_{t-1}}}{1-\bar{\alpha}_{t-1}}x_0
\tag{Eq.11}
\]
\[\begin{aligned}
\mu&=\left(\frac{\sqrt{\alpha_t}}{\beta_t}x_t+\frac{\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t-1}}x_0\right)\sigma^2 \\
&=\frac{\sqrt{\alpha_t}}{\cancel{\beta_t}}\frac{{\cancel{\beta_t}(1-\bar\alpha_{t-1})}}{1-\bar{\alpha}_{t}}x_t+\frac{\sqrt{\bar\alpha_{t-1}}}{1-\bar\alpha_{t-1}}\frac{{\beta_t(1-\bar\alpha_{t-1})}}{1-\bar{\alpha}_{t}}x_0 \\
&= \frac{\sqrt{\alpha_t}{(1-\bar\alpha_{t-1})}}{1-\bar{\alpha}_{t}}x_t+\frac{\beta_t\sqrt{\bar\alpha_{t-1}}}{\cancel{\beta_t(1-\bar\alpha_{t-1})}}\frac{\cancel{{\beta_t(1-\bar\alpha_{t-1})}}}{1-\bar{\alpha}_{t}}x_0 \\
&= \frac{\sqrt{\alpha_t}{(1-\bar\alpha_{t-1})}}{1-\bar{\alpha}_{t}}x_t+\frac{\beta_t\sqrt{\bar\alpha_{t-1}}}{1-\bar{\alpha}_{t}}x_0
\end{aligned}
\tag{Eq.12}
\]
Eq.12和附件中公式(7)的结果也一致,至此我们完成了逆向过程的推导过程说明。
这里有一点额外的说明,Eq.12中计算逆向过程的均值\(\mu\)中出现了\(x_t\)是一个人为定义的高斯噪声,没有问题。但是对于其中的\(x_0\),训练过程中我们包含原图作为条件没有问题,但是推理过程中或者说是AIGC文生图过程中的\(x_0\)又改如何改变。我们回到已知的Eq.2中,我们可以知道
\[x_t=\sqrt{\bar\alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon_t
\]
则\(x_0\)就为以下等式:
\[x_0= \frac{x_t-\sqrt{1-\bar\alpha_t}\epsilon_t}{\sqrt{\bar\alpha_t}}
\]
我们可以观察到\(x_0\)和噪声\(\epsilon_t\)有关,所以在推理的时候,我们并不需要知道原图\(x_0\)就可以进行推理。并且进一步来讲,我们训练的时候的并不是对\(x_0\)做损失,而是对\(\epsilon\)使用损失函数,因为两者是相互有关联的。无论训练还是推理过程,都是让\(\epsilon\)准确就可以正确预测\(x_0\)
综上我们得到了逆向过程的运算结果,其中\(\tilde \mu\)的结果在Eq.12, \(\tilde \beta_t\)的结果为Eq.10
\[q(x_{t-1}|x_t,x_0)=\mathcal N(x_{t-1};\tilde\mu_t, \tilde\beta_tI)
\]
和附件中的公式(6),(7)结果一致
附件(原文background)
![]()