《Understanding Diffusion Models: A Unified Perspective》阅读笔记1
原文链接
Pre1:条件独立与马尔科夫性
P(AB∣C)=P(A∣C)P(B∣C)⇒P(B∣AC)=P(B∣C)
- C:事件表示现在;
- A: 事件表示过去;
- B: 事件表示未来;
这样在条件独立的前提下,P(B∣AC)=P(B∣C)未来发生的概率只有现在有关,而与过去无关;
未来和过去并非绝对独立,但是当有现在作为条件时,未来与过去则无关系
条件独立无法得到绝对独立,绝对独立也无法得到条件独立!
Pre2:KL散度与高斯KL散度的表示
KL散度的定义,也是相对熵,可以表示为交叉熵(用Q去拟合P所需要的字节数)减去Q自己的熵值(最小编码数量)
KL(P∣∣Q)=∫p(x)logq(x)p(x)dx
KL(P∣∣Q)=∫p(x)logq(x)p(x)dx=−∫p(x)log(q(x))dx+∫p(x)log(p(x))dx=H(P,Q)−H(P)
两个高斯分布的KL散度计算公式:
DKL(N(x;μx,Σx)∥N(y;μy,Σy))=21[log∣Σx∣∣Σy∣−d+tr(Σy−1Σx)+(μy−μx)TΣy−1(μy−μx)]
其中d为随机变量x和y的维度。
特威迪公式指出, 指数族分布 的真值可以用样本的最大似然估计值(又称理论平均值)加上一定的修正最小值来估计。
例如,当只有一个样本的时候,经验均值会是其自己。评分函数会修正朴素最大似然的估计值朝向真正的均值移动(对最大似然估计方法的一种修正)。
当$$z\sim\mathcal{N}(z;\boldsymbol{\mu}_z,\boldsymbol{\Sigma}_z)$$时,特威迪公式可以表示为:
E[μz∣z]=z+Σz∇zlogp(z)
Pre4:两个独立的高斯分布相加
XY∼N(μ1,σ12)∼N(μ2,σ22)
当Z=X+Y :
Z∼N(μ1+μ2,σ12+σ22)
扩散模型
主要流程:
- 层级VAE模型(引入变分后验,参数ϕ,重要性采样)
- 引入ELBO(这里等于对数似然),优化
- 假设从样本到隐变量的过程均为高斯分布
- 类似的推导得到,重建项、先验匹配项、一致性项
- 通过条件独立,推导仅需要在一个变量上做采样估计期望的形式(重建项、先验匹配项、去噪匹配项)
- 通过贝叶斯公式计算去噪匹配项中真实的似然(xt的重参数化技巧)
- 优化去噪匹配项中的KL散度等价于优化从xt到x0的预测
- 第二种等价的解释:上式中的μ转而参数化ϵ
- 第三种等价的解释:通过Tweedie公式将μ转而去参数化分数函数
- 条件生成:条件注入、Classifier Guidance 和 Classifier-Free Guidance
Note:
三种等价解释,是在KL散度优化中关于μq和μθ(主要流程中第五项的对数似然ELBO形式可参见)表示方法不同而导致的神经网络建模对象不同。但,使用的输入都是一样的xt和t$。
这三种分别为μθ使用xt预测x0,ϵ和分数函数。
层级VAE

