深度学习方法:受限玻尔兹曼机RBM【转载】
本文出自Bin的专栏 http://blog.csdn.net/xbinworld
最近在复习经典机器学习算法的同时,也仔细看了一些深度学习的典型算法。深度学习是机器学习的“新浪潮”,它的成功主要得益于深度“神经网络模型”的优异效果。这个小系列打算深入浅出地记录一下深度学习中常用的一些算法。第一篇先写一下“受限玻尔兹曼机”RBM,会分若干个小段写,这是第一段,关于RBM的基本概念。本文很多推导是参考了资料[7],感谢分享,不过我会重新手写一遍。
网上有很多关于RBM的介绍,但是很多写的比较简略,跳过了很多细节,本文尽量追求扣一下细节的同时,做到深入浅出。推荐的参考资料可以看最后的参考文献。
需要的背景知识
要学习RBM需要的一些基本的统计学习基础,包括贝叶斯定理,随机采样方法(Gibbs sampling)等。这些可以翻阅我之前写的一些博文可以看到相关的介绍,在本文中就不具体展开了。总体来说RBM还是相对比较独立的一个算法,不需要依赖太多的先验知识。
RBM基本概念
受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)是G.Hinton教授的一宝。Hinton教授是深度学习的开山鼻祖,也正是他在2006年的关于深度信念网络DBN的工作,以及逐层预训练的训练方法,开启了深度学习的序章。其中,DBN中在层间的预训练就采用了RBM算法模型。RBM是一种无向图模型,也是一种神经网络模型。
RBM具有两层:可见层(V层),以及隐藏层(H层),网络上比较常见的一张图是[1]:
可以看到,两层神经元之间都是全连接的,但是每一层各自的神经元之间并没有连接,也就是说,RBM的图结构是一种二分图(bipartite graph)。正是这个特点,才叫受限玻尔兹曼及,玻尔兹曼机是允许同一层之间的神经元相连的。RBM其实是一种简化了的BM模型。
还有一个特点,RBM中的神经元都是二值化的,也就是说只有激活和不激活两种状态,也就是0或者1;可见层和隐藏层之间的边的权重可以用W来表示,W是一个|V|×|H|大小的实数矩阵。后面一篇讲RBM求解的时候可以看到,算法难点主要就是对W求导(当然还有bias参数),用于梯度下降的更新;但是因为V和H都是二值化的,没有连续的可导函数去计算,实际中采用的sampling的方法来计算,这里面就可以用比如gibbs sampling的方法,当然,Hinton提出了对比散度CD方法,比gibbs方法更快,已经成为求解RBM的标准解法。RBM求解部分将在下一小篇中具体介绍。
OK,第一篇就到这里。
上解上一篇RBM(一)基本概念,本篇记叙一下RBM的模型结构,以及RBM的目标函数(能量函数),通过这篇就可以了解RBM到底是要求解什么问题。在下一篇(三)中将具体描述RBM的训练/求解方法,包括Gibbs sampling和对比散度DC方法。
RBM模型结构
因为RBM隐层和可见层是全连接的,为了描述清楚与容易理解,把每一层的神经元展平即可,见下图[7],本文后面所有的推导都采用下图中的标记来表示。
再重提一下,经典的RBM模型中的神经元都是binary的,也就是说上面图中的神经元取值都是{0,1}的。实际上RBM也可以做实数性的model,不过这一块可以先放一放,先来看binary的基本model。
RBM能量函数
RBM是一个能量模型(Energy based model, EBM),是从物理学能量模型中演变而来;能量模型需要做的事情就是先定义一个合适的能量函数,然后基于这个能量函数得到变量的概率分布,最后基于概率分布去求解一个目标函数(如最大似然)。RBM的过程如下:
我们现在有的变量是(v,h),包括隐层和可见层神经元;参数包括θ=(W,a,b)。能量函数定义:
E_{\theta} (v,h) =-\sum_{i=1}^{n_v}a_i v_i - \sum_{j=1}^{n_h}b_jh_j - \sum_{i=1}^{n_v} \sum_ {j=1}^{n_h}h_jw_{j,i}v_i
如果写成向量/矩阵的形式,则为:
E_{\theta}(v,h)=-a^Tv-b^Th-h^TWv
那么,可以得到变量(v,h)的联合概率分布是:
P_{\theta}(v,h)=\frac{1}{Z_{\theta}}e^{-E_{\theta}(v,h)}
其中,Zθ称为归一化因子,作用是使得概率之和(或者积分)为1,形式为:
Z_\theta=\sum_{v,h}e^{-E_\theta(v,h)}
在上面所有算式中,下标θ都表示在参数θ=(W,a,b)下的表达,为了书写的简洁性,本文余下部分如果没有特殊指定说明,就省略下标θ了,但含义不变。 OK,当我们有了联合概率分布,如果想求观察数据(可见层)的概率分布P(v),则求边缘分布:
P(v)=\sum_hP(v,h)=\frac{1}{Z}\sum_{h}e^{-E(v,h)}
相对应的,如果想求隐层单元的概率分布P(h),则求边缘分布:
P(h)=\sum_vP(v,h)=\frac{1}{Z}\sum_{v}e^{-E(v,h)}
当然,我们不太可能直接计算Z,因为Z的求和中存在指数项种可能——$2^{nv+nh}$种取值。接下来考虑条件概率,即可见层神经元状态给定时,(任意)隐藏层神经元状态为1的概率,即$P(h_k=1|v)$。类似的也可以求$P(v_k=1|h)$,方法也是差不多的,下面就只对$P(h_k=1|v)$进行描述。我们可以推导出:
P(h_k=1|v)== \text{sigmoid}(b_k+\sum_{j=1}^{n_v}w_{kj}v_j)
以及
P(v_k=1|h)== \text{sigmoid}(a_k+\sum_{j=1}^{n_h}w_{jk}h_j)
可以直接知道结果即可,证明可以跳过。这里我们可以看到,sigmoid是一种激励函数,因此才把RBM也叫做一种神经网络模型。 证:以下记$h_{-k}$表示隐藏层神经元k以外的神经元。

因为假设同层神经元之间相互独立,所以有:
P(h|v)=\prod_{j=1}^{n_h}P(h_j|v)P(v|h)=\prod_{i=1}^{n_v}P(v_i|h)
RBM目标函数
假设给定的训练集合是$S={v^i}$,总数是$n_s$,其中每个样本表示为$v_i=(v^i_1,v^i_2,…,v^i_{nv})$,且都是独立同分布i.i.d的。RBM采用最大似然估计,即最大化
\text{ln} L_S = \text{ln} \prod_{i=1}^{n_s}P(v^i)=\sum_{i=1}^{n_s} \text{ln} P(v^i)
RBM的求解问题就是如何最大化似然估计,在下一篇中我会描述常用的求解方法:Gibbs Sampling以及对比散度方法,算是RBM的核心吧。本篇就到这里。
觉得有一点点价值,就支持一下哈!花了很多时间手打公式的说~更多内容请关注Bin的专栏
