限制玻尔兹曼机(RBMs)理论详解

来源:互联网 发布:unity3d导出html5 编辑:程序博客网 时间:2024/06/10 20:19

一、序

关于RBMs的文章已经有不少了,但是很多资料我在阅读的时候仍然对细节有一些疑惑。在查阅学习了大牛的视频、论文之后,很多问题豁然开朗,且在本文中记录下我对RBMs的粗浅了解。首先从玻尔兹曼机和限制玻尔兹曼机的结构和定义开始:

BM和RBM的结构

二、Boltmann Machines:

    玻尔兹曼机(Boltmann Machines)的能量函数(Energy function)是:

E(x,h)=hWxcxbhxUxhVh

分布函数:

P(x,h)=exp(E(x,h))/Z

其中分母Z学名叫做partition function

Z=xhexp(E(x,h))

三、Restricted Boltmann Machines:

    限制玻尔兹曼机(Restricted Boltmann Machines,简称RBMs)的能量函数(Energy function)是:

E(x,h)=hWxcxbh=jkWj,khjxkkckxkjbjhj

分布函数:

P(x,h)=exp(E(x,h))/Z

能量函数的能量越小,分布函数相应的概率就越大。

      玻尔兹曼机和限制玻尔兹曼机都属于基于能量的模型(Energy-Based Models),从模型图和公式中很容易看出两者的区别:玻尔兹曼机隐含层(和可见层)处于同一层的任意两个节点之间有一条连线;而限制玻尔兹曼机同层变量之间是相互独立的。只要有足够的隐单元,限制玻尔兹曼机可以表示任意的离散分布,玻尔兹曼机的表示能力则更强一些。另一方面,限制玻尔兹曼机比玻尔兹曼机更容易训练。

四、模型学习:

    训练RBMs就是学习能量函数的过程,变量中只有输入x是已知的。

RBMs

Free Energy:

    为了后面计算公式的简洁,首先引入Free Energy这个概念:

P(x)=heE(x,h)Z=eFreeEnergy(x)Z,Z=xeFreeEnergy(x)

FreeEnergy(x)=logheE(x,h)

例如:如果hi{0,1}

FreeEnergy(x)=logheE(x,h)=loghehWx+cx+bh=cxloghehWx+bh=cxlogheh1(W1x+b1)ehn(Wnx+bn)=cxilog(1+eWix+bi)

给定参数和x就可以很容易的计算出Free Energy的值,不依赖于隐单元h的具体取值。

梯度方法进行优化:

      用梯度算法学习RBMs模型参数θ(θ包括W,c,b),目标函数是P(x)(这里是梯度上升,因为要求的是似然的极大值)。P(x)取对数求偏导:

logP(x)=FreeEnergy(x)logZ

对数似然梯度(log-likelihood gradient):
logP(x)θ=FreeEnergy(x)θ+1Zx~eFreeEnergy(x~)FreeEnergy(x~)θ=FreeEnergy(x)θ+x~P(x~)FreeEnergy(x~)θ

logP(x)θ 是对 logP(x)W,logP(x)c,logP(x)b 的统一表示,编写代码时需要分别求偏导。求偏导都没有太大难度,其中E(x,h)W=hWxW=hx

        很多文章里喜欢写成负对数似然梯度(negative log-likelihood gradient)的形式,logP(x)就应该用梯度下降方法来更新参数了:

logP(x)θ=FreeEnergy(x)θx~P(x~)FreeEnergy(x~)θ

训练集上的平均负对数似然梯度等于:

EP^[logP(x)θ]=EP^[FreeEnergy(x)θ]EP[FreeEnergy(x~)θ]

P^是训练集对应的分布,P是模型分布,EP表示在模型分布上求期望。(这里顺便解释一下为什么大家都喜欢负对数似然而不是直接最大化似然,其实如果你有一台可以表示任何数值的超级计算机,那么取不取对数真的没什么关系,但是现实中的计算机表示能力有限,N个训练样本似然乘积很小很小,小到计算机都无法表示了,所以最好取log,概率的和不会有这样的问题;另外,在优化理论中,优化问题的标准形式就是最小化某个目标函数,所以最好加个负号,最小化负对数似然)。

    式子的第一项称为positive phrase,通过减小对应的FreeEnergy增大训练样本的概率;第二项是negative phrase,作用是增大对应的FreeEnergy来减小模型产生的样本的概率。句话不难理解,因为两项分别是往FreeEnergy(x)的梯度下降和FreeEnergy(x~)的梯度上升方向改变。这也符合最大似然标准,在训练样本上有较大的似然而在其他样本上概率较小。从分类的角度来看,训练样本是正样本,而模型样本是负样本(Negative samples)

