深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD

来源:互联网 发布:达内 专业硕士java 编辑:程序博客网 时间:2024/05/09 05:56

欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学加入

上篇讲到,如果用Gibbs Sampling方法来训练rbm会非常慢,本篇中介绍一下对比散度contrastive divergence, CD算法。

我们希望得到P(v)分布下的样本,而我们有训练样本,可以认为训练样本就是服从P(v)的。因此,就不需要从随机的状态开始gibbs采样,而从训练样本开始。

CD算法大概思路是这样的,从样本集任意一个样本v0开始,经过k次Gibbs采样(实际中k=1往往就足够了),即每一步是:

ht1P(h|vt1)vtP(v|ht1)

得到样本vk,然后对应于上一篇三个单样本的梯度,用vk去近似:

lnP(v)wijP(hi=1|v0)v0jP(hi=1|vk)vkjlnP(v)ai=v0ivkilnP(v)biP(hi=1|v0)P(hi=1|vk)

上述近似的含义是说,用一个采样出来的样本来近似期望的计算。到这里,我们就可以计算LS的梯度了,上面的CD-k算法是用于在一次梯度更新中计算梯度近似值的。下面给出CD-k的算法执行流程,这里小偷懒一下,就借用截图了[7]。

这里写图片描述

其中,sample_h_given_v(v,W,a,b),做的事情是这样的(sample_v_given_v(h,W,a,b)类似):
qj=P(hj|v),j=1,2,,nh,产生一个[0,1]的随机数rj,对每一个hj,如果rj<qj,则hj=1,否则hj=0

OK, 有了CD-k算法,我们也可以总结RMB整个算法了[7],

这里写图片描述

好,到这里基本讲完了,还有一些细节trick,是不在RBM本身范畴的,在实现的时候可以具体参考[2]。后面有时间再补一篇关于RBM代码的解读。

参考资料
[1] http://www.chawenti.com/articles/17243.html
[2] 张春霞,受限波尔兹曼机简介
[3] http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html
[4] http://deeplearning.net/tutorial/rbm.html
[5] Asja Fischer, and Christian Igel,An Introduction to RBM
[6] G.Hinton, A Practical Guide to Training Restricted Boltzmann Machines
[7] http://blog.csdn.net/itplus/article/details/19168937
[8] G.Hinton, Training products of experts by minimizing contrastive divergence, 2002.
[9] Bengio, Learning Deep Architectures for AI, 2009

4 0
原创粉丝点击