内容来源于:
人民大学 李崇轩老师 《深度生成模型:原理与应用》
CW的博客
《深度生成模型》 Jakub M.T
Energy based model
一种最灵活的概率建模方式,其通过神经网络定义了样本的能量。其中,能量越低状态越稳定,应当拥有更高的概率。
但是,对于一个概率分布来说,其要满足归一化和非负性的要求。
也就是
p(x)>0
和
∫p(x)dx=1
可以通过在神经网络外套非负函数g的方法构造出非负的pθ(x),也就是g(fθ(x))。
到这里,虽然能构造出满足非负性的函数,但是很难保证其归一化,也就是相加为1。
因此,为了探究每个样本取值的概率密度,应当构造配分函数Z(θ)=∫gθ(x)dx。
pθ(x)=Volume(gθ)1gθ(x)=∫gθ(x)dx1gθ(x)
这样就能满足∫pθ(x)dx=1的归一化要求。
最终,对于EBM来说,选取的g函数为exp指数函数,即:
Z(θ)=∫exp(fθ(x))dx
其中−fθ(x)为能量函数,能量越低概率越高。
优点:
高度的灵活性,可以使用任意的神经网络去定义f
缺点:
-
- 采样困难,根本没有定义如何采样
-
- 计算似然pθ(x)困难,因为计算配分函数Z(θ)很困难,高纬度积分。
-
- 没有表征学习的过程
但是,这种概率的表示方法同时很擅长对概率密度做比较,即:
pθ(x′)pθ(x)=exp(fθ(x)−fθ(x′))
External:乘积专家模型
如果,已经训练好了多个模型p,q,r,则可以用以下表示其gθ(f(x)):
pθ1(x)qθ2(x)rθ3(x)
最终其概率即为:
pθ1,θ2,θ3(x)=Z(θ1,θ2,θ3)1qθ1(x)rθ2(x)tθ3(x)
通过这样的方法,可以实现类似于AND与的操作。(p,q,r三个模型都认可的样本才会有较高的概率,混合专家模型MOE更像是或的操作)
应用:利用强化学习和乘积专家模型对已经训练好的模型,如GPT,Diffusion等做价值对齐。

目标,最大化:
Z(θ)exp{fθ(xtrain)}
这意味着,训练过程需要相对于不正确的数据点相对地抬高正确的样本的概率。
这里,EBM会使用当前模型的采样作为负样本:随机的噪声对于模型不具有代表性。因为大部分时候从随机点走的过程,都不会经过这些随机噪声。
而当前模型的采样,代表了其采样时可能会到达的位置,更有代表性(我猜的)。并且当前模型的采样(假设认为可以训练到采样数据在真实数据周围的情况),这样采样出的样本与真实数据类似,但是作为负样本可以有很高的效率(相对于随机噪声的负样本)。
而当模型训练的较好时,即采样与真实数据相似,真实数据拉高概率,与真实值类似的数据拉低概率,逐渐形成模型的收敛。
训练优化目标
最大化似然
θmaxfθ(xtrain)−logZ(θ)
这里,直接对优化目标计算对参数θ的梯度
∇θfθ(xtrain)−∇θlogZ(θ)=∇θfθ(xtrain)−Z(θ)∇θZ(θ)=∇θfθ(xtrain)−Z(θ)1∫∇θexp{fθ(x)}dx=∇θfθ(xtrain)−Z(θ)1∫exp{fθ(x)}∇θfθ(x)dx=∇θfθ(xtrain)−∫Z(θ)exp{fθ(x)}∇θfθ(x)dx=∇θfθ(xtrain)−Exsample[∇θfθ(xsample)]≈∇θfθ(xtrain)−∇θfθ(xsample)logZ(θ)看作复合函数对θ求导与x无关,积分求导换序把exp看作复合函数Z(θ)对于积分是常数用采样代替全局样本蒙特卡洛估计
Note:
优化目标函数的时候,不能随便加减项,可能会导致求梯度时,梯度方向产生严重错误。而确定了目标函数下界,优化下界,就能间接最大化目标函数。
而如果先求梯度再近似梯度,只要期望意义下,梯度无偏即可。
那么,对于EBM,如何进行采样?
马尔科夫链蒙特卡洛方法,利用能量函数或者概率比值去指导从随机点出发的采样过程。
这里引入了Score function,得分函数中对logZ(θ)求导的过程因为与x无关,所以直接等于0。
sθ(x):=∇xlogpθ(x)=∇xfθ(x)−=0∇xlogZ(θ)=∇xfθ(x)