负样本

    把训练样本代入求均值即可得到梯度公式的第一项EP^[FreeEnergy(x)θ]的值,第二项EP[FreeEnergy(x~)θ]计算模型分布上的期望,这就比较困难了,因为这需要取遍所有可能的x的值。所以接下来我们就需要用到MCMC 采样来近似估计了。用MCMC采样得到的一组样本来近似估计整体的样本分布,梯度公式第二项在采样得到的样本上求近似期望(平均值)得到估计值。在实际中,常用Gibbs采样,Gibbs 采样是MCMC 算法的一种。用Gibbs从模型分布中采样n个样本,然后负对数似然梯度在训练集上的期望就可以近似为:

EP^[logP(x)θ]EP^[FreeEnergy(x)θ]1ni=1nFreeEnergy(xi~)θ

        最后,简要概括一下RBMs模型学习方法的步骤:(1)、求偏导,(2)、采样,(3)、估计负对数似然梯度,(4)、梯度下降方法更新参数。

五、Gibbs采样:

      对RBMs模型来说, Gibbs主要有两个作用:一是估计negative log-likelihood gradient;二是在训练完模型之后(如DBN,DBN是由多个RBMs叠加而成的),用Gibbs进行采样,可以看到模型对数据的拟合以及网络中间隐含层的抽象效果。

       在RBMs模型训练过程中,Gibbs就是用来对negative log-likelihood gradient进行估计的。Gibbs采样分两个小步对(x,h)进行采样,第一步固定xh进行采样,第二步固定hx进行采样,交替进行直到收敛

x1P^(x)h1P(h|x1)x2P(x|h1)h2P(h|x2)xk+1P(x|hk)

    因为在训练过程中,训练模型分布会逐渐逼近训练样本分布,所以第一步可以从训练样本的分布P^抽取样本作为x1。如果第一步直接从模型P 中采样,Gibbs采样会迅速收敛。

    例如:假设h{0,1}H,已经得到x1,需要对h1采样。P(h|x)=jp(hj|x)(注:条件分布的具体推导过程见下一小节内容),由于隐单元之间是相互独立的,所以可以采用block Gibbs采样,对所有的隐单元同时进行采样,加快采样收敛。分别求p(hj=1|x),如果p(hj=1|x)U[0,1](大于等于均匀分布的一个采样),就设置hj=1,否则设置hj=0

条件分布:

    Gibbs采样主要是根据条件分布迭代进行采样的,所以在采样之前要先推导出条件分布公式。

P(h|x)=P(x,h)/hP(x,h)=exp(hWx+cx+bh)/Zhexp(hWx+cx+bh)/Z=exp(hWx+bh)hexp(hWx+bh)h=exp(hjhjWjx+bjhj)hexp(hjhjWjx+bjhj)WjWj=jexp(hjWjx+bjhj)h1...hHjexp(hjWjx+bjhj)=jexp(hjWjx+bjhj)jhjexp(hjWjx+bjhj)=jexp(hjWjx+bjhj)hjexp(hjWjx+bjhj)=jp(hj|x)

如果hj{0,1},可以得到:

p(hj=1|x)=exp(Wjx+bj)1+exp(Wjx+bj)=sigm(Wjx+bj)

p(hj=0|x)=1p(hj=1|x)

类似的:

P(x|h)=jexp(hWjxj+cjxj)xjexp(hWjxj+cjxj))=jp(xj|h)

如果xj{0,1},可以得到:

p(xj=1|h)=exp(hWj+cj)1+exp(hWj+cj))=sigm(hWj+cj)

六、Contrastive Divergence:

    Contrastive Divergence可以加快RBMs的训练速度,随机选择一个训练样本初始化x1,并且每一次迭代只用一个模型样本来估计negative log-likelihood gradient,而不是等到MCMC采样收敛后求期望。

    k-step Contrastive Divergence(CD-k):MCMC采样k步x1,x2,...,xk+1, 用 xk+1 估计negative log-likelihood gradient。当k=1时,就能得到比较好的近似(DBN等pre-training k取1就够用了),k增大可以得到更好的效果。Contrastive Divergence的一种理解是在训练样本x1 附近的局部区域内估计negative log-likelihood gradient。

借用一下大神Bengio的文章”Learning Deep Architectures for AI”的算法描述:

这里写图片描述

Persistent CD:

    CD只在附近的局部区域取Negative Sample来估计negative log-likelihood gradient,很难取到其它极值区域的样本,Persistent CD可以在一定程度上解决这个问题。Persistent CD的思想很简单,它与CD的区别仅仅在与:用上一次迭代得到的 xk+1(即Negative Sample)作为这次迭代的初始值来初始化x1PS:Persistent CD是2008年Tijmen发表在ICML上的文章。

七、参考资料:

[1].Youtube上Hugo Larochelle的视频讲解:https://www.youtube.com/user/hugolarochelle/videos

[2].DeepLearning tutorial:http://deeplearning.net/tutorial/rbm.html

[3].LSIA:http://www.iro.umontreal.ca/~lisa/twiki/bin/view.cgi/Public/DBNEquations

[4].Yoshua Bengio:Learning Deep Architectures for AI

0 0