无向概率图模型的参数估计方法及配分函数

释放双眼,带上耳机,听听看~!
本文介绍了无向概率图模型中参数估计的方法,以及配分函数的概念和应用。学习如何使用极大似然估计来估计模型参数,并理解配分函数在处理无向图模型的学习和评估问题中的重要性。

一、概述

在有向概率图模型中,由于图内存在明确的拓扑排序关系,因此因式分解的形式相对直观。然而,对于无向图,我们需要根据图中的最大团来进行因式分解。无向图模型在局部看起来并不像一个概率模型,只有在整体上才能体现出其概率模型的特性,这就引入了配分函数的概念。在处理无向图模型的学习和评估问题时,我们常常需要面对概率公式中的配分函数(Partition Function),而这个配分函数往往是难以处理的。

对于连续或离散的高维随机变量x∈Rp  or  {0,1,⋯ ,k}pxin mathbb{R}^{p}; or; left {0,1,cdots ,kright }^{p},它可以表示成一个无向概率图,模型参数为θtheta,它的概率公式也就可以写成以下形式:

P(x;θ)=1Z(θ)P^(x;θ)P(x;theta )=frac{1}{Z(theta )}hat{P}(x;theta )

其中Z(θ)Z(theta )也就是配分函数,可以表示为:

Z(θ)=P^(x;θ)dxZ(theta )=hat{P}(x;theta )mathrm{d}x

对于这个概率模型的参数估计,可以采用极大似然估计的方法,首先,我们有一些样本,表示为X={xi}i=1NX=left {x_{i}right }_{i=1}^{N},然后使用这些样本来做极大似然估计:

θ^=argmaxθ  P(X;θ)=argmaxθ∏i=1NP(xi;θ)=argmaxθ  log∏i=1NP(xi;θ)=argmaxθ∑i=1NlogP(xi;θ)=argmaxθ∑i=1N(logP^(xi;θ)−logZ(θ))=argmaxθ∑i=1NlogP^(xi;θ)−NlogZ(θ)=argmaxθ1N∑i=1NlogP^(xi;θ)−logZ(θ)⏟记作l(θ)hat{theta }=underset{theta }{argmax}; P(X;theta ) =underset{theta }{argmax}prod_{i=1}^{N}P(x_{i};theta ) =underset{theta }{argmax}; logprod_{i=1}^{N}P(x_{i};theta ) =underset{theta }{argmax}sum_{i=1}^{N} logP(x_{i};theta ) =underset{theta }{argmax}sum_{i=1}^{N}left (loghat{P}(x_{i};theta )-logZ(theta )right ) =underset{theta }{argmax}sum_{i=1}^{N}loghat{P}(x_{i};theta )-NlogZ(theta ) =underset{theta }{argmax}underset{记作l(theta )}{underbrace{frac{1}{N}sum_{i=1}^{N}loghat{P}(x_{i};theta )-logZ(theta )}}

这里我们也就得到了目标函数l(θ)l(theta )

l(θ)=1N∑i=1NlogP^(xi;θ)−logZ(θ)l(theta )=frac{1}{N}sum_{i=1}^{N}loghat{P}(x_{i};theta )-logZ(theta )

接下来使用梯度上升的方法来求解参数θtheta,因此也就需要对l(θ)l(theta )求导:

∇θl(θ)=1N∑i=1N∇θlogP^(xi;θ)⏟①−∇θlogZ(θ)⏟②nabla _{theta }l(theta )=underset{①}{underbrace{frac{1}{N}sum_{i=1}^{N}nabla _{theta }loghat{P}(x_{i};theta )}}-underset{②}{underbrace{nabla _{theta }logZ(theta )}}

这里我们首先看一下②这一项的求导:

