Diffusion 扩散模型 DDPM 理解

一、概述

Diffusion是一个类似多层VAE架构的模型,通过输入一个具体的样本 xx ,通过不断增加噪音使整个样本最终达到一个已知的状态,然后再通过前向过程确定的真实后验学习,最终学习到一个近似的pθ(xt1xt)p_\theta(x_{t-1}| x_t)

二、详细分析

=====第一部分:噪声处理马尔可夫链========== 第一部分:噪声处理-马尔可夫链 =====

alt text
如图所示,我们人为定义一个加噪过程
xt=αtxt1+1αtϵt,其中ϵtN(0,I)x_t = \sqrt{\alpha_t} x_{t - 1} + \sqrt{1 - {\alpha}_t} \epsilon_t ,其中\epsilon_t \sim \mathcal N(0, I)

这个式子改写为下面的形式:
xtN(αtxt1,(1αt)I)x_t \sim \mathcal N(\sqrt{\alpha_t} x_{t - 1}, (1 - {\alpha}_t) I) ,其中前一部分是均值,后一部分是方差(协方差矩阵);

p(xtxt1)=N(αtxt1,(1αt)I)p(x_t|x_{t-1}) = \mathcal N(\sqrt{\alpha_t} x_{t - 1}, (1 - {\alpha}_t) I)

由马尔科夫链,每一个xtx_t只和上一个时间的xt1x_{t-1}状态有关,则我们可以将上述式子推广到:
xt=αtxt1+1αtϵtx_t = \sqrt{\alpha_t} x_{t - 1} + \sqrt{1 - {\alpha}_t} \epsilon_t
xt1=αt1xt2+1αt1ϵt1x_{t-1} = \sqrt{\alpha_{t-1}} x_{t - 2} + \sqrt{1 - {\alpha}_{t-1}} \epsilon_{t-1}
......
x1=α1x0+1α1ϵ1x_1 = \sqrt{\alpha_1} x_{0} + \sqrt{1 - {\alpha}_1} \epsilon_1

依次带入上述式子,可以经过化简后得到

xt=αtˉx0+1αtˉϵx_t = \sqrt{\bar{\alpha_t}} x_{0} + \sqrt{1 - \bar{{\alpha}_t}} \epsilon' ,注意此处是合成后的ϵN(0,I)\epsilon' \sim \mathcal{N}(0, I)

与下面三个式子等价
x0=1αtˉ(xt1αtˉϵ)x_0 = \frac{1}{\sqrt{\bar{\alpha_t}}}(x_t - \sqrt{1 - \bar{{\alpha}_t}} \epsilon')

xtN(αˉtx0,(1αˉt)I)x_t \sim \mathcal N(\sqrt{\bar\alpha_t} x_0, (1 - {\bar\alpha}_t) I)

p(xtx0)=N(αˉtx0,(1αˉt)I)p(x_t|x_{0}) = \mathcal N(\sqrt{\bar\alpha_t} x_0, (1 - {\bar\alpha}_t) I)

=====第二部分:学习真实后验分布========== 第二部分:学习真实后验分布 =====

我们希望模型学习到逆向过程的条件分布 pθ(xt1xt)p_\theta(x_{t-1} | x_t),用前向过程的真实后验 q(xt1xt,x0)q(x_{t-1} | x_t, x_0) 作为指导(训练时近似:q(xt1xt,x0)pθ(xt1xt)q(x_{t-1} | x_t, x_0) \approx p_\theta(x_{t-1} | x_t)。对 qq 进行贝叶斯展开:

x0x_0看作先验条件,由 p(AB)=p(BA)p(A)p(B)p(A|B) = \frac{p(B|A) p(A)}{p(B)},得到:

q(xt1xt,x0)=p(xtxt1,x0)p(xt1x0)p(xtx0)q(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)}

由于马尔可夫链的性质,我们可以把等式右边第一项中的 x0x_0 消掉,得到:
q(xt1xt,x0)=p(xtxt1)p(xt1x0)p(xtx0)q(x_{t-1} | x_t, x_0) = \frac{p(x_t | x_{t-1}) p(x_{t-1} | x_0)}{p(x_t | x_0)}

接下来计算这三个值:由第一部分,三个概率分布均已知
p(xtxt1)=N(αtxt1,(1αt)I)p(x_t | x_{t-1}) = \mathcal N(\sqrt{\alpha_t} x_{t - 1}, (1 - {\alpha}_t) I)
p(xt1x0)=N(αˉt1x0,(1αˉt1)I)p(x_{t-1} | x_{0}) = \mathcal N(\sqrt{\bar\alpha_{t-1}} x_0, (1 - {\bar\alpha}_{t-1}) I)
p(xtx0)=N(αˉtx0,(1αˉt)I)p(x_t | x_{0}) = \mathcal N(\sqrt{\bar\alpha_t} x_0, (1 - {\bar\alpha}_t) I)

将上面三个式子全部改写为单变量正态分布函数:
ρ(x)=12πσ2e(xμ)22σ2\rho(x) = \frac{1}{\sqrt{2\pi \sigma^2}} e^{-\frac{(x - \mu)^2}{2 \sigma^2}}(注:指数为负)

经过化简(高斯乘积/除法),原式正比于 eaxt12+bxt1+ce^{a x_{t-1}^2 + b x_{t-1} + c} 形式,配方后得到一个高斯分布:均值与 x0,xtx_0, x_t 有关,方差是个超参数(常量,只和 αi\alpha_i 有关)。

经过计算得到:
q(xt1xt,x0)=N(xt1;μ~t(xt,x0),β~tI)q(x_{t-1} | x_t, x_0) = \mathcal{N}\left( x_{t-1}; \tilde{\mu}_t(x_t, x_0), \tilde{\beta}_t I \right)
其中均值:
μ~t(xt,x0)=αˉt1βt1αˉtx0+αt(1αˉt1)1αˉtxt\tilde{\mu}_t(x_t, x_0) = \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} x_0 + \frac{\sqrt{\alpha_t} (1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} x_t
方差:
β~t=(1αˉt1)βt1αˉt,βt=1αt\tilde{\beta}_t = \frac{(1 - \bar{\alpha}_{t-1}) \beta_t}{1 - \bar{\alpha}_t}, \quad \beta_t = 1 - \alpha_t
这个 qq 就是训练时用于指导 pθp_θ 学习的近似函数(通过 KL 最小化,简化为噪声预测损失)。