原始的扩散模型里面变量繁多,需要稍微记录一下整个过程中出现的公式、变量等,方便对照代码理解。
一些资料:
【Diffusion模型】由浅入深了解Diffusion,不仅仅是震撼,感受它带给我们的无限可能!!(超详细的保姆级入门教程)_哔哩哔哩_bilibili
What are Diffusion Models?
前向过程
主要计算:
xt=αtxt−1+1−αtz1
其中,
αt=1−βt
βt∈(0.0001,0.002)进行均匀采样,递增,αt显然呈递减: 即图像的比重越来越小,噪声比重越来愈大
推广一下,任意的 xt 从 x0 的计算过程为:
xt=αtˉx0+1−αtˉzt
其中,αˉt=∏i=1tαi, zt 为t时刻采样的高斯噪声
以上从概率论的视角看[暂时不用理会]:
逆向过程
根据xt求解xt−1:
主目标
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)
q(xt−1∣xt)=q(xt∣xt−1,x0)q(xt∣x0)q(xt−1∣x0)
简化,此目标正比于:
∝exp(−21((βtαt+1−αˉt−11)xt−12−(βt2αtxt+1−αˉt−12αˉt−1x0)xt−1+C(xt,x0)))
与标准的高斯分布进行对比:
2πσ1exp(−2σ2(x−μ)2)∝exp(−21(σ21x2−σ22μx+σ2μ2))
看出方差出现在平方之前即红色部分,均值则在蓝色部分出现,可以对均值进行一次计算,约分得到:
μ~t=αt1(xt−1−αˉt1−αtzt)
此时得到均值和方差,然后训练过程就是用神经网络估计这边的噪声zt.
以后就是关键公式了。
β~t=1−αˉt1−αˉt−1⋅βtμ~t(xt,x0)=(βtαtxt+1−αˉt−1αˉt−1x0)/(βtαt+1−αˉt−11)=(βtαtxt+1−αˉt−1αˉt−1x0)1−αˉt1−αˉt−1⋅βt=1−αˉtαt(1−αˉt−1)xt+1−αˉtαˉt−1βtx0
小名同学推荐 B 站李宏毅课程,以后有机会也学习学习
扩散模型 - Diffusion Model【李宏毅2023】