②=∇θlogZ(θ)=1Z(θ)∇θZ(θ)=P(x;θ)P^(x;θ)∇θ∫P^(x;θ)dx=P(x;θ)P^(x;θ)∫∇θP^(x;θ)dx=∫P(x;θ)P^(x;θ)∇θP^(x;θ)dx=∫P(x;θ)∇θlogP^(x;θ)dx=EP(x;θ)[∇θlogP^(x;θ)]②=nabla _{theta }logZ(theta ) ={color{Red}{frac{1}{Z(theta )}}}{color{Blue}{nabla _{theta }Z(theta )}} ={color{Red}{frac{P(x;theta )}{hat{P}(x;theta )}}}{color{Blue}{nabla _{theta }int hat{P}(x;theta )mathrm{d}x}} =frac{P(x;theta )}{hat{P}(x;theta )}int nabla _{theta }hat{P}(x;theta )mathrm{d}x =int frac{P(x;theta )}{hat{P}(x;theta )}nabla _{theta }hat{P}(x;theta )mathrm{d}x =int P(x;theta )nabla _{theta }loghat{P}(x;theta )mathrm{d}x =E_{P(x;theta )}left [nabla _{theta }loghat{P}(x;theta )right ]

注意这里的P(x;θ)P^(x;θ)frac{P(x;theta )}{hat{P}(x;theta )}之所以能够放到积分号里面,是因为对于任意xx来说P(x;θ)P^(x;θ)frac{P(x;theta )}{hat{P}(x;theta )}都是个常数。

变换上述公式的目的是将导数表示为关于P(x;θ)P(x;theta )的期望形式。然而,P(x;θ)P(x;theta )是我们要求解的分布,是一个未知的分布,因此无法精确求解,也就无法计算这个梯度∇θl(θ)nabla _{theta }l(theta ),只能通过近似采样来求解。如果没有②,l(θ)l(theta)可以通过梯度上升法求解,但是由于配分函数的存在,我们无法直接使用梯度上升法。这就是我们面临的问题。

二、随机最大似然(Stochastic Maximum Likelihood)

现在我们可以把∇θl(θ)nabla _{theta }l(theta )下面的形式:

∇θl(θ)=1N∑i=1N∇θlogP^(xi;θ)−EP(x;θ)[∇θlogP^(x;θ)]nabla _{theta }l(theta )=frac{1}{N}sum_{i=1}^{N}nabla _{theta }loghat{P}(x_{i};theta )-E_{P(x;theta )}left [nabla _{theta }loghat{P}(x;theta )right ]

对于我们的训练数据,我们可以把它们看做服从一个分布PdataP_{data},这个分布也就是训练数据的真实分布,是我们要去拟合的分布,然而也是一个我们永远不可能真正精确得到的分布,因为我们能够拿到的只有这个分布的若干样本(也就是训练数据)。有了PdataP_{data}这个定义以后,我们也可以把上面梯度中减号左边的一项写成期望的形式:

∇θl(θ)=EPdata[∇θlogP^(x;θ)]−EP(x;θ)[∇θlogP^(x;θ)]nabla _{theta }l(theta )={color{Red}{E_{P_{data}}}}left [nabla _{theta }loghat{P}(x;theta )right ]-E_{P(x;theta )}left [nabla _{theta }loghat{P}(x;theta )right ]

我们的目的也就是要让P(x;θ)P(x;theta )尽可能地逼近PdataP_{data},这个P(x;θ)P(x;theta )也就是我们的模型,所以我们把P(x;θ)P(x;theta )这个分布记作PmodelP_{model},现在我们就有了两个定义的分布,即数据的真实分布PdataP_{data}和用来拟合PdataP_{data}PmodelP_{model}

