Mathematical Principle of DDPM

DDPM数学推导

前向过程和反向过程

约定$x_0$为原始输入干净图片,$x_T$为经过T步加噪声得到的纯噪声图,前向过程希望向原始图片中加入噪声,反向过程尝试通过UNet预测每一步加入的噪声并将其从图片中去除之

前向过程$x_{t-1}\to x_t$

借助一个无参数的条件概率$q(x_{t}|x_{t-1})$生成加噪后的图像

采样随机噪声$\epsilon_t|\mathcal N(0,I)$加入到原始图片中

系数满足$a_t^2 + b_t^2 = 1$,进一步拆分$x_{t-1}$,得到

RHS第二项到最后一项为多个高斯分布的加权和,对应也是高斯分布,方差为系数平方和,所有系数的平方和满足

这样加噪过程记作

令$a_t = \sqrt {\alpha_t}$,则一步加噪写成

显然,前向过程的条件分布写成

是一个正态分布

逆向过程$x_T\to x_0$

借助一个有参数的模型$p_\theta(x_{t-1}|x_t)$进行去噪

前向过程得到的多层加噪$x_1,x_2,\cdots,x_T$相当于编码,逆向过程对其进行解码,这里我们希望估计真实图片$x_0$的概率$p_\theta(x_0)$并采取maximize likelihood的方式学习参数,将其视为一个马尔可夫过程,则概率估算为

引入latent variable在输入$x_0$下的联合后验分布$q(x_{1:T}|x_0)$,则上述概率写成

写成log形式,根据$E_{p(x)}[\log f(x)]\leq \log E[f(x)]$,有

注意到$q(x_{1:T}|x_0)$和$p_\theta(x_{0:T})$实际上可以拆分为T步生成,写成

于是有

分子分母拆分出第一项

对于RHS第一项,考虑分别优化

  1. $\frac{p(x_T)}{q(x_T|x_{T-1})}$
  2. $p_\theta(x_0|x_1)$

写成

进一步将(13)中的第二项拆分为$E_{q(x_{T-1}|x_0) q(x_T|x_{T-1})}$,最终优化目标包含三项

  1. $E_{q(x_1|x_0)}[\log p_\theta(x_0|x_1)]$,希望从加噪的$x_1$中重建$x_0$
  2. $E_{q(x_{T-1}|x_0)}E_{ q(x_T|x_{T-1})}[\log \frac{p(x_T)}{q(x_T|x_{T-1})}] =- E_{q(x_{T-1}|x_0)}[D_{KL}(q(x_T|x_{T-1})\parallel p(x_T))]$,希望通过T步扩散得到的结果和先验概率(纯噪声高斯分布)尽量接近
  3. 和2类似$-\sum_{t=1}^{T-1} E_{q(x_{t-1},x_{t+1}|x_0)}[D_{KL}(q(x_t|x_{t-1})\parallel p_\theta(x_t|x_{t+1}))]$

因为前向过程满足马尔可夫性,因此有

并且

拆分

得到

进一步拆分为

  1. $E_{q(x_1|x_0)}[\log p_\theta(x_0|x_1)]$,对应最后一步逆扩散的重建损失
  2. $E_{q(x_{1:T}|x_0)}[\frac{p(x_T)}{q(x_T|x_0)}] = -D_{KL}(q(x_T|x_0)\parallel p(x_T))$,最终扩散出的图片应该完全是噪声
  3. $E_{q(x_t,x_{t-1}|x_0)}[\log \frac{p_\theta(x_{t-1}|x_t)}{q(x_{t-1}|x_t,x_0)}] = E_{q(x_{t-1}|x_t)}E_{q(x_{t}|x_0)}[\log \frac{p_\theta(x_{t-1}|x_r)}{q(x_{t-1}|x_t,x_0)} ]$,这里用$p_\theta(x_{t-1}|x_t)$建模$q(x_{t-1}|x_{t})$,得到

训练

第一项用重建损失代替,第二项和$\theta$无关,关注第三项如何计算$q(x_{t-1}|x_t,x_0)$和$p_\theta(x_{t-1}|x_t)$之间的KL散度,这两个概率写成

  1. 利用前向过程建模$q(x_{t-1}|x_t,x_0)$,写成(已知加噪马氏链上游和下游值,推断中间值)

对应三个前向过程

  • $x_{t-1}\to x_t,x_{t} = \sqrt {\alpha_t} x_{t-1} + \sqrt{1-\alpha_t}\epsilon_t,q(x_{t}|x_{t-1},x_0) = \mathcal N(\sqrt{\alpha_t} x_{t-1},(1-\alpha_t)I)$
  • $x_0\to x_{t-1},x_{t-1} = \sqrt{\overline \alpha_{t-1}} x_0 + \sqrt{1- \overline\alpha_{t-1}}\epsilon,q(x_{t-1}|x_0) =\mathcal N(\sqrt{\overline{\alpha}_{t-1}}x_{0},(1-\overline{\alpha}_{t-1})I)$
  • $x_0\to x_t$同理,$q(x_t|x_0) = \mathcal N(\sqrt{\alpha}_t x_0,(1-\overline \alpha_t)I)$

得到$q(x_{t-1}|x_t,x_0)$实际上也是一个高斯分布,均值和方差记作$\mu_q(x_t,x_0),\sum_q(t)I$

  1. 利用后向过程建模单步去噪$p_\theta(x_{t-1}|x_{t})$,对应一个参数化的高斯分布$\mathcal N(\mu_\theta,\sum_\theta)$

优化两个概率分布之间的距离写成

$\mu_q$是$x_0$和$x_t$的函数

在扩散过程中,真值根据纯噪声$x_t$经过t步逆扩散得到,将其视为一个参数为$\theta$的神经网络,记作

因此KL散度写成

$\mu_q$的另一种形式为

第二项对应的是噪声,因此得到

逆扩散实际上学习到的是t step加入的噪声

本站访客数人次