Score function的几何含义为,描述了一个场,代表当前样本点能最快提升概率密度的方向。样本点沿着这个场的方向走,最终会到达一个概率的极大值点。并且,在随时间转移的每一步都加上一定程度的高斯噪声,可以带来一定程度的随机性。
xi+1←xi+ϵ∇xlogpθ(x)+2ϵzi,zi∼N(0,I)

Likelihood free learning
最大似然的方法直接催生的就是KL散度最小化的优化任务。这里尝试,不基于似然,但是仍然基于散度的方法去定义优化目标。
这里,由于score function和概率密度是一体两面的,尝试基于score function定义散度:
Fisher 散度定义如下:
DF(p,q):=21Ex∼p[∥∇xlogp(x)−∇xlogq(x)∥22]
数据分布pdata(x)和EBM模型的分布pθ(x)之间的散度定义如下:
21Ex∼pdata[∥∇xlogpdata(x)−sθ(x)∥22]=21Ex∼pdata[∥∇xlogpdata(x)−∇xfθ(x)∥22]
Score matching:
可以将fisher 散度进行如下变换,证明在后面(利用分步积分将交叉项转为二阶梯度,避免了计算真实的似然,不想计算一个东西的梯度就用分步积分转换)
21Ex∼pdata[∥∇xlogpdata(x)−∇xlogpθ(x)∥22]=Ex∼pdata21∥∇xlogpθ(x)∥22+tr(Hessian of logpθ(x)∇x2logpθ(x))+const.
每次,从训练集里采一组batch,计算Fisher散度的损失,并进行随机梯度下降优化θ。
n1i=1∑n[21∥∇xlogpθ(xi)∥22+tr(∇x2logpθ(xi))]=n1i=1∑n[21∥∇xfθ(xi)∥22+tr(∇x2fθ(xi))]
一维情况下的证明:
∫∣∣∇xlogpdata(x)−∇xfθ(x)∣∣2pdata(x)dx=∫(∇xfθ(x)2−2∇xlogpdata(x)∇xfθ(x))pdata(x)dx+const=−2∫∇xlogpdata(x)∇xfθ(x)pdata(x)dx+Ep((∇xfθ(x))2)+const=−2∫∇xfθ(x)∇xpdata(x)dx+Ep(∇xfθ(x))2+const=−2(∇xfθ(x)pdata(x)∣−∞+∞−Epdata∇x2fθ(x))+Epdata(∇xfθ(x))2+const=2Epdata(∇x2fθ(x)+21(∇xfθ(x))2)+constpdata的一项与θ优化无关,直接作为常数提出来第一个平方项化成期望对logP求导,消掉一个P分步积分无穷远处概率为0
分步积分公式:
∫abu(x)v′(x)dx=[u(x)v(x)]ab−∫abu′(x)v(x)dx=u(b)v(b)−u(a)v(a)−∫abu′(x)v(x)dx.
Score based model
不再间接的定义能量函数,而是直接使用神经网络建模score function。
由于score function是一个从RN到RN的一个映射过程,在网络结构设计中,U-Net这种具有远程连接的模型往往会有更好的效果。
L(θ)=EpD(x)21∣∣sθ(x)−∇xlogpD(x)∣∣22
但是,存在一个问题,在数据分布的概率密度低的地方,往往由于没有采样到过这些点,也没有对这些地方进行参数更新,而导致这些地方的score function的估计并不准确。也是深度生成模型存在的通病(对data分布之外的地方建模和优化过少),但是由于其他模型大多数祖先采样,而能一定程度上避免这个问题带来的影响。

不完美的解决方案:对真实数据加噪,使得样本逐渐到弥散整个空间,而整个空间的score function都能得到比较好的优化。与此同时,虽然加噪能使模型更容易学习,但是由于加噪会导致模型采样出的样本产生模糊。

进一步的解决方案,定义一系列的噪声等级,采样时先依据高噪声的score function进行采样,在此基础上再依据噪声更小的score function进行更新采样。