{data  distribution:Pdatamodel  distribution:Pmodel≜P(x;θ)left{begin{matrix} data; distribution:P_{data} model; distribution:P_{model}triangleq P(x;theta ) end{matrix}right.

现在∇θl(θ)nabla _{theta }l(theta )就可以写成∇θlogP^(x;θ)nabla _{theta }loghat{P}(x;theta )关于PdataP_{data}PmodelP_{model}的期望的形式:

∇θl(θ)=EPdata[∇θlogP^(x;θ)]⏟positive  phase−EPmodel[∇θlogP^(x;θ)]⏟negative  phasenabla _{theta }l(theta )=underset{positive; phase}{underbrace{{color{Red}{E_{P_{data}}}}left [nabla _{theta }loghat{P}(x;theta )right ]}}-underset{negative; phase}{underbrace{{color{Red}{E_{P_{model}}}}left [nabla _{theta }loghat{P}(x;theta )right ]}}

这里分别定义等号左边和右边的部分为正相(positive phase)和负相(negative phase)。

我们期待使用梯度上升法来迭代地求解最优的θtheta

θ(t+1)=θ(t)+η∇θl(θ(t))theta ^{(t+1)}=theta ^{(t)}+eta nabla _{theta }l(theta ^{(t)})

对于负相来说,我们无法对这个期望值积分,因此只能采用近似的方法,也就是在每次迭代时利用MCMC的方法(比如吉布斯采样)从Pmodel=P(x;θ(t))P_{model}=P(x;theta ^{(t)})里采样得到样本,然后利用这些样本来近似计算负相这个积分值。这里采样得到的MM个样本记作{x^i}i=1mleft {hat{x}_{i}right }_{i=1}^{m},这些样本叫做幻想粒子(fantacy particles):

x^1∼P(x;θ(t))⋮x^m∼P(x;θ(t))}fantacy  particlesleft.begin{matrix} hat{x}_{1}sim P(x;theta ^{(t)}) vdots hat{x}_{m}sim P(x;theta ^{(t)}) end{matrix}right}fantacy; particles

有了这些样本就可以计算负相,也就是说现在就可以用梯度上升的方法来迭代求解参数θtheta了,以下就是迭代求解的公式(这里也会从训练集中抽mm个样本):

θ(t+1)=θ(t)+η(∑i=1m∇θlogP^(xi;θ(t))−∑i=1m∇θlogP^(x^i;θ(t)))theta ^{(t+1)}=theta ^{(t)}+eta left (sum_{i=1}^{m}nabla _{theta }loghat{P}(x_{i};theta ^{(t)})-sum_{i=1}^{m}nabla _{theta }loghat{P}(hat{x}_{i};theta ^{(t)})right )

这个方法就叫做Gradient Ascent based on MCMC。

上面介绍的内容中引入了几个不容易理解的名词:正相、负相和幻想粒子,现在可以直观地解释一下这几个名词的含义。∇θl(θ(t))nabla _{theta }l(theta ^{(t)})中存在正相和负相,对比目标函数l(θ)l(theta )的表达式可以直观地理解这样命名的用意。

正相的作用是让模型分布在训练样本处概率增大,也就是从PdataP_{data}中采样,然后让这些样本在PmodelP_{model}中的概率增大。负相的作用是让Z(θ)Z(theta)的值变小,也就是说要让从PmodelP_{model}中采样出来的幻想粒子在PmodelP_{model}中的概率减小,这些样本可以认为我们是不信任它的,称它们是fantasy的,因此要让它们的概率减小。正相和负相共同作用,最终结果就会让PmodelP_{model}逼近PdataP_{data},这个过程可以由下图表示:

无向概率图模型的参数估计方法及配分函数

可以想象如果PmodelP_{model}已经非常逼近PdataP_{data},那么采样得到的幻想粒子和从数据集中采样的样本就会非常一致,这时对这些样本既要增大它们的概率也要压低它们的概率,此时正相和负相的作用就会抵消,也就不会再产生梯度,训练也就必须停止。

三、对比散度

对于MCMC的方法,可以参考这两个链接:

MCM

MCMC

上面的目标函数需要从PdataP_{data}PmodelP_{model}里面都采样mm个样本,从PdataP_{data}里面采样是很容易的,只需要从训练数据中抽取mm个训练数据,而从PmodelP_{model}中采样就要采用MCMC的方法,具体的操作就是使用一个初始分布初始化马尔可夫链,然后等马尔可夫链随机游走到达平稳分布时进行采样,这里可以构建一条马尔可夫链然后从中采集mm个样本,也可以构建mm条马尔可夫链然后从每条马尔可夫链中采集一个样本(只不过这样比较消耗资源)。上述MCMC方法的问题是对于高维数据分布,很可能马尔可夫链的混合时间(或者叫燃烧期)会非常地长。

下图展示了采样多条马尔可夫链的吉布斯采样方法的过程,假设燃烧期是kk,由于数据维度过高,很可能kk就会非常大,我们可以认为是无穷大∞infty。这里也要注意,吉布斯采样的过程是对高维随机变量的每一维依次采样,因此这里的图中的每个step其实都表示高维随机变量每一维采样的过程:

