高能预警:这篇文章难度很大,包含很多的数学推导,如果不想接触太多的数学内容,那么可以跳过不看。
看这篇文章之前,你需要了解:什么是马尔科夫链,什么是极大似然估计,什么是KL散度,两个正态分布的KL散度,什么是贝叶斯公式
以下内容参考了主要参考了博客What are Diffusion Models? 以及李宏毅老师的课程
1. 马尔科夫链与pθ(x)
本节推导得出的结论:
- q(x1:T∣x0)=∏Tt=1q(xt∣xt−1),p(x0:T)=p(xT)∏Tt=1pθ(xt−1|xt)
- pθ(x0:T)=p(xT)∏Tt=1pθ(xt−1|xt)
在扩散模型中,为了方便计算,我们假设前向过程中的图片x0,x1,⋯xT构成一个马尔科夫链,并将前向过程中图片x的概率分布记作q(x)
因此,我们有
q(x1:T∣x0)=T∏t=1q(xt∣xt−1)
同时,我们令pθ(x)表示:在反向过程中,模型生成图片x的概率。
因此,在对扩散模型使用极大似然估计时,样本是没有噪音的图片x0,似然函数pθ(x0)表示模型最终生成x0的概率。自然的,极大似然估计的目标是找到使得pθ(x0)最大的模型。
注意到在反向过程中,xT是噪音图片,直接采样自标准正态分布,并不需要通过模型生成,pθ(xT)和模型选取无关,因此可以记作p(xT)。
由于x0,x1,⋯xT构成一个马尔科夫链,因此
pθ(x0:T)=p(xT)T∏t=1pθ(xt−1|xt)
2. 极大似然估计
本节推导得出的结论:min−logpθ(x0)等价于minLT+LT−1+⋯+L0,其中
LT=DKL(q(xT∣x0)∥pθ(xT))Lt−1=DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt)) for 2≤t≤TL0=−logpθ(x0∣x1)
上文中,我们说到,极大似然估计的目标是maxpθ(x0),为了方便起见,可以将目标转换为min−logpθ(x0)。
我们对−logpθ(x0)进行一些变形,得到
−logpθ(x0)≤−logpθ(x0)+DKL(q(x1:T∣x0)∥pθ(x1:T∣x0))=−logpθ(x0)+Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)+logpθ(x0)]=Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]
即
−logpθ(x0)≤Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)](1)
其中,DKL(q||pθ)表示分布q和分布pθ的KL散度;期望Eq(x1:T∣x0)(f)=∫q(x1:T∣x0)×f dx1:T 。
下面,我们对公式(1)左右两侧同时取期望
∫−logp(x0)⋅q(x0)dx0≤∫Eq(x1:T∣x0)[logq(x1:T∣x0)pθ(x0:T)]⋅q(x0)dx0−Eq(x0)logpθ(x0)≤∬[logq(x1:T∣x0)pθ(x0:T)]⋅q(x1:T∣x0)⋅q(x0)dx1:Tdx0=∫[logq(x1:T∣x0)pθ(x0:T)]q(x0:T)dx0:T=Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]
即
−Eq(x0)logpθ(x0)≤Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)](2)
为了方便表示,我们将−Eq(x0)logpθ(x0)记作LCE,将Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]记作LVLB。
min−logpθ(x0)等价于minLCE。而只要minLVLB,就会minLCE。
因此,min−logp(x0)的问题就转换为了minLVLB的问题。
下面对LVLB进行变形
LVLB=Eq(x0:T)[logq(x1:T∣x0)pθ(x0:T)]=Eq[log∏Tt=1q(xt∣xt−1)p(xT)∏Tt=1pθ(xt−1∣xt)]=Eq[−logpθ(xT)+T∑t=1logq(xt∣xt−1)pθ(xt−1∣xt)]=Eq[−logp(xT)+T∑t=2logq(xt∣xt−1)pθ(xt−1∣xt)+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logp(xT)+T∑t=2log(q(xt−1∣xt,x0)pθ(xt−1∣xt)⋅q(xt∣x0)q(xt−1∣x0))+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logp(xT)+T∑t=2logq(xt−1∣xt,x0)pθ(xt−1∣xt)+T∑t=2logq(xt∣x0)q(xt−1∣x0)+logq(x1∣x0)pθ(x0∣x1)]=Eq[−logp(xT)+T∑t=2logq(xt−1∣xt,x0)pθ(xt−1∣xt)+logq(xT∣x0)q(x1∣x0)+logq(x1∣x0)pθ(x0∣x1)]=Eq[logq(xT∣x0)p(xT)+T∑t=2logq(xt−1∣xt,x0)pθ(xt−1∣xt)−logpθ(x0∣x1)]=Eq⎡⎢
⎢⎣DKL(q(xT∣x0)∥p(xT))LT+T∑t=2DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))Lt−1−logpθ(x0∣x1)L0⎤⎥
⎥⎦
对于一个期望来说,如果我们使它的每一项都最小化,那么期望的值也会最小化,因此有
minLVLB→minLT+LT−1+⋯+L0(3)
其中
LT=DKL(q(xT∣x0)∥p(xT))Lt−1=DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt)) for 2≤t≤TL0=−logpθ(x0∣x1)
注意到,对于LT而言,其中q(xT∣x0)和p(xT)的取值均与参数θ无关,因此LT可以看成常数,我们只需要最小化Lt和L0即可。
又因为minDKL(q(x0|x1,x0)||pθ(x0|x1))→minDKL(1||pθ(x0|x1))→min−logpθ(x0∣x1),因此,可以将L0转换为Lt−1的形式,那么只需要最小化Lt−1即可。
3. Lt−1中的q(xt−1∣xt,x0)
本节推导得出的结论:q(xt−1∣xt,x0)=N(xt−1;~μt,~βtI),其中~μt=1√αt(xt−1−αt√1−¯αtϵ),~βt=1−¯αt−11−¯αt⋅βt
使用贝叶斯公式,我们可以将q(xt−1∣xt,x0)转换为
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)
又因为x0,x1,⋯xT构成一个马尔科夫链,因此q(xt∣xt−1,x0)=q(xt∣xt−1)
我们在上篇文章的末尾提到过,在前向过程中,概率q(xt∣xt−1)=N(xt;√1−βtxt−1,βtI),q(xt∣x0)=N(xt;√¯αtx0,(1−¯αt)I)。
于是有
q(xt−1∣xt,x0)=q(xt∣xt−1,x0)q(xt−1∣x0)q(xt∣x0)∝exp⎛⎝−12⎛⎝(xt−√αtxt−1)2βt+(xt−1−√¯αt−1x0)21−¯αt−1−(xt−√αtx0)21−¯αt⎞⎠⎞⎠=exp⎛⎝−12⎛⎝x2t−2√αtxtxt−1+αtx2t−1βt+x2t−1−2√¯αt−1x0xt−1+¯αt−1x201−¯αt−1−(xt−√¯αtx0)21−¯αt⎞⎠⎞⎠=exp(−12((αtβt+11−¯αt−1)x2t−1−(2√αtβtxt+2√¯αt−11−¯αt−1x0)xt−1+C(xt,x0)))
其中 C(xt,x0) 是不含 xt−1 的常数,因此可以被忽略。
根据正态分布的概率公式,我们可以得到
注意 αt=1−βt , ¯αt=∏ti=1αi
~βt=1/(αtβt+11−¯αt−1)=1/(αt−¯αt+βtβt(1−¯αt−1))=1−¯αt−11−¯αt⋅βt
~μt=(√αtβtxt+√αt−11−¯αt−1x0)/(αtβt+11−¯αt−1)=(√αtβtxt+√¯αt−11−¯αt−1x0)1−¯αt−11−¯αt⋅βt=√αt(1−¯αt−1)1−¯αtxt+√¯αt−1βt1−¯αtx0
在上一篇文章中,我们得到xt=√¯αtx0+√1−¯αtϵ,因此有
x0=1√¯αt(xt−√1−¯αtϵ)
其中ϵ表示从x0到xt添加的噪音之和。
我们将~μt表达式中的x0进行替换,可以得到
~μt=√αt(1−¯αt−1)1−¯αtxt+√¯αt−1βt1−¯αt1√¯αt(xt−√1−¯αtϵ)=1√α(xt−1−αt√1−¯αtϵ)
因此,我们有
q(xt−1∣xt,x0)=N(xt−1;1√αt(xt−1−αt√1−¯αtϵ),1−¯αt−11−¯αt⋅βtI)(4)
4. 最小化Lt−1
本节推导得出的结论:最小化Lt−1等价于最小化∥ϵ−ϵθ(xt,t)∥2。
其中,ϵ表示从x0到xt添加的噪音之和,ϵθ表示预测噪音的模型,模型有两个输入:t时刻的图片xt以及时刻t
在上一小节,我们推出:q(xt−1∣xt,x0)符合正态分布。又由于x0,x1,⋯xT构成一个马尔科夫链,因此q(xt−1∣xt,x0)=q(xt−1∣xt),也就是说q(xt−1∣xt)符合正态分布。
我们的目的是让反向过程尽可能和正向过程一致。因此我们可以合理假设,在反向过程中,pθ(xt−1∣xt)也符合正态分布,并且和q(xt−1∣xt,x0)的分布近似。
设pθ(xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)),因为~σ2t为常数,因此我们直接令Σθ(xt,t)=~σ2t。同时,我们还要尽可能的令μθ(xt,t)接近~μt。
注意到,~μt里面唯一一个,在反向过程中不知道的量就是从x0到xt添加的噪音之和 ϵ,因此我们可以训练一个模型来预测ϵ。
这个模型就是我们在第一篇文章中提到的Noise Predicter
,我们将Noise Predicter
记作ϵθ,它有两个输入:t时刻的图片xt以及时刻t。模型的预测值记作ϵθ(xt,t)
因此,
μθ(xt,t)=1√αt(xt−1−αt√1−¯αtϵθ(xt,t))
对于KL散度,我们有以下性质:
若有两个正态分布P ,Q,均值分别为μ1,μ2;方差分别为σ21,σ22,且σ21,σ22都为常数,那么
minDKL(P||Q)→min||μ1−μ2||2
因此,
minLt−1→min||~μt−μθ(xt,t)||2→min∥ϵ−ϵθ(xt,t)∥2(5)
5. 总结
至此,我们完成了使用极大似然估计来推导损失函数的过程。
我们得到的结论是
min−logpθ(x0)等价于minLT+LT−1+⋯+L0,其中
LT=DKL(q(xT∣x0)∥p(xT))Lt−1=DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt)) for 2≤t≤TL0=−logpθ(x0∣x1)
其中LT可以看作常数,L0可以转换为Lt−1的形式,而最小化Lt−1又相当于最小化∥ϵ−ϵθ(xt,t)∥2。
也就是说,我们的目标是
T∑t=1[∥ϵ−ϵθ(xt,t)∥2]
因此我们知道:扩散模型的损失函数就是均方误差损失。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?