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第一项,考虑分别优化
- $\frac{p(x_T)}{q(x_T|x_{T-1})}$
- $p_\theta(x_0|x_1)$
写成
进一步将(13)中的第二项拆分为$E_{q(x_{T-1}|x_0) q(x_T|x_{T-1})}$,最终优化目标包含三项
- $E_{q(x_1|x_0)}[\log p_\theta(x_0|x_1)]$,希望从加噪的$x_1$中重建$x_0$
- $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步扩散得到的结果和先验概率(纯噪声高斯分布)尽量接近
- 和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}))]$
因为前向过程满足马尔可夫性,因此有
并且
拆分
得到
进一步拆分为
- $E_{q(x_1|x_0)}[\log p_\theta(x_0|x_1)]$,对应最后一步逆扩散的重建损失
- $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))$,最终扩散出的图片应该完全是噪声
- $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散度,这两个概率写成
- 利用前向过程建模$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$
- 利用后向过程建模单步去噪$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加入的噪声