◯0−step→◯1−step→⋯◯k−step⏞mixing  time→⋯◯→x^1⋮◯0−step→◯1−step→⋯◯k−step→⋯◯→x^m}Gibbs  Samplingleft.begin{matrix} overset{mixing; time}{overbrace{underset{0-step}{bigcirc} rightarrow underset{1-step}{bigcirc}rightarrow cdots underset{k-step}{bigcirc}}}rightarrow cdots bigcircrightarrow hat{x}_{1} vdots underset{0-step}{bigcirc} rightarrow underset{1-step}{bigcirc}rightarrow cdots underset{k-step}{bigcirc}rightarrow cdots bigcircrightarrow hat{x}_{m} end{matrix}right}Gibbs; Sampling

对比散度(Contrastive Divergence)的方法可以避免燃烧期过长的问题,在上面的抽样过程中需要为0-step的x^ihat{x}_{i}按照一个初始化分布进行初始化,而对比散度的方法就是使用PdataP_{data}这个分布来作为初始化分布,具体的做法也就是从训练数据中抽取mm个样本来初始化这mm条马尔可夫链,也就是:

x^1=x1,x^2=x2,⋯ ,x^m=xmhat{x}_{1}=x_{1},hat{x}_{2}=x_{2},cdots ,hat{x}_{m}=x_{m}

使用PdataP_{data}初始化马尔可夫链以后只需要经过很短的几步就可以采集样本了,比如经过kk步就开始采样,即使k=1k=1也是可以的。总之,对比散度的方法与普通的直接MCMC采样的方法的区别就在于使用了PdataP_{data}初始化马尔可夫链,然后不用等漫长的混合时间,只需要kk步就可以采样了,无论kk步时有没有达到平稳分布,而k=1,2,3k=1,2,3等很小的数字也是可以的。这种对比散度的方法就叫做CD Learning,之前的方法叫做ML Learning。

接下来来看看对比散度这个名字的由来。首先,先看这个式子:

θ^=argmaxθ1N∑i=1NlogP(x;θ)=argmaxθEPdata[logPmodel]=argmaxθ∫PdatalogPmodeldx=argmaxθ∫PdatalogPmodeldx−argmaxθ∫PdatalogPdatadx⏟与θ无关=argmaxθ∫PdatalogPmodelPdatadx=argmaxθ−KL(Pdata∣∣Pmodel)=argminθKL(Pdata∣∣Pmodel)hat{theta }=underset{theta }{argmax}frac{1}{N}sum_{i=1}^{N}logP(x;theta ) =underset{theta }{argmax}E_{P_{data}}left [logP_{model}right ] =underset{theta }{argmax}int P_{data}logP_{model}mathrm{d}x =underset{theta }{argmax}int P_{data}logP_{model}mathrm{d}x-underset{与theta 无关}{underbrace{underset{theta }{argmax}int P_{data}logP_{data}mathrm{d}x}} =underset{theta }{argmax}int P_{data}logfrac{P_{model}}{P_{data}}mathrm{d}x =underset{theta }{argmax}-KL(P_{data}||P_{model}) =underset{theta }{argmin}KL(P_{data}||P_{model})

如你所见,原来的最大似然估计方法实际上是在最小化PdataP_{data}PmodelP_{model}之间的KL散度。而在对比散度的方法中,我们将PdataP_{data}作为第00步的初始分布,经过多个步骤后才能达到稳定分布。我们将第00步的分布记作P(0)P^{(0)},最终的稳定分布记作P(∞)P^{(infty )},而第kk步的马尔科夫链的分布记作P(k)P^{(k)}。由于现在PmodelP_{model}的样本来自P(k)P^{(k)}而不是P(∞)P^{(infty )},所以通过这些样本进行的参数估计并不是在最小化KL(P(0)∣∣P(∞))KL(P^{(0)}||P^{(infty )})(也就是KL(Pdata∣∣Pmodel)KL(P_{data}||P_{model})),而是在按照下面的目标函数进行参数估计:

θ^=argmin[KL(P(0)∣∣P(∞))−KL(P(k)∣∣P(∞))]⏟Contrastive  Divergencehat{theta }=argminunderset{Contrastive; Divergence}{underbrace{left [KL(P^{(0)}||P^{(infty )})-KL(P^{(k)}||P^{(infty )})right ]}}