四个主要限制(假设):
- 隐变量维度与数据维度相同
- 前向的编码器为线性高斯
- 在最终时间步T,隐变量为标准高斯分布
- 层级之间的马尔可夫性
首先,分层变分自编码器转换层级之间定义的马尔可夫性,而后验可以得到:
q(x1:T∣x0)=t=1∏Tq(xt∣xt−1)
前向的编码器(后验)被定义为:
q(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)
这样设计,使其可以保持方差:
xt=αtxt−1+1−αtϵt−1∗=αt(αt−1xt−2+1−αt−1ϵt−2∗)+1−αtϵt−1∗=αtαt−1xt−2+αt−αtαt−1ϵt−2∗+1−αtϵt−1∗=αtαt−1xt−2+αt−αtαt−12+1−αt2ϵt−2=αtαt−1xt−2+αt−αtαt−1+1−αtϵt−2=αtαt−1xt−2+1−αtαt−1ϵt−2=…=i=1∏tαix0+1−i=1∏tαiϵ0=αˉtx0+1−αˉtϵ0∼N(xt;αˉtx0,(1−αˉt)I)
无论如何设计α,为了达到隐变量最终为0均值高斯分布的目标。当t逐渐到T时,αˉt应当接近0。这样方差项就会接近为1。这样,保证了在整个过程中,每一步的方差都都不会大于1。
并且,最终隐变量将为标准高斯分布:
p(xT)=N(xT;0,I)
由于前向的编码过程(后验)是完全定义好的,因此相较于VAE,扩散模型只需要优化θ这一部分的参数。
logp(x0)=Ez∼q(x1…xT∣x0)[logp(x0)]=Ez∼q(x1…xT∣x0)[logp(x1…xT∣x0)p(x0…xT)]=Ez∼q(x1…xT∣x0)[logp(x1…xT∣x0)q(x1…xT∣x0)p(x0…xT)q(x1…xT∣x0)] =Ez∼q(x1…xT∣x0)[logq(x1…xT∣x0)p(x0…xT)]+Ez∼q(x1…xT∣x0)[logp(x1…xT∣x0)q(x1…xT∣x0)]=ELBO+DKL(q(x1…xT∣x0)∣∣p(x1…xT∣x0))≥Eq(x1:T∣x0)[logq(x1:T∣x0)p(x0:T)]=Eq(x1:T∣x0)[log∏t=1Tq(xt∣xt−1)p(xT)∏t=1Tpθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(xT∣xT−1)∏t=1T−1q(xt∣xt−1)p(xT)pθ(x0∣x1)∏t=2Tpθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(xT∣xT−1)∏t=1T−1q(xt∣xt−1)p(xT)pθ(x0∣x1)∏t=1T−1pθ(xt∣xt+1)]=Eq(x1:T∣x0)[logq(xT∣xT−1)p(xT)pθ(x0∣x1)]+Eq(x1:T∣x0)[logt=1∏T−1q(xt∣xt−1)pθ(xt∣xt+1)]=Eq(x1:T∣x0)[logpθ(x0∣x1)]+Eq(x1:T∣x0)[logq(xT∣xT−1)p(xT)]+Eq(x1:T∣x0)[t=1∑T−1logq(xt∣xt−1)pθ(xt∣xt+1)]=Eq(x1:T∣x0)[logpθ(x0∣x1)]+Eq(x1:T∣x0)[logq(xT∣xT−1)p(xT)]+t=1∑T−1Eq(x1:T∣x0)[logq(xt∣xt−1)pθ(xt∣xt+1)]=Eq(x1∣x0)[logpθ(x0∣x1)]+Eq(xT−1,xT∣x0)[logq(xT∣xT−1)p(xT)]+t=1∑T−1Eq(xt−1,xt,xt+1∣x0)[logq(xt∣xt−1)pθ(xt∣xt+1)]=reconstruction termEq(x1∣x0)[logpθ(x0∣x1)]−prior matching termEq(xT−1∣x0)[DKL(q(xT∣xT−1)∥p(xT))]−t=1∑T−1consistency termEq(xt−1,xt+1∣x0)[DKL(q(xt∣xt−1)∥pθ(xt∣xt+1))]第二项类似于上面,是把与内测积分无关的提出来,变换到该形式不涉及对x0的积分,可以直接套期望没有近似过程,KL散度为0(这里实际是相等)马尔可夫性拆分提出来第一项和最后一项统一标注从后推前的似然过程需要用参数拟合拆分期望的线性性见Post1证明
这里注意到,对数似然等于变分下界加上变分后验与真实后验的KL散度。当这个KL散度为0,对数似然等于ELBO。
这里第一项为重建期望,从x0对应的隐变量x1里采样出x1,通过神经网络θ重建出x0,可以通过与VAE类似的训练方法优化。
第二项衡量从xT−1到xT是否为高斯先验,由于这里的条件概率均为前向的,因此全部已经定义好了。只要T足够大,最后一项条件概率即为普通的(0,1)高斯分布。因此,可以直接计算为0。
第三项反映的是无论是前向过程还是反向过程都应该保持xt的一致性。
但是,一致性项是定义在两个随机变量上的,使用蒙特卡罗估计带来的方差会很大。尤其是,这项需要累加,如果T的值较大,估计值的方差会较大。
当前目标:优化对数似然,但是希望采样估计期望都是定义在一个变量上。
重新推导ELBO,此次表示后验的时候额外加上冗余的x0重新推导:
q(xt∣xt−1,x0)=q(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0)
原本的x0由于马尔可夫性质都是不必要的。
logp(x)≥Eq(x1:T∣x0)[logq(x1:T∣x0)p(x0:T)]=Eq(x1:T∣x0)[log∏t=1Tq(xt∣xt−1)p(xT)∏t=1Tpθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(x1∣x0)∏t=2Tq(xt∣xt−1)p(xT)pθ(x0∣x1)∏t=2Tpθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(x1∣x0)∏t=2Tq(xt∣xt−1,x0)p(xT)pθ(x0∣x1)∏t=2Tpθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(x1∣x0)pθ(xT)pθ(x0∣x1)+logt=2∏Tq(xt∣xt−1,x0)pθ(xt−1∣xt)]=Eq(x1:T∣x0)logq(x1∣x0)p(xT)pθ(x0∣x1)+logt=2∏Tq(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0)pθ(xt−1∣xt)=Eq(x1:T∣x0)logq(x1∣x0)p(xT)pθ(x0∣x1)+logt=2∏Tq(xt−1∣x0)q(xt−1∣xt,x0)q(xt∣x0)pθ(xt−1∣xt)=Eq(x1:T∣x0)[logq(x1∣x0)p(xT)pθ(x0∣x1)+logq(xT∣x0)q(x1∣x0)+logt=2∏Tq(xt−1∣xt,x0)pθ(xt−1∣xt)]=Eq(x1:T∣x0)[logq(xT∣x0)p(xT)pθ(x0∣x1)+t=2∑Tlogq(xt−1∣xt,x0)pθ(xt−1∣xt)]=Eq(x1:T∣x0)[logpθ(x0∣x1)]+Eq(x1:T∣x0)[logq(xT∣x0)p(xT)]+t=2∑TEq(x1:T∣x0)[logq(xt−1∣xt,x0)pθ(xt−1∣xt)]=Eq(x1∣x0)[logpθ(x0∣x1)]+Eq(xT∣x0)[logq(xT∣x0)p(xT)]+t=2∑TEq(xt,xt−1∣x0)[logq(xt−1∣xt,x0)pθ(xt−1∣xt)]=reconstruction termEq(x1∣x0)[logpθ(x0∣x1)]−prior matching termDKL(q(xT∣x0)∥p(xT))−t=2∑Tdenoising matching termEq(xt∣x0)[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))]这里应是相等拆分替换后验拆分贝叶斯公式相加时前后相消前后还各有剩余,并与第一项相消拆分和期望的线性性见Post1,消除与项内无关的变量