据此,模型的损失:
L(θ)=i=1∑LλiEpσi(x)21∥sθ(x,i)−∇xlogpσi(x)∥22
实际实现时,不会使用多个神经网络参数化多个score function,而是会将输入多加一维,用于代表当前的噪声等级,进行一个参数共享。
Denoise score matching
普通的score matching方法需要计算二阶导,计算负担大。
首先,不知道pdata(x),并且类似于上文所述,可以在真实数据上加噪声构造能覆盖更大样本空间的操作一样,这里尝试对带噪的fisher 散度进行建模。
21Ex~∼pdata[∥sθ(x~)−∇x~logqσ(x~)∥22]
也就是,优化神经网络描述的分数函数场,近似匹配真实数据加噪情况的分数函数场。
而此时加噪真实数据的梯度仍然是未知的,这里通过建模qσ(x~∣x)∼N(x~;x,σ2I),这样一个已经预定义好的分布来代替原有的概率密度(下面这个等式的证明见Post1)
Eqσ(x~)[∣∣sθ(x~)−∂x~∂log(qσ(x~))∣∣2]=Eqσ(x~∣x)pdata(x)[∣∣sθ(x~)−∂x~∂log(qσ(x~∣x))∣∣2]
这样,优化目标即可变为后者。后者期望中第二项对x~求偏导的过程可以得到,计算变得非常简单:
∂x~∂log(p(x~∣x))=−(σ2x~−x)=−σϵ
其中,
x~=x+ϵ,ϵ∼N(0,1)
这里,需要注意,由于sθ近似的是加噪后的数据分布,因此需要保证σ不能太大,否则拟合出的数据分布会严重偏离真实数据分布(实际上通过多级加噪策略,应该还好?)
Post1:
这里的ESM和DSM分别代表显示分数匹配和去噪分数匹配。
ESMqσ(θ)=Eqσ(x~)[∣∣sθ(x~)−∂x~∂log(qσ(x~))∣∣2]=Eqσ(x~)[∣∣sθ(x~)∣∣2]−2Eqσ(x~)[⟨sθ(x~),∂x~∂log(qσ(x~))⟩]+C1,C1=Eqσ(x~)[∣∣∂x~∂log(qσ(x~))∣∣2]
C1与θ无关,因此可以作为优化过程中的一个常数。
DSMqσ(θ)=Eqσ(x~,x)[∣∣sθ(x~)−∂x~∂log(qσ(x~∣x))∣∣2],qσ(x~,x)=qσ(x~∣x)p(x)=Eqσ(x~,x)[∣∣sθ(x~)∣∣2]−2Eqσ(x~,x)[⟨sθ(x~),∂x~∂log(qσ(x~∣x))⟩]+C2,C2=Eqσ(x~,x)[∣∣∂x~∂log(qσ(x~∣x))∣∣2]
这里的C2也是优化的常数。
Eqσ(x~)⌊∣∣sθ(x~)∣∣2⌋=∫x~qσ(x~)∣∣sθ(x~)∣∣2dx~qσ(x~)=∫xqσ(x~∣x)p(x)dx∫x~∫xqσ(x~∣x)p(x)dx∣∣sθ(x~)∣∣2dx~=∫x~∫xqσ(x~∣x)p(x)∣∣sθ(x~)∣∣2dxdx~=∫x~∫xqσ(x~,x)∣∣sθ(x~)∣∣2dxdx~=Eqσ(x~,x)[∣∣sθ(x~)∣∣2]∣∣sθ(xθ)∣∣2项与x无关,直接提进去
这样,即简单的证明了ESM和DSM中的第一项是完全等价的。
下面证明了ESM和DSM的第二项也是完全等价的。下面的尖括号代表内积。
Eqσ(x~)[⟨sθ(x~),∂x~∂log(qσ(x~))⟩]=∫x~qσ(x~)⟨sθ(x~),∂x~∂log(qσ(x~))⟩dx~=∫x~qσ(x~)⟨sθ(x~),qσ(x~)1∂x~∂qσ(x~)⟩dx~=∫x~⟨sθ(x~),∂x~∂qσ(x~)⟩dx~qσ(x~)=∫xqσ(x~∣x)p(x)dx∫x~⟨sθ(x~),∂x~∂∫xqσ(x~∣x)p(x)dx⟩dx~=∫x~⟨sθ(x~),∫x∂x~∂qσ(x~∣x)p(x)dx⟩dx~=∫x~⟨sθ(x~),∫x∂x~∂log(qσ(x~∣x))qσ(x~∣x)p(x)dx⟩dx~=∫x~∫xp(x)qσ(x~∣x)⟨sθ(x~),∂x~∂log(qσ(x~∣x))⟩dxdx~=∫x~∫xqσ(x~,x)⟨sθ(x~),∂x~∂log(qσ(x~∣x))⟩dxdx~=Eqσ(x~,x)[⟨sθ(x~),∂x~∂log(qσ(x~∣x))⟩]log函数复合求导内外两个q抵消对x~求导,直接带进去(p(x)与x~无关)对log求导,会多产生一个q的倒数抵消sθ与x积分无关条件乘边缘得联合
这样,就能得到:
ESMqσ(θ)=DSMqσ(θ)−C2+C1⇒ESMqσ(θ)≡DSMqσ(θ)
也就是说ESM和DSM从 优化θ的角度 来说是等价的。