这个目标函数就是对比散度。使用CD-Learning的方法的算法如下:

t+1t+1时刻:

①为正相从PdataP_{data}中采样,x1,x2,⋯ ,xmx_{1},x_{2},cdots ,x_{m}是采样的数据,也就是训练数据;

②为负相从Pmodel=P(x;θ(t))P_{model}=P(x;theta ^{(t)})中采样,使用为正相采样的数据初始化马尔可夫链:

x^1=x1,x^2=x2,⋯ ,x^m=xmhat{x}_{1}=x_{1},hat{x}_{2}=x_{2},cdots ,hat{x}_{m}=x_{m}

然后使用吉布斯采样从马尔可夫链中第kk步的分布抽取mm个样本,kk可以是很小的数字,甚至是11:

◯0−step→◯1−step→⋯◯k−step→x^1⋮◯0−step→◯1−step→⋯◯k−step→x^m}Gibbs  Samplingleft.begin{matrix} underset{0-step}{bigcirc} rightarrow underset{1-step}{bigcirc}rightarrow cdots underset{k-step}{bigcirc}rightarrow hat{x}_{1} vdots underset{0-step}{bigcirc} rightarrow underset{1-step}{bigcirc}rightarrow cdots underset{k-step}{bigcirc}rightarrow hat{x}_{m} end{matrix}right}Gibbs; Sampling

四、受限玻尔兹曼机的学习

1.表示

受限玻尔兹曼机在前一篇介绍了它的表示和推断问题,参考链接如下:受限玻尔兹曼机

它的概率模型如下:

