Diffusion 扩散模型 DDPM 理解
一、概述
Diffusion是一个类似多层VAE架构的模型,通过输入一个具体的样本 x ,通过不断增加噪音使整个样本最终达到一个已知的状态,然后再通过前向过程确定的真实后验学习,最终学习到一个近似的pθ(xt−1∣xt)
二、详细分析
=====第一部分:噪声处理−马尔可夫链=====

如图所示,我们人为定义一个加噪过程:
xt=αtxt−1+1−αtϵt,其中ϵt∼N(0,I)
这个式子改写为下面的形式:
xt∼N(αtxt−1,(1−αt)I) ,其中前一部分是均值,后一部分是方差(协方差矩阵);
即
p(xt∣xt−1)=N(αtxt−1,(1−αt)I)
由马尔科夫链,每一个xt只和上一个时间的xt−1状态有关,则我们可以将上述式子推广到:
xt=αtxt−1+1−αtϵt
xt−1=αt−1xt−2+1−αt−1ϵt−1
...
x1=α1x0+1−α1ϵ1
依次带入上述式子,可以经过化简后得到
xt=αtˉx0+1−αtˉϵ′ ,注意此处是合成后的ϵ′∼N(0,I)
与下面三个式子等价
x0=αtˉ1(xt−1−αtˉϵ′)
xt∼N(αˉtx0,(1−αˉt)I)
p(xt∣x0)=N(αˉtx0,(1−αˉt)I)
=====第二部分:学习真实后验分布=====
我们希望模型学习到逆向过程的条件分布 pθ(xt−1∣xt),用前向过程的真实后验 q(xt−1∣xt,x0) 作为指导(训练时近似:q(xt−1∣xt,x0)≈pθ(xt−1∣xt)。对 q 进行贝叶斯展开:
把x0看作先验条件,由 p(A∣B)=p(B)p(B∣A)p(A),得到:
q(xt−1∣xt,x0)=p(xt∣x0)p(xt∣xt−1,x0)p(xt−1∣x0)
由于马尔可夫链的性质,我们可以把等式右边第一项中的 x0 消掉,得到:
q(xt−1∣xt,x0)=p(xt∣x0)p(xt∣xt−1)p(xt−1∣x0)
接下来计算这三个值:由第一部分,三个概率分布均已知
p(xt∣xt−1)=N(αtxt−1,(1−αt)I)
p(xt−1∣x0)=N(αˉt−1x0,(1−αˉt−1)I)
p(xt∣x0)=N(αˉtx0,(1−αˉt)I)
将上面三个式子全部改写为单变量正态分布函数:
ρ(x)=2πσ21e−2σ2(x−μ)2(注:指数为负)
经过化简(高斯乘积/除法),原式正比于 eaxt−12+bxt−1+c 形式,配方后得到一个高斯分布:均值与 x0,xt 有关,方差是个超参数(常量,只和 αi 有关)。
经过计算得到:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI)
其中均值:
μ~t(xt,x0)=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xt
方差:
β~t=1−αˉt(1−αˉt−1)βt,βt=1−αt
这个 q 就是训练时用于指导 pθ 学习的近似函数(通过 KL 最小化,简化为噪声预测损失)。