RBM学习算法
2016-02-03 18:28
316 查看
RBM基础
RBM模型是基于能量的模型。对于一组给定的状态(v.h),其能量函数为Eθ(v,h)=−∑i=1Nvaivi−∑j=1Nhbjhj−∑i=1Nv∑j=1Nhhjwjivi利用上述能量函数给出(v.h)的联合分布为Pθ(v,h)=1Zθe−Eθ(v,h)其中,θ=(W,a,b),W=[wij]Nv∗Nh表示vi和hj之间的连接权重,a=(a1,a2,...,aNv)、b=(b1,b2,...,bNh)分别表示观测单元v,隐藏单元h的偏置。Zθ=∑v,he−Eθ(v,h)
RBM的学习算法
求解更好拟合训练数据的RBM参数θ,方法是使用极大似然法,极大似然函数为Lθ=Pθ(v)=∑hPθ(v|h)设训练样本集合S=(v1,...,vNs),对数极大似然函数为lnLθ,S=ln(∏n=1NsPθ(vn))=∑n=1NslnPθ(vn)此时,RBM学习的目标为极大化上式,使用梯度上升(gradient ascent),通过如下的迭代格式来求解θ:=θ+η∂lnLθ,S∂θη是学习率,问题的关键是求解梯度∂lnLθ,S∂θ,省略Lθ,S中的θ,对于单个样本v计算似然函数lnLS=lnP(v)=ln(1Z∑he−E(v,h))=ln∑he−E(v,h)−lnZ=ln∑he−E(v,h)−ln∑v,he−E(v,h)
上式中红色v表示单个训练样本,黑色v表示任意的训练样本。针对单个样本v进一步计算梯度(省略了推导过程)∂LS∂θ=∂lnP(v)∂θ=−∑hP(h|v)∂E(v,h)∂θ+∑v,hP(v,h)∂E(v,h)∂θ上式中包含两个期望,第一个∑hP(h|v)∂E(v,h)∂θ为能量梯度∂E(v,h)∂θ在分布P(h|v)下的期望,对应每个训练样本数据遍历其可能的隐藏数据的值,可以求得;第二个∑v,hP(v,h)∂E(v,h)∂θ为能量梯度∂E(v,h)∂θ在分布P(v,h)下的期望,对应于每个可能的v求其隐藏数据的值,计算量非常大。其中,∑v,hP(v,h)∂E(v,h)∂θ=∑v∑hP(v)P(h|v)∂E(v,h)∂θ=∑vP(v)∑hP(h|v)∂E(v,h)∂θ因此,只需讨论∑hP(h|v)∂E(v,h)∂θ的计算,下面对θ=(wij,ai,bj)分别进行计算(省略推导过程)∑hP(h|v)∂E(v,h)∂wij∑hP(h|v)∂E(v,h)∂ai∑hP(h|v)∂E(v,h)∂bj=−P(hi=1|v)vj=−vi=−P(hj=1|v)对于单个训练样本v,各个梯度为
∂lnP(v)∂wi,j=−∑hP(h|v)∂E(v,h)∂wi,j+∑v,hP(v,h)∂E(v,h)∂wi,j=P(hi=1|v)vj−∑vP(v)P(hi=1|v)vj
∂lnP(v)∂ai=−∑hP(h|v)∂E(v,h)∂ai+∑v,hP(v,h)∂E(v,h)∂ai=vi−∑vP(v)vi
∂lnP(v)∂bj=−∑hP(h|v)∂E(v,h)∂bj+∑v,hP(v,h)∂E(v,h)∂bj=P(hi=1|v)−∑vP(v)P(hi=1|v)
以上是针对单个训练样本的情形,在整个样本空间S=v1,...,vns上有∂LS∂θ=∂lnP(vm)∂θ从而可得如下公式,∂lnP(v)∂wi,j∂lnP(v)∂ai∂lnP(v)∂bj=∑m=1Ns[P(hi=1|vm)vmj−∑vP(v)P(hi=1|v)vj]=∑m=1Ns[vmi−∑vP(v)vi]=∑m=1Ns[P(hi=1|vm)−∑vP(v)P(hi=1|v)]上述三个公式中,∑v项的计算复杂度为O(2Nv+Nh),可以通过MCMC方法如Gibbs进行采样,并用样本对∑v项进行估计。k步Gibbs抽样过程如下h(0)←P(h|v(0))h(1)←P(h|v(1))... ,v(1)←P(v|h(0)),v(2)←P(v|h(1)),v(k)←P(v|h(k−1))这样得到的v(k)可以用来估计上式中的∑v项,根据MCMC采样的思想,将上述三个式子进一步推导,并使用v(k)来近似可得
∂lnP(v)∂wi,j∂lnP(v)∂ai∂lnP(v)∂bj=∑m=1Ns[P(hi=1|vm)vmj−∑vP(v)P(hi=1|v)vj]≈∑m=1Ns[P(hi=1|vm)vmj−P(hi=1|v(k))v(k)j]=∑m=1Ns[vmi−∑vP(v)vi]≈∑m=1Ns[vmi−v(k)i]=∑m=1Ns[P(hi=1|vm)−∑vP(v)P(hi=1|v)]≈∑m=1Ns[P(hi=1|vm)−P(hi=1|v(k))]但是常规的gibbs采样的k需要足够大,才能使得采集到的样本符合RBM分布,Hinton教授发明了对比散度(Contrastive Divergence,CD)方法,通过使用训练样本集S中的观测数据vi来初始化v(0)来减少状态转移次数,具体做法是在算法的开始将可见状态v(0)设置为一个训练样本,并使用条件概率P(hj=1|v(0))对每个隐藏单元抽取0~1之间的概率值,然后利用P(vi=1|h(0))对观测单元抽取概率值,这样就得到v(1),一般v(1)就够了,即k=1,如下是CD-k算法的主要步骤:
CDK(k,S,RBM();Δw,Δa,Deltab)
- 输入:k,S,RBM(W,a,b)
- 输出:Dw,Da,Db
step 1 初始化:Δw=0,Δa=0,Δb=0
Step 2 对S中的样本循环生成Δw,Δa,Δb
FOR v∈S DO{v(0):=vFOR t=0,1,...,k−1 DO{h(t)=sample_h_given_v(v(t),RBM(w,a,b));v(t+1)=sample_v_given_h(h(t),RBM(w,a,b));}FOR i=1,2,...,Nv;j=1,2,...,Nh DO{Δwi,j=Δwi,j+[P(hj=1|v(0))v(0)i−P(hj=1|v(k))v(k)i];Δai=Δai+[v(0)i−v(k)i]; Δbj=Δbj+[P(hj=1|v(0))−P(hj=1|v(k))];}}其中,记phi=P(vi=1|h),i=1,2,...,Nv ,sample_v_given_h的计算可写成
FOR v∈S DO{generateRadom ri∈[0,1];vi={1,if ri<phi;0,otherwise.}
sample_h_given_v的计算与sample_v_given_h类似.
将上述的CD−k算法用于完整的RBM算法如下
Step 1 初始化
(1)给定训练样本集合S(|S|==Ns)
(2)给定训练周期J,学习率η以及CD−k算法参数k
(3)指定可见层和隐藏层的单元数目Nv,Nh
(4)初始化偏置向量以及权重矩阵(a,b,w)
Step 2 训练
FOR iter=1,2,...,J DO{CDK(k,S,RBM(W,a,b));UPDATE W=W+η(1NsΔW),a=a+η(1NsΔa),b=b+η(1NsΔb)}
使用Python实现上述算法的示例
相关文章推荐
- Restricted Boltzmann Machine 受玻尔兹曼机与DBM深度信念网络
- RBM学习笔记
- DBN爬坑记之RBM
- Yusuke Sugomori 的 C 语言 Deep Learning 程序解读
- 受限玻尔兹曼机(RBM)学习笔记(一)预备知识
- 受限玻尔兹曼机(RBM)学习笔记(二)网络结构
- 受限玻尔兹曼机(RBM)学习笔记(三)能量函数和概率分布
- 受限玻尔兹曼机(RBM)学习笔记(四)对数似然函数
- 受限玻尔兹曼机(RBM)学习笔记(五)梯度计算公式
- 受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法
- 受限玻尔兹曼机(RBM)学习笔记(七)RBM 训练算法
- 受限玻尔兹曼机(RBM)学习笔记(八)RBM 的评估
- [Machine Learning] RBM Brief Introduction
- RBM Deep Learning
- Deep Learning模型之:Restricted Boltzmann Machine (RBM)
- 深度学习(八)RBM受限波尔兹曼机学习-未完待续
- Introduction to Restricted Boltzmann Machines
- Stacking Autoencoders VS Stacking RBMs
- Stacking Autoencoders vs DBN
- Restricted Boltzmann Machines (RBM)