欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld。
技术交流QQ群:433250724,欢迎对算法、技术、应用感兴趣的同学增加。
接下来重点讲一下RBM模型求解方法。其有用的依旧是梯度优化方法,可是求解须要用到随机採样的方法。常见的有:Gibbs Sampling和对照散度(contrastive divergence, CD[8])算法。
RBM目标函数
如果给定的训练集合是
參数表示为
当中,
当中则表示一个特定的样本。
(当中第3个等式左边内条件概率)
上面式子的两个部分的含义是期望——左边是梯度下的期望。
要求前面的条件概率是比較easy一些的。而要求后面的联合概率分布是非常困难的,由于它包括了归一化因子(对全部可能的取值求和,连续的情况下是积分)。因此我们採用一些随机採样来近似求解。把上面式子再推导一步,能够得到。
因此。我们重点就是须要就算来说,有
相似的。我们能够非常easy得到:
于是,我们非常easy得到,
上面求出了一个样本的梯度。对于个样本有
到这里就比較明白了,主要就是要求出上面三个梯度;可是由于不好直接求概率分布,前面分析过,计算复杂度非常大。因此採用一些随机採样的方法来得到近似的解。看这三个梯度的第二项实际上都是求期望,而我们知道。样本的均值是随机变量期望的无偏预计。
Gibbs Sampling
非常多资料都有提到RBM能够用Gibbs Sampling来做。可是详细怎么做不讲(是不是有点蛋疼?),可能非常多人也不清楚究竟怎么做。以下略微介绍一下。
吉布斯採样(Gibbs sampling),是MCMC方法的一种,详细能够看我前面整理的随机採样MCMC的文章。
总的来说,Gibbs採样能够从一个复杂概率分布,就能够对其进行採样。
而RBM模型的特殊性。隐藏层神经元的状态仅仅受可见层影响(反之亦然),并且同一层神经元之间是相互独立的,那么就能够依据例如以下方法依次採样:
也就是说
有了样本},比方迭代100次取后面一半,带入上面梯度公式的后半部分计算平均值。)
看起来非常简单是不是?可是问题是。每一次gibbs採样过程都须要重复迭代非常多次以保证马尔科夫链收敛。而这仅仅是一次梯度更新,多次梯度更新须要重复使用gibbs採样,使得算法执行效率非常低。为了加速RBM的训练过程,Hinton等人提出了对照散度(Contrastive Divergence)方法。大大加快了RBM的训练速度,将在下一篇重点讲一下。
OK。本篇先到这里。平时工作比較忙。加班什么的(IT的都这样)。晚上回到家比較晚。每天仅仅能挤一点点时间写。写的比較慢。见谅。RBM这一块能够看的资料非常多。网上一搜一大堆。还包括hinton的一些论文和Bengio的综述[9]。只是详细手写出来的思路还是借鉴了[7]。看归看。我会自己推导并用自己的语言写出来。大家有什么问题都能够留言讨论。下一篇最后讲一下CD算法。后面有时间再拿code出来剖析一下。
觉得有一点点价值,就支持一下哈!
花了非常多时间手打公式的说~很多其它内容请关注Bin的专栏
參考资料
[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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling - Python技术站