{P(h,v)=1Zexp{−E(h,v)}E(h,v)=−(hTWv+αTv+βTh)left{begin{matrix} P(h,v)=frac{1}{Z}expleft {-E(h,v)right } E(h,v)=-left (h^{T}Wv+alpha ^{T}v+beta ^{T}hright ) end{matrix}right.

其中:

h=(h1h2⋯hm)Tv=(v1v2⋯vn)TW=[wij]m×nα=(α1α2⋯αn)Tβ=(β1β2⋯βm)Th=begin{pmatrix} h_{1} & h_{2} & cdots & h_{m} end{pmatrix}^{T} v=begin{pmatrix} v_{1} & v_{2} & cdots & v_{n} end{pmatrix}^{T} W=left [w_{ij}right ]_{mtimes n} alpha =begin{pmatrix} alpha _{1} & alpha _{2} & cdots & alpha _{n} end{pmatrix}^{T} beta =begin{pmatrix} beta _{1} & beta _{2} & cdots & beta _{m} end{pmatrix}^{T}

2.具有隐变量的能量模型

对于具有隐变量的能量模型来说,我们有的数据是观测变量vv的数据,假设数据集是SSSS的规模是NN,即∣S∣=Nleft |Sright |=N,另外用θtheta表示参数(W,α,β)(W,alpha ,beta ),那么数据的loglog似然就是:

l(θ)=1N∑v∈SlogP(v)l(theta )=frac{1}{N}sum _{vin S}logP(v)

对于概率logP(v)logP(v),来求它对θtheta的梯度,首先对这个概率做一些变换:

logP(v)=log∑hP(h,v)=log∑h1Zexp{−E(h,v)}=log∑hexp{−E(h,v)}−logZ=log∑hexp{−E(h,v)}⏟记作①−log∑h,vexp{−E(h,v)}⏟记作②logP(v)=logsum _{h}P(h,v) =logsum _{h}frac{1}{Z}expleft {-E(h,v)right } =logsum _{h}expleft {-E(h,v)right }-logZ =underset{记作①}{underbrace{logsum _{h}expleft {-E(h,v)right }}}-underset{记作②}{underbrace{logsum _{h,v}expleft {-E(h,v)right }}}

接下来看①和②这两项对参数θtheta的导数:

∂①∂θ=∂∂θlog∑hexp{−E(h,v)}=−1∑hexp{−E(h,v)}∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑hexp{−E(h,v)}∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑h1Zexp{−E(h,v)}1Z∑hexp{−E(h,v)}∂E(h,v)∂θ=−∑hP(h,v)∑hP(h,v)∂E(h,v)∂θ=−∑hP(h∣v)∂E(h,v)∂θ∂②∂θ=∂∂θlog∑h,vexp{−E(h,v)}=−1∑h,vexp{−E(h,v)}∑h,vexp{−E(h,v)}∂E(h,v)∂θ=−∑h,vexp{−E(h,v)}∑h,vexp{−E(h,v)}∂E(h,v)∂θ=−∑h,vexp{−E(h,v)}Z∂E(h,v)∂θ=−∑h,vP(h,v)∂E(h,v)∂θfrac{partial ①}{partial theta }=frac{partial}{partial theta }logsum _{h}expleft {-E(h,v)right } =-frac{1}{sum _{h}expleft {-E(h,v)right }}sum _{h}expleft {-E(h,v)right }frac{partial E(h,v)}{partial theta } =-sum _{h}frac{expleft {-E(h,v)right }}{sum _{h}expleft {-E(h,v)right }}frac{partial E(h,v)}{partial theta } =-sum _{h}frac{{color{Red}{frac{1}{Z}}}expleft {-E(h,v)right }}{{color{Red}{frac{1}{Z}}}sum _{h}expleft {-E(h,v)right }}frac{partial E(h,v)}{partial theta } =-sum _{h}frac{P(h,v)}{sum _{h}P(h,v)}frac{partial E(h,v)}{partial theta } =-sum _{h}P(h|v)frac{partial E(h,v)}{partial theta } frac{partial ②}{partial theta }=frac{partial}{partial theta }logsum _{h,v}expleft {-E(h,v)right } =-frac{1}{sum _{h,v}expleft {-E(h,v)right }}sum _{h,v}expleft {-E(h,v)right }frac{partial E(h,v)}{partial theta } =-sum _{h,v}frac{expleft {-E(h,v)right }}{sum _{h,v}expleft {-E(h,v)right }}frac{partial E(h,v)}{partial theta } =-sum _{h,v}frac{expleft {-E(h,v)right }}{Z}frac{partial E(h,v)}{partial theta } =-sum _{h,v}P(h,v)frac{partial E(h,v)}{partial theta }

那么最终logP(v)logP(v)对参数θtheta的梯度为:

∂∂θlogP(v)=∂①∂θ−∂②∂θ=∑h,vP(h,v)∂E(h,v)∂θ−∑hP(h∣v)∂E(h,v)∂θfrac{partial}{partial theta }logP(v)=frac{partial ①}{partial theta }-frac{partial ②}{partial theta } =sum _{h,v}P(h,v)frac{partial E(h,v)}{partial theta }-sum _{h}P(h|v)frac{partial E(h,v)}{partial theta }

3.RBM的loglog似然梯度

接下来以求解WW为例来看RBM的参数学习方法。上面有了logP(v)logP(v)对参数θtheta的梯度,类似地logP(v)logP(v)对参数wijw_{ij}的梯度为:

∂∂wijlogP(v)=∑h,vP(h,v)∂E(h,v)∂wij−∑hP(h∣v)∂E(h,v)∂wijfrac{partial}{partial w_{ij}}logP(v)=sum _{h,v}P(h,v)frac{partial E(h,v)}{partial w_{ij}}-sum _{h}P(h|v)frac{partial E(h,v)}{partial w_{ij}}

然后观察一下能量函数E(h,v)E(h,v)

E(h,v)=−(hTWv+αTv+βTh⏟与W无关,记作Δ)=−(hTWv+Δ)=−(∑i=1m∑i=1nhiwijvj+Δ)E(h,v)=-(h^{T}Wv+underset{与W无关,记作Delta }{underbrace{alpha ^{T}v+beta ^{T}h}}) =-(h^{T}Wv+Delta ) =-(sum_{i=1}^{m}sum_{i=1}^{n}h_{i}w_{ij}v_{j}+Delta )

那么∂E(h,v)∂wijfrac{partial E(h,v)}{partial w_{ij}}也就很容易写出来:

∂E(h,v)∂wij=−hivjfrac{partial E(h,v)}{partial w_{ij}}=-h_{i}v_{j}

代入∂∂wijlogP(v)frac{partial}{partial w_{ij}}logP(v)就有:

∂∂wijlogP(v)=∑h,vP(h,v)(−hivj)−∑hP(h∣v)(−hivj)=∑hP(h∣v)hivj⏟记作①−∑h,vP(h,v)hivj⏟记作②frac{partial}{partial w_{ij}}logP(v)=sum _{h,v}P(h,v)(-h_{i}v_{j})-sum _{h}P(h|v)(-h_{i}v_{j}) =underset{记作①}{underbrace{sum _{h}P(h|v)h_{i}v_{j}}}-underset{记作②}{underbrace{sum _{h,v}P(h,v)h_{i}v_{j}}}

有一点要回忆一下,就是RBM无论隐变量还是观测变量都是二值的,取值只能是0011。接下来对①和②继续进行变换,需要利用这一点:

①=∑h1∑h2⋯∑hi⋯∑hmP(h1,h2,⋯ ,hi,⋯ ,hm∣v)hivj=∑hiP(hi∣v)hivj=P(hi=1∣v)1⋅vj+P(hi=0∣v)0⋅vj=P(hi=1∣v)vj②=∑h∑vP(h,v)hivj=∑h∑vP(v)P(h∣v)hivj=∑vP(v)∑hP(h∣v)hivj⏟同①=∑vP(v)P(hi=1∣v)vj①=sum _{h_{1}}sum _{h_{2}}cdots sum _{h_{i}}cdots sum _{h_{m}}P(h_{1},h_{2},cdots ,h_{i},cdots ,h_{m}|v)h_{i}v_{j} =sum _{h_{i}}P(h_{i}|v)h_{i}v_{j} =P(h_{i}=1|v)1cdot v_{j}+P(h_{i}=0|v)0cdot v_{j} =P(h_{i}=1|v)v_{j} ②=sum_{h}sum_{v}P(h,v)h_{i}v_{j} =sum_{h}sum_{v}P(v)P(h|v)h_{i}v_{j} =sum_{v}P(v)underset{同①}{underbrace{sum_{h}P(h|v)h_{i}v_{j}}} =sum_{v}P(v)P(h_{i}=1|v)v_{j}

因此也就有:

∂∂wijlogP(v)=P(hi=1∣v)vj−∑vP(v)P(hi=1∣v)vjfrac{partial}{partial w_{ij}}logP(v)=P(h_{i}=1|v)v_{j}-sum_{v}P(v)P(h_{i}=1|v)v_{j}

对于上面式子中的P(hi=1∣v)P(h_{i}=1|v)这个条件概率,我们是可以直接写出来的,这个概率在上一篇的推断问题中已经推导过了,可以参照本节开头的链接。

4.RBM的CD-k方法

所有样本的loglog似然l(θ)l(theta)wijw_{ij}的梯度现在就可以表示为:

∂l(θ)∂wij=1N∑v∈S∂∂wijlogP(v)=1N∑v∈S(P(hi=1∣v)vj−∑vP(v)P(hi=1∣v)vj⏟EP(v)[P(hi=1∣v)vj])frac{partial l(theta)}{partial w_{ij}}=frac{1}{N}sum _{vin S}frac{partial}{partial w_{ij}}logP(v) =frac{1}{N}sum _{vin S}(P(h_{i}=1|v)v_{j}-underset{E_{P(v)}left [P(h_{i}=1|v)v_{j}right ]}{underbrace{{color{Red}{sum_{v}P(v)P(h_{i}=1|v)v_{j}}}}})

这里红色的项需要对vv进行积分,是untrackable的,这一项其实也就是关于P(v)P(v)的期望,因此需要借助MCMC(这里指CD-k的方法,因为RBM里的随机变量也是高维的,只用MCMC也会面临燃烧期过长的问题)的方法。

使用的采样方法还是吉布斯采样,这里具体的采样过程如下图所示,首先使用训练数据来初始化v(0)v^{(0)},然后固定v(0)v^{(0)}来依次采样h(0)h^{(0)}的每一维,然后固定h(0)h^{(0)}再来依次采样v(1)v^{(1)}的每一维,按照如此流程进行kk步,最终采样得到v(k)v^{(k)}这一个样本,这种固定一部分来采另一部分的方法叫做块吉布斯采样(block Gibbs Sampling):

无向概率图模型的参数估计方法及配分函数

需要注意的是虽然按照吉布斯采样的方法需要依次采集每一个维度,但在RBM中由于模型的特殊性,在固定vv或者hh时,其余的随机变量都是相互独立的,因此实际操作中并行采每一维也是可以的。

另外我们一共有NN个训练数据,因此使用每个训练数据初始化一次都可以采集到一个v(k)v^{(k)},因此最终采集到的v(k)v^{(k)}一共有NN个。

具体的CD-k for RBM算法为:

for each vv
v(0)←vv^{(0)}leftarrow v
 for l=0,1,2,⋯ ,k−1l=0,1,2,cdots ,k-1
   for i=1,2,⋯ ,mi=1,2,cdots ,m:sample hi(l)∼P(hi∣v(l))h_{i}^{(l)}sim P(h_{i}|v^{(l)})
   for j=1,2,⋯ ,nj=1,2,cdots ,n:sample vj(l+1)∼P(vj∣h(l))v_{j}^{(l+1)}sim P(v_{j}|h^{(l)})
 for i=1,2,⋯ ,mi=1,2,cdots ,m,j=1,2,⋯ ,nj=1,2,cdots ,n

Δwij←Δwij+∂∂wijlogP(v)Delta w_{ij}leftarrow Delta w_{ij}+frac{partial}{partial w_{ij}}logP(v)

这里的ΔwijDelta w_{ij}初始化为00,这里的∂∂wijlogP(v)frac{partial}{partial w_{ij}}logP(v)也就是:

∂∂wijlogP(v)≈P(hi=1∣v(0))vj(0)−P(hi=1∣v(k))vj(k)frac{partial}{partial w_{ij}}logP(v)approx P(h_{i}=1|v^{(0)})v_{j}^{(0)}-P(h_{i}=1|v^{(k)})v_{j}^{(k)}

也就是说用每个训练数据采样得到的样本对应的P(hi=1∣v(k))vj(k)P(h_{i}=1|v^{(k)})v_{j}^{(k)}来代替期望EP(v)[P(hi=1∣v)vj]E_{P(v)}left [P(h_{i}=1|v)v_{j}right ],并且将所有训练数据计算得到的∂∂wijlogP(v)frac{partial}{partial w_{ij}}logP(v)累计起来得到的ΔwijDelta w_{ij}作为∂l(θ)∂wijfrac{partial l(theta)}{partial w_{ij}}的近似值,即:

∂l(θ)∂wij=1N∑v∈S∂∂wijlogP(v)≈1NΔwijfrac{partial l(theta)}{partial w_{ij}}=frac{1}{N}sum _{vin S}frac{partial}{partial w_{ij}}logP(v)approx frac{1}{N}Delta w_{ij}

最后进行梯度上升迭代求解就可以了。

五、总结

配分函数是统计物理学和统计机器学习中的一个核心概念。

定义与作用:

  • 在统计物理中,配分函数定义为系统所有可能微观状态的统计权重之和,它是描述统计系统热力学性质的重要物理量。通过配分函数,可以计算出系统的各种热力学量,如能量,熵,压强等。

  • 在统计机器学习中,配分函数通常出现在概率模型的归一化常数中,例如在受限玻尔兹曼机中。它确保了概率分布的总和(或积分)等于1。配分函数的计算通常涉及到所有可能状态的求和或积分,这在许多情况下都是计算密集型的。

计算与优化:

  • 在实际应用中,直接计算配分函数通常是不可行的,因为它涉及到对所有可能状态的求和或积分。因此,许多方法都被提出来近似计算配分函数,或者优化模型参数以避免直接计算配分函数。

  • 例如,变分推断和马尔科夫链蒙特卡罗(MCMC)方法都可以用来近似计算配分函数。另一方面,对比散度和随机最大似然等方法可以用来优化模型参数,而不需要直接计算配分函数。

总结

总的来说,配分函数是一个非常重要的概念,它在许多不同的领域都有应用。理解和掌握配分函数的计算和应用,对于理解和使用许多统计机器学习的方法是非常重要的。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

OpenAI发布ChatGPT最新能力更新

2023-12-19 12:10:14

AI教程

对抗生成网络GAN系列——WGAN原理及实战演练

2023-12-19 12:29:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索