本文主要是介绍受限制玻尔兹曼机RBM原理简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言
受限玻尔兹曼机RBM在深度学习领域一直有重要的应用,之前一直没有接触过RBM,觉得太复杂,公式太多,这几天在Google上找到些好的turtorial,可以在这里做一个总结。
玻尔兹曼机BM
BM背景
Boltzmann machines(BM)是Markov Random Fields with pairwise interaction potentials. 这里的potential,也就是势能,是来源于物理的应用。BM和多层神经网络有着相似的结构,而且BM中的节点值是二值的(非0即1),BM的节点是成对作用的,Hinton使用了基于采样的方法用于BM的训练,使得BM能够被应用到具体问题。
玻尔兹曼分布(Boltzmann Distribution)
玻尔兹曼分布最开始是由Gibbs在统计原理里面提出来的,
玻尔兹曼机结构
玻尔兹曼机是二值的马尔科夫随机场(Markov Random Filed),一个玻尔兹曼机可以表示为带权重的无向图:
如上图所示,对于有n个节点的无向图,由于每个节点是二值的,所以一共有
可见节点和隐含节点
典型的BM有可见节点(Visible Node)和隐含节点(Hidden Node), 可见节点后面使用 v 表示,隐含节点用
学习BM的参数
在上一节中,已经给出了 p(v) 的最大似然函数,现在是如何训练。按照套路,根据最大似然函数的对数,我们对参数进行求导:
而:
因此:
其实可以看出的是这个训练有个巨大的问题是, h′ 和 v′ 都是未知的,如果对全部可能的状态进行计算,无疑其计算量将会是巨大的,这个训练是不可接受的。这里就要用到采样的方法了.常用的采样方法有MCMC和Gibbs采样,因为本人非数学专业出身,所以也就不想太钻研这些理论,这里直接上玻尔兹曼机的Gibbs采样的方法。
玻尔兹曼机的Gibbs采样方法
- 使用 x−j 更新 xj : P(xj|x−j)∝P(xj,x−j)
- 使用 P(xj,x−j) 带入计算
玻尔兹曼机wake-sleep算法
*. wake 步:根据 P(h′|v) 采样生成 h′
*. sleep步:根据 P(v′⊙h′) 采样生成 v′⊙h′ ,也叫”dream”步骤
*. 计算求导
*. 重复上述步骤
其实wake步就是对应公式(1)的前半部分采样,sleep步就是对应公式(1)的后半部分采样。
受限制玻尔兹曼机RBM
受限制玻尔兹曼机是一种特殊的玻尔兹曼机,之所以是受限的,是因为,在RBM中,所有的连接都是在隐含节点和可见节点之间的,而在隐含节点内部和可见节点内部并没有连接,一个典型的RBM的结构就是一个二分图:
RBM的能量函数和之前的BM是一样的:
其中 c 和
RBM的wake-sleep方法
*. wake步骤,因为在RBM中,可见节点和隐含节点都是相互独立的,因此RBM的wake步骤可以直接计算,不需要采样
*. sleep步骤,在sleep步骤中仍然需要采样,但是有更加结构化的采样方法:Blocked Gibbs:
1. 利用可见节点数据采样隐含节点
2. 利用采样出来的隐含节点,采样隐含节点
这里每个采样步骤都可以并行!
对比分歧:Contrastive Divergence
上面提到了Blocked Gibbs,那么如何初始化采样器呢?对比分歧采样的是使用训练可见的数据进行初始化,而且不需要多次Blocked Gibbs采样。这种做法的启发是一个好的模型的采样器应该尽可能的接近可见的训练数据。
具体的操作步骤可以表示为:
上图表明了受限玻尔兹曼机中的采样方法,我们根据公式(2)算过的求取
其实可以看出,只需采样两个Blocked Gibbs即可。如果这两次采样的结果是一致的,参数将不会进行更新。采样这种方法,我们就可以使用熟悉的随机梯度下降的方法来进行训练了.
文字性的描述RBM 的采样和更新方法:
1. 使用训练数据可视化可见节点
2. 使用可见节点数据更新隐含节点
3. 使用隐含节点再次更新可见节点数据
4. 使用新的可见节点数据再次更新新的隐含节点序列
到这一步,我们可以很容易的对RBM的参数进行更新了,我们将P(h^{‘}|v)和P(v^{‘}\odot h^{‘})设置成相同的值,可以设置成 1N ,那么我们将得到RBM的参数更新公式:
这个式子可以具体对应到公式(4),那么如何更新值呢?在RBM中按照下面的步骤进行更新RBM网络的值:
1. 使用输入可见节点数据更新隐含节点:
2. 使用步骤1中的 hj 更新新的可见节点:
至此我们可以得到各个参数更新的方法:
到这里我们应该也能够明白,这篇传阅度很广的博客: Introduction to Restricted Boltzmann Machines的里面的参数更新原理了。
[注:本渣硕的数学功底有限,简单的推导已经是穷尽高数的知识了,不对的地方请勘正,也可以联系我的邮箱:luchi727@qq.com
这篇关于受限制玻尔兹曼机RBM原理简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!