Diffusion Models in VAE view#
x:数据,z:隐空间变量
对于 VAE ,我们想要学习一个 pθ(x∣z) 作为一个 decoder 生成图像。但是为了优化这个神经网络,我们需要计算 pθ(x) ,但是积分不可行;使用贝叶斯公式又需要得到 pθ(z∣x) 。于是引入了 qϕ(z∣x) 作为一个可学习的神经网络来逼近 pθ(z∣x) ,以及使用了 ELBO 作为损失函数进行优化

VAE 的隐空间是一个简单的高斯分布,很难完全描述图像信息,因此生成的图像比较模糊。Diffusion Model 的思路就是多做几层隐空间
我们先来看一个简单的两层的:z1,z2
p(x)=∫z1∫z2p(x,z1,z2)dz1dz2
这个 p(x,z1,z2) 是一个联合分布,在这里我们假设它具有马尔可夫性

我们就可以一步一步去 sample z
实际上 Diffusion Model 的这个链条很长,我们设一共有 T 层 latent varible,分别从 x1 到 xT

从 x0 到 xT 被称为加噪过程,这个过程中用到的分布 q(xt∣xt−1) 不需要被学习,而是确定为 N(xT;xt−11−βt,βtI);βt 是超参
至于为什么要这么设计,看下面的图:

相当于不用一步一步从 x0 走到 xT,可以直接计算 q(xt∣x0)
βt 的设计思想:让αˉT→0,这样 q(xT∣x0)≈N(xT;0,I)
从 xT 到 x0 被称为去噪过程,如果直接进行去噪,需要得到q(xt−1∣xt),一般很难。因此引入和 VAE 相同的 trick,用神经网络来逼近 q(xt−1∣xt)

其中 p(xT) 是先验,我们设为N(xT;0,I);每一次去噪步骤的条件概率我们设为 pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),σt2I),其中μ是一个神经网络,σ2 其实不需要学习,具体原因后面会提到
Loss#
有了这些之后就可以估计损失函数,使用和 VAE 类似的方式:


经过一堆数学推导得到:
LELBO=Ep[logpθ(x0∣x1)−t=2∑TDKL(q(xt−1∣xt,x0)∣∣pθ(xt−1∣xt))−DKL(q(xT∣x0)∣∣p(xT))]
第一项和第三项都好计算,主要看第二项:
对于真正的后验概率 q(xt−1∣xt,x0),由贝叶斯定理可以计算:
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)⋅q(xt−1∣x0)=q(xt∣x0)q(xt∣xt−1)⋅q(xt−1∣x0)∝q(xt∣xt−1)⋅q(xt−1∣x0)
- 第一行由贝叶斯公式
- 第二行由于马尔可夫性,只和最近的有关
- 第三行扔掉分母,因为分母是定值(变量为xt−1)
这两个都是先验概率,可以由我们上面的加噪公式确定,因此 q(xt−1∣xt,x0) 也是高斯,均值和方差可以由 q(xt∣xt−1),q(xt−1∣x0) 这两者求出
求得
q(xt−1∣xt,x0)β~tμ~t(xt,x0)=N(xt−1;μ~t(xt,x0),β~tI)=1−αˉt1−αˉt−1βt=1−αˉtαt−1βtx0+1−αˉtαt(1−αˉt−1)xt
这里面 β~t 是个定值,因此就不用计算 σ2 了。所以我们的目的变成了使得μ~t(xt,x0)≈μθ(xt,t)
接下来进一步化简:
我们从加噪过程知道:
xt=αˉtx0+1−αˉtϵ
从中反解出x0:
x0=αˉtxt−1−αˉtϵ
然后把 x0 带入 μ~t,合并计算后得到
μ~t=αt1(xt−1−αˉtβtϵ)
回顾我们最开始的目标:让神经网络的预测均值 μθ 去逼近这个完美均值 μ~t
我们让模型去预测 μθ,写成同样的结构:
μθ(xt,t)=αt1(xt−1−αˉtβtϵθ(xt,t))
等式两边只有 ϵ 不同。所以,让 μθ 等于 μ~t,等价于让 ϵθ(xt,t) 等于当初加进去的那个噪声 ϵ
因为这种等价关系,DDPM的训练目标就从让模型预测一个复杂的均值,变成了让模型预测出来的噪声,等于我们当初加进去的那个随机噪声
最终的损失函数就变为:
L=Et,x0,ϵ[∥ϵ−ϵθ(xt,t)∥2]
Diffusion Models in flow_matching#
从flow matching的角度看扩散模型
从一张清晰的图片到一个噪声是一个不断将噪声加进去的过程,因此我们要学习一个模型,每一步去移出一点noise(每次直接减一个noise)

有两个空间:噪声空间和数据空间。z来自噪声空间,x来自数据空间
xt是一个两个空间之间的线性插值,v是从数据到噪声的向量(就是干净图片到噪声之间的差距)
对于给定的 xt 和 t ,模型要正确预测 v,训练的过程很直接.
对于Sample,模型不会一步预测出结果

而是每次只沿着 v 走一点,一步一步生成
Conditional Flow Matching#

在普通 flow matching 上加一个 y 和一个 label,其他不变。预测的时候带上 y