这里第一项和上面第一项一样,均为可以通过蒙特卡洛估计和VAE一样优化。
第二项,不存在可以训练的参数,并且在基本假设下,这一项应当为0。
第三项为 去噪匹配项,这项期望参数化的似然反向过程pθ(xt−1∣xt)可以作为真实的去噪步骤q(xt−1∣xt,x0)的估计。这两个过程被尽可能地近似,通过最小化他们之间的KL散度。
由于以上关于ELBO地推导仅用到了马尔科夫假设。所以,对于任意的马尔可夫层级VAE模型,以上表达式都会是正确的。
然而,如果马尔可夫层级VAE模型的后验p(xt∣xt−1)是任意的(需要参数拟合),则由于要同时优化编码器与解码器,优化将会变得很困难。这也就是为什么,变分扩散模型会选择将编码确定为高斯过程(仅需要优化解码器)
主要目标:优化对数似然->优化ELBO->优化重建项(可直接计算)与去噪匹配项。
当前目标:计算去噪匹配项中的真实似然去噪过程,作为解码器的Ground Truth去优化。
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0)
其中,q(xt∣xt−1,x0)=q(xt∣xt−1)=N(xt;αtxt−1,(1−αt)I)是已经定好的。
在保方差证明中,已经得到
xt∼q(xt∣x0)∼N(xt;αˉtx0,(1−αˉt)I)
同样地可以得到
q(xt−1∣x0)
因此,可以得到:
当前目标:求得真实去噪过程的分布
虽然高斯相除不一定是合法的概率分布,但是这里已经假设了其为概率密度
通过构造exp−21σ2(x−μ)2的形式,求解其参数(保证其正比于正态分布)
q(xt−1∣xt,x0)=q(xt∣x0)q(xt∣xt−1,x0)q(xt−1∣x0)=N(xt;αˉtx0,(1−αˉt)I)N(xt;αtxt−1,(1−αt)I)N(xt−1;αˉt−1x0,(1−αˉt−1)I)∝exp{−[2(1−αt)(xt−αtxt−1)2+2(1−αˉt−1)(xt−1−αˉt−1x0)2−2(1−αˉt)(xt−αˉtx0)2]}=exp{−21[1−αt(xt−αtxt−1)2+1−αˉt−1(xt−1−αˉt−1x0)2−1−αˉt(xt−αˉtx0)2]}=exp{−21[1−αt(−2αtxtxt−1+αtxt−12)+1−αˉt−1(xt−12−2αˉt−1xt−1x0)+C(xt,x0)]}∝exp{−21[−1−αt2αtxtxt−1+1−αtαtxt−12+1−αˉt−1xt−12−1−αˉt−12αˉt−1xt−1x0]}=exp{−21[(1−αtαt+1−αˉt−11)xt−12−2(1−αtαtxt+1−αˉt−1αˉt−1x0)xt−1]}=exp{−21[(1−αt)(1−αˉt−1)αt(1−αˉt−1)+1−αtxt−12−2(1−αtαtxt+1−αˉt−1αˉt−1x0)xt−1]}=exp{−21[(1−αt)(1−αˉt−1)αt−αˉt+1−αtxt−12−2(1−αtαtxt+1−αˉt−1αˉt−1x0)xt−1]}=exp{−21[(1−αt)(1−αˉt−1)1−αˉtxt−12−2(1−αtαtxt+1−αˉt−1αˉt−1x0)xt−1]}=exp⎩⎨⎧−21((1−αt)(1−αˉt−1)1−αˉt)xt−12−2(1−αt)(1−αˉt−1)1−αˉt(1−αtαtxt+1−αˉt−1αˉt−1x0)xt−1⎭⎬⎫=exp⎩⎨⎧−21((1−αt)(1−αˉt−1)1−αˉt)xt−12−21−αˉt(1−αtαtxt+1−αˉt−1αˉt−1x0)(1−αt)(1−αˉt−1)xt−1⎭⎬⎫=exp{−21(1−αˉt(1−αt)(1−αˉt−1)1)[xt−12−21−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x0xt−1]}∝N(xt−1;μq(xt,x0)1−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x0,Σq(t)1−αˉt(1−αt)(1−αˉt−1)Iσ仅与α有关,为常数,变正比xt−1与xt2和x02项无关,也是常数直接舍掉常数部分,变正比归并一阶项和二阶项提出来方差提出来均值以x0和xt为条件的均值和常数方差
正比于正态分布,且 自己本身也是概率分布(需要满足非负性和归一化的要求),这里也就是正态分布。也就是无论如何要有一样的趋势(相对大小是一样的)。所以下面替换的时候,直接用的这个正比于的正态分布作为真实的去噪分布。
μq(xt,x0)是xt和x0的函数。Σq(t)是关于时间的函数(每一个时间步的α已经被确定)。
当前目标:优化pθ(xt,t)尽可能接近真实似然去噪过程q(xt−1∣xt,x0)。
- 首先将pθ建模为高斯分布。
- 由于真实的去噪过程,方差已知,只建模均值。
argminDKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))=argminDKL(N(xt−1;μq,Σq(t))∥N(xt−1;μθ,Σq(t)))=argθmin21[log∣Σq(t)∣∣Σq(t)∣−d+tr(Σq(t)−1Σq(t))+(μθ−μq)TΣq(t)−1(μθ−μq)]=argθmin21[log1−d+d+(μθ−μq)TΣq(t)−1(μθ−μq)]=argθmin21[(μθ−μq)TΣq(t)−1(μθ−μq)]=argθmin21[(μθ−μq)T(σq2(t)I)−1(μθ−μq)]=argθmin2σq2(t)1[μθ−μq22]参考高斯分布之间KL散度的计算公式对角矩阵的逆为对角元素都取倒数乘对角矩阵=向量每一项分别乘以对角元素
因此,优化KL散度的目标转换为优化两个概率分布的均值之间距离的二范数。由于真实的去噪分布的均值如下:
μq(xt,x0)=1−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x0
这里,我们优化的均值为μθ(xt,t)。为了尽可能使得优化准确,可以把μθ(xt,t)设置为:(这里xt是已知的。所以我们用神经网络建模x0的部分。)
μθ(xt,t)=1−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x^θ(xt,t)
所以,我们仅需要使用神经网络参数化x^θ(xt,t)(神经网络需要有额外输入t去告网络输入是哪个xt,尽可能实现参数共享)
argθminDKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))=argθminDKL(N(xt−1;μq,Σq(t))∥N(xt−1;μθ,Σq(t)))=θargmin2σq2(t)1[1−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x^θ(xt,t)−1−αˉtαt(1−αˉt−1)xt+αˉt−1(1−αt)x022]=argθmin2σq2(t)1[1−αˉtαˉt−1(1−αt)x^θ(xt,t)−1−αˉtαˉt−1(1−αt)x022]=argθmin2σq2(t)1[1−αˉtαˉt−1(1−αt)(x^θ(xt,t)−x0)22]=argθmin2σq2(t)1(1−αˉt)2αˉt−1(1−αt)2[∥x^θ(xt,t)−x0∥22]
此时,最小化KL散度的任务变成从xt预测x0的问题(推理时应当还是计算出后一步到前一步似然过程的均值和方差再做采样和去噪)。
argθminEt∼U{2,T}[Eq(xt∣x0)[DKL(q(xt−1∣xt,x0)∥pθ(xt−1∣xt))]]
最终,为了优化从第二步到第T步期望的加和。可以优化以上表达式,先随机抽取样本,每个样本再随机抽取一个时间步,做梯度下降(将加和视为期望,蒙特卡洛梯度估计,采样本顺序的问题还需要进一步考虑)。
结论
Post1:
Eq(x1:T∣x0)[logpθ(x0∣x1)]=∫…∫logpθ(x0∣x1)q(x1:T∣x0)dx1dx2…dxT=∫…∫logpθ(x0∣x1)q(x2:T∣x0,x1)q(x1∣x0)dx1dx2…dxT=∫logpθ(x0∣x1)q(x1∣x0)(∫…∫q(x2:T∣x0,x1)dx2…dxT)dx1=∫logpθ(x0∣x1)q(x1∣x0)dx1=Eq(x1∣x0)[logpθ(x0∣x1)]提出来的部分与x2到xT的积分无关概率密度积分为1
Post2:
对于积分或者求和的优化问题,可以转而将其视为对于其积分内部函数的期望的优化。这时,使用蒙特卡洛估计,使用单点或者小batch的数据去做梯度上升或者下降,减小单次计算的计算量。