限制波尔兹曼机(RBM)

一、限制波尔兹曼机(RBM)使用方法

1.1 RBM的使用说明

一个普通的RBM网络结构如下。

以上的RBM网络结构有m个可视节点和n个隐藏节点,其中每个可视节点只和n个隐藏节点相关,和其他可视节点是独立的,就是这个可视节点的状态只受n个隐藏节点的影响,对于每个隐藏节点也是,只受m个可视节点的影响,这个特点使得RBM的训练变得容易了。

RBM网络有几个参数,一个是可视层与隐藏层之间的权重矩阵 ,一个是可视节点的偏移量 b=(b_1,b_2,\cdots,b_m) ,一个是隐藏节点的偏移量 c=(c_1,c_2,\cdots,c_n) ,这几个参数决定了RBM网络将一个m维的样本编码成一个什么样的n维的样本。

RBM网络的功能有下面的几种,就简单地先描述一下。

首先为了描述容易,先假设每个节点取值都在集合 中,即 \forall{i,j},v_j\in \{0,1\},h_i\in\{0,1\}

一个训练样本x过来了取值为,根据RBM网络,可以得到这个样本的m维的编码后的样本 {\rm{x}} = ({{\rm{x}}_1},{{\rm{x}}_2}, \cdots ,{{\rm{x}}_{\rm{m}}}) ,这n维的编码也可以认为是抽取了n个特征的样本。而这个m维的编码后的样本是按照下面的规则生成的:对于给定的,隐藏层的第i个节点的取值为1(编码后的样本的第i个特征的取值为1)的概率为 {\rm{p}}\left({{{\rm{h}}_{\rm{i}}}=1{\rm{|v}}}\right)={\rm{\sigma}}(\mathop\sum\limits_{{\rm{j}}=1}^{\rm{m}}{{\rm{w}}_{{\rm{ij}}}}\times{{\rm{v}}_{\rm{j}}}+{{\rm{c}}_{\rm{i}}}) ,其中的v取值就是x,hi的取值就是yi,其中 {\rm{\sigma }}\left( {\rm{x}} \right) = 1/(1 + {{\rm{e}}^{ - {\rm{x}}}}) ,是sigmoid函数。也就是说,编码后的样本y的第i个位置的取值为1的概率是 。所以,生成yi的过程就是:

i)先利用公式 {\rm{p}}\left( {{{\rm{h}}_{\rm{i}}} = 1{\rm{|v}}} \right) = {\rm{\sigma }}(\mathop \sum \limits_{{\rm{j}} = 1}^{\rm{m}} {{\rm{w}}_{\rm{i}}}_{\rm{j}} \times {{\rm{v}}_{\rm{j}}} + {{\rm{c}}_{\rm{i}}}) ,根据x的值计算概率 ,其中vj的取值就是xj的值。

ii)然后产生一个0到1之间的随机数,如果它小于 ,yi的取值就是1,否则就是0(假如p(hi=1|v)=0.6,这里就是因为yi的取值就是1的概率是,0.6,而这个随机数小于0.6的概率也是0.6;如果这个随机数小于0.6,就是这个事件发生了,那就可以认为yi的取值是1这个事件发生了,所以把yi取值为1)。

反过来,现在知道了一个编码后的样本y,想要知道原来的样本x,即解码过程,跟上面也是同理,过程如下:

i)先利用公式 p({v_j} = 1{\rm{|}}h) = \sigma (\sum\nolimits_{i = 1}^n {{w_{ij}} \times {h_i} + {b_j}} ) ,根据y的值计算概率 ,其中hi的取值就是yi的值。

ii)然后产生一个0到1之间的随机数,如果它小于 ,vj的取值就是1,否则就是0。

1.2 RBM的用途

RBM的用途主要是两种,一是对数据进行编码,然后交给监督学习方法去进行分类或回归,二是得到了权重矩阵和偏移量,供BP神经网络初始化训练。

第一种可以说是把它当做一个降维的方法来使用。

第二种就用途比较奇怪。其中的原因就是神经网络也是要训练一个权重矩阵和偏移量,但是如果直接用BP神经网络,初始值选得不好的话,往往会陷入局部极小值。根据实际应用结果表明,直接把RBM训练得到的权重矩阵和偏移量作为BP神经网络初始值,得到的结果会非常地好。

这就类似爬山,如果一个风景点里面有很多个山峰,如果让你随便选个山就爬,希望你能爬上最高那个山的山顶,但是你的精力是有限的,只能爬一座山,而你也不知道哪座山最高,这样,你就很容易爬到一座不是最高的山上。但是,如果用直升机把你送到最高的那个山上的靠近山顶处,那你就能很容易地爬上最高的那座山。这个时候,RBM就的角色就是那个直升机。

其实还有两种用途的,下面说说。

第三种,RBM可以估计联合概率p(v,h),如果把v当做训练样本,h当成类别标签(隐藏节点只有一个的情况,能得到一个隐藏节点取值为1的概率),就可以利用利用贝叶斯公式求p(h|v),然后就可以进行分类,类似朴素贝叶斯、LDA、HMM。说得专业点,RBM可以作为一个生成模型(Generative model)使用。

第四种,RBM可以直接计算条件概率p(h|v),如果把v当做训练样本,h当成类别标签(隐藏节点只有一个的情况,能得到一个隐藏节点取值为1的概率),RBM就可以用来进行分类。说得专业点,RBM可以作为一个判别模型(Discriminative model)使用。

二、限制波尔兹曼机(RBM)能量模型

2.1 能量模型定义

在说RBM之前,先来说点其他的,就是能量模型。

能量模型是个什么样的东西呢?直观上的理解就是,把一个表面粗糙又不太圆的小球,放到一个表面也比较粗糙的碗里,就随便往里面一扔,看看小球停在碗的哪个地方。一般来说停在碗底的可能性比较大,停在靠近碗底的其他地方也可能,甚至运气好还会停在碗口附近(这个碗是比较浅的一个碗);能量模型把小球停在哪个地方定义为一种状态,每种状态都对应着一个能量,这个能量由能量函数来定义,小球处在某种状态的概率(如停在碗底的概率跟停在碗口的概率当然不一样)可以通过这种状态下小球具有的能量来定义(换个说法,如小球停在了碗口附近,这是一种状态,这个状态对应着一个能量E,而发生"小球停在碗口附近"这种状态的概率p,可以用E来表示,表示成p=f(E),其中f是能量函数),这就是我认为的能量模型。

这样,就有了能量函数,概率之类的东西。

波尔兹曼网络是一种随机网络。描述一个随机网络,总结起来主要有两点。

第一,概率分布函数。由于网络节点的取值状态是随机的,从贝叶斯网的观点来看,要描述整个网络,需要用三种概率分布来描述系统。即联合概率分布,边缘概率分布和条件概率分布。要搞清楚这三种不同的概率分布,是理解随机网络的关键,这里向大家推荐的书籍是张连文所著的《贝叶斯网引论》。很多文献上说受限波尔兹曼是一个无向图,从贝叶斯网的观点看,受限波尔兹曼网络也可以看作一个双向的有向图,即从输入层节点可以计算隐层节点取某一种状态值的概率,反之亦然。

第二,能量函数。随机神经网络是根植于统计力学的。受统计力学中能量泛函的启发,引入了能量函数。能量函数是描述整个系统状态的一种测度。系统越有序或者概率分布越集中,系统的能量越小。反之,系统越无序或者概率分布越趋于均匀分布,则系统的能量越大。能量函数的最小值,对应于系统的最稳定状态。

2.2 能量模型作用

为什么要弄这个能量模型呢?原因有几个。

第一、RBM网络是一种无监督学习的方法,无监督学习的目的是最大可能的拟合输入数据,所以学习RBM网络的目的是让RBM网络最大可能地拟合输入数据。

第二、对于一组输入数据来说,现在还不知道它符合那个分布,那是非常难学的。例如,知道它符合高斯分布,那就可以写出似然函数,然后求解,就能求出这个是一个什么样个高斯分布;但是要是不知道它符合一个什么分布,那可是连似然函数都没法写的,问题都没有,根本就无从下手。好在天无绝人之路——统计力学的结论表明,任何概率分布都可以转变成基于能量的模型,而且很多的分布都可以利用能量模型的特有的性质和学习过程,有些甚至从能量模型中找到了通用的学习方法。有这样一个好东西,当然要用了。

第三、在马尔科夫随机场(MRF)中能量模型主要扮演着两个作用:一、全局解的度量(目标函数);二、能量最小时的解(各种变量对应的配置)为目标解。也就是能量模型能为无监督学习方法提供两个东西:a)目标函数;b)目标解。

换句话说,就是——使用能量模型使得学习一个数据的分布变得容易可行了。

能否把最优解嵌入到能量函数中至关重要,决定着我们具体问题求解的好坏。统计模式识别主要工作之一就是捕获变量之间的相关性,同样能量模型也要捕获变量之间的相关性,变量之间的相关程度决定了能量的高低。把变量的相关关系用图表示出来,并引入概率测度方式就构成了概率图模型的能量模型。

RBM作为一种概率图模型,引入了概率就可以使用采样技术求解,在CD(contrastive divergence)算法中采样部分扮演着模拟求解梯度的角色。

能量模型需要一个定义能量函数,RBM的能量函数的定义如下

{\rm{E}}\left({{\rm{v}},{\rm{h}}}\right)=-\mathop\sum\limits_{i=1}^n\mathop\sum\limits_{j=1}^m{w_{ij}}{h_i}{v_j}-\mathop\sum\limits_{j=1}^m{b_j}{v_j}-\mathop\sum\limits_{i=1}^n{c_i}{h_i}

这个能量函数的意思就是,每个可视节点和隐藏节点之间的连接结构都有一个能量,通俗来说就是可视节点的每一组取值和隐藏节点的每一组取值都有一个能量,如果可视节点的一组取值(也就是一个训练样本的值)为(1,0,1,0,1,0),隐藏节点的一组取值(也就是这个训练样本编码后的值)为(1,0,1),然后分别代入上面的公式,就能得到这个连接结构之间的能量。

能量函数的意义是有一个解释的,叫做专家乘积系统(POE,product of expert),这个理论也是hinton发明的,他把每个隐藏节点看做一个"专家",每个"专家"都能对可视节点的状态分布产生影响,可能单个"专家"对可视节点的状态分布不够强,但是所有的"专家"的观察结果连乘起来就够强了。具体我也看不太懂,各位有兴趣看hinton的论文吧,中文的也有,叫《专家乘积系统的原理及应用,孙征,李宁》。

另外的一个问题是:为什么要搞概率呢?下面就是解释。

能量模型需要两个东西,一个是能量函数,另一个是概率,有了概率才能跟要求解的问题联合起来。

下面就介绍从能量模型到概率吧。

三、从能量模型到概率

3.1 从能量函数到概率

为了引入概率,需要定义概率分布。根据能量模型,有了能量函数,就可以定义一个可视节点和隐藏节点的联合概率

{\rm{p}}\left( {{\rm{v}},{\rm{h}}} \right) = \frac{{{e^{ - E(v,h)}}}}{{\mathop \sum \nolimits_{v,h} {e^{ - E(v,h)}}}}


也就是一个可视节点的一组取值(一个状态)和一个隐藏节点的一组取值(一个状态)发生的概率p(v,h)是由能量函数来定义的。

这个概率不是随便定义的,而是有统计热力学的解释的——在统计热力学上,当系统和它周围的环境处于热平衡时,一个基本的结果是状态i发生的概率如下面的公式

{{\rm{p}}_i} = \frac{1}{Z} \times {e^{ - \frac{{{E_i}}}{{{k_b} \times T}}}}

其中 表示系统在状态i时的能量,T为开尔文绝对温度, 为Boltzmann常数,Z为与状态无关的常数。

我们这里的 变成了E(v,h),因为(v,h)也是一个状态,其他的参数T和 由于跟求解无关,就都设置为1了,Z就是我们上面联合概率分布的分母,这个分母是为了让我们的概率的和为1,这样才能保证p(v,h)是一个概率。

现在我们得到了一个概率,其实也得到了一个分布,其实这个分布还有一个好听点的名字,可以叫做Gibbs分布,当然不是一个标准的Gibbs分布,而是一个特殊的Gibbs分布,这个分布是有一组参数的,就是能量函数的那几个参数w,b,c。

有了这个联合概率,就可以得到一些条件概率,是用积分去掉一些不想要的量得到的。

3.2 从概率到极大似然

上面得到了一个样本和其对应编码的联合概率,也就是得到了RBM网络的Gibbs分布的概率密度函数,引入能量模型的目的是为了方便求解的。

现在回到求解的目标——让RBM网络的表示Gibbs分布最大可能的拟合输入数据。

其实求解的目标也可以认为是让RBM网络表示的Gibbs分布与输入样本的分布尽可能地接近。

现在看看"最大可能的拟合输入数据"这怎么定义。

假设 表示样本空间,q是输入样本的分布,即q(x)表示训练样本x的概率, q其实就是要拟合的那个样本表示分布的概率;再假设p是RBM网络表示的Gibbs分布的边缘分布(只跟可视节点有关,隐藏节点是通过积分去掉了,可以理解为可视节点的各个状态的分布),输入样本的集合是S,那现在就可以定义样本表示的分布和RBM网络表示的边缘分布的KL距离

KL(q||p) = \sum\limits_{x \in \Omega } {q(x)\ln \frac{{q(x)}}{{p(x)}} = \sum\limits_{x \in \Omega } {q(x)\ln q(x) - \sum\limits_{x \in \Omega } {q(x)\ln p(x)} } }

如果输入样本表示的分布与RBM表示的Gibbs分布完全符合,这个KL距离就是0,否则就是一个大于0的数。

第一项其实就是输入样本的熵(熵的定义),输入样本定了熵就定了;第二项没法直接求,但是如果用蒙特卡罗抽样(后面有章节会介绍)来估算这个值,但是,偷懒一下,直接把输入样本当作利用抽样过程抽中的样本(输入样本肯定符合分布q(x)),第二项可以用 \frac{1}{l}\mathop \sum \limits_{x \in S} {\rm{ln}}p\left( x \right) 来估计,其中的 l 表示训练样本个数。由于KL的值肯定是不小于0,所以第一项肯定不小于第二项,让第二项取得最大值,就能让KL距离最小;最后,还可以发现,最大化 \frac{1}{l}\mathop \sum \limits_{x \in S} {\rm{ln}}p\left( x \right) ,相当于最大化 \mathop \sum \limits_{x \in S} {\rm{ln}}p(x) ,而这就是极大似然估计。

结论就是求解输入样本的极大似然,就能让RBM网络表示的Gibbs分布和样本本身表示的分布最接近。这就是为什么RBM问题最终可以转化为极大似然来求解。

利用极大似然求解后,保证了在反编码(从隐藏节点到可视节点的编码过程)过程中,能使训练样本出现的概率最大,也就是使得反编码的误差尽最大的可能最小。

例如一个样本(1,0,1,0,1)编码到(0,1,1),那么,(0,1,1)从隐藏节点反编码到可视节点的时候也要大概率地编码到(1,0,1,0,1)。

到这,能量模型到极大似然的关系说清楚了。

之前想过用似然函数最大的时候,RBM网络的能量最小这种思路去解释,但具体的证明过程推导比较复杂,这里没必要详述。

下面就说怎么求解了。求解的意思就是求RBM网络里面的几个参数w,b,c的值,这个就是解,而似然函数(对数似然函数)是目标函数。最优化问题里面的最优解和目标函数的关系大家务必先弄清楚。

四、求解极大似然

将RBM关于可视节点的边缘概率分布P(v)代入,则可得: \sum\limits_{v\in S}{\ln P(v)}=\sum\limits_{v\in S}{\left( \ln (\sum\limits_{h}{{{e}^{-E(v,h)}}})-\ln (\sum\limits_{v,h}{{{e}^{-E(v,h)}}}) \right)}

分别对各参数求偏导,可得:

\begin{array}{*{20}{l}}
  {\frac{{\partial \sum\limits_{v \in S} {{\text{lnp}}\left( {\text{v}} \right)} }}{{\partial {w_{ij}}}}}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h|v} \right)( - \frac{{\partial E\left( {v,h} \right)}}{{\partial {w_{ij}}}}) - \sum\limits_{v,h} p \left( {v,h} \right)\left( { - \frac{{\partial E\left( {v,h} \right)}}{{\partial {w_{ij}}}}} \right)} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h{\text{ }}|{\text{ }}v} \right){h_i}{v_j} - \sum\limits_v p \left( v \right)\sum\limits_h p \left( {h{\text{ }}|{\text{ }}v} \right){h_i}{v_j}} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {p\left( {{h_i} = 1{\text{ }}|{\text{ }}v} \right){v_j} - \sum\limits_v p (v)p({h_i} = 1|v){v_j}} \right)} } 
\end{array}

\begin{array}{*{20}{l}}
  {\frac{{\partial \sum\limits_{v \in S} {{\text{lnp}}\left( {\text{v}} \right)} }}{{\partial {b_j}}}}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h|v} \right)( - \frac{{\partial E\left( {v,h} \right)}}{{\partial {b_j}}}) - \sum\limits_{v,h} p \left( {v,h} \right)\left( { - \frac{{\partial E\left( {v,h} \right)}}{{\partial {b_j}}}} \right)} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h{\text{|}}v} \right){v_j} - \sum\limits_v p \left( v \right)\sum\limits_h p \left( {h{\text{|}}v} \right){v_j}} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {{v_j} - \sum\limits_v p (v){v_j}} \right)} } \\ 
\end{array}

\begin{array}{*{20}{l}}
  {\frac{{\partial \sum\limits_{v \in S} {{\text{lnp}}\left( {\text{v}} \right)} }}{{\partial {c_i}}}}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h|v} \right)( - \frac{{\partial E\left( {v,h} \right)}}{{\partial {c_i}}}) - \sum\limits_{v,h} p \left( {v,h} \right)\left( { - \frac{{\partial E\left( {v,h} \right)}}{{\partial {c_i}}}} \right)} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {\sum\limits_h p \left( {h{\text{|}}v} \right){h_i} - \sum\limits_v p \left( v \right)\sum\limits_h p \left( {h{\text{|}}v} \right){h_i}} \right)} } \\ 
  {}&{ = \sum\limits_{v \in S} {\left( {p\left( {{h_i} = 1{\text{|}}v} \right) - \sum\limits_v p (v)p({h_i} = 1|v)} \right)} } \\ 
\end{array}

以上三个偏导公式,前一项中 p(h_i=1|v)=\sigma(\sum_{j=1}^m{w_{ij}\times v_j}+c_i) ;后一项需要遍历所有可能的v值(共 种组合),当v的维数较高时,计算量非常大,甚至不可解。实际上 表示当v服从p(v)分布时,f(v)的期望值。根据蒙特卡洛方法,可通过构造满足p(v)分布的随机抽样样本集,利用f(v)在该样本集上的均值来近似所求期望值,即首先通过某种抽样方法构造满足p(v)分布的抽样样本集 R=\{v_1,v_2,\cdots,v_l\} ,从而, \sum\limits_{v}{p}(v)f(v)\approx \frac{1}{l}\sum\limits_{i=1}^{l}{f({{v}_{i}})} 。至此,三个偏导都可以计算出来,通过梯度下降算法则可求得使RBM网络最大程度拟合输入样本分布的参数w、b和c。

五、Gibbs抽样与CD算法

前面提到通过某种抽样方法构造满足p(v)分布的抽样样本集。这种抽样方法叫做Gibbs抽样,Hinton教授根据Gibbs抽样设计了在深度学习领域非常著名的算法:对比散度(Contrastive Divergence, CD)算法,该算法比常规的Gibbs抽样方法更高效。下面简单介绍Gibbs抽样的原理以及CD算法的过程。

Gibbs抽样是一种基于马尔科夫蒙特卡罗(Markov Chain Monte Carlo, MCMC)策略的抽样方法。具体就是,对于一个随机向量 x=(x_1,x_2,\cdots,x_d) ,假设我们无法求得x的联合概率分布p(x),但我们知道给定x的其它分量时,其第i个分量 的条件分布,即 p(x_i|x_{i-}),x_{i-}=(x_1,x_2,\cdots,x_{i-1},x_{i+1},\cdots,x_d) 。那么,我们可以从x的一个任意状态(如 (x_1^{(0)},x_2^{(0)},\cdots,x_d^{(0)}) )开始,利用条件分布 ,迭代地对每个分量进行抽样,随着抽样次数n的增加,随机变量 (x_1^{(n)},x_2^{(n)},\cdots,x_d^{(n)}) 的概率分布将以n的几何级数的速度收敛于x的联合概率分布p(x)。

基于RBM模型的对称结构,以及其同层节点条件独立的特性,我们可以使用Gibbs抽样方法得到服从RBM的可视节点边缘概率分布p(v)的随机样本。在RBM中进行k步Gibbs抽样的具体算法为:从可视节点的一个随机初始状态 开始,交替进行下面的抽样:

当抽样步数k足够大时,就可以得到服从p(v)分布的抽样样本。

CD算法与Gibbs方法不同的是,使用训练样本对可视节点进行初始化,从而仅需较少抽样步数(通常只需要1步)就可以得到足够好的近似。CD算法的具体步骤如下。

参考文献

[1] An Introduction to Restricted Boltzmann Machines. Asja Fischer and Christian Igel

[2] 受限波尔兹曼机简介 张春霞,姬楠楠,王冠伟

[3] Learning Deep Architectures for AI  Yoshua Bengio

[4] http://blog.csdn.net/cuoqu/article/details/8886971   DeepLearning(深度学习)原理与实现(一)marvin521

[5] http://blog.csdn.net/zouxy09/article/details/8775360   Deep Learning(深度学习)学习笔记整理系列 zouxy09

[6] http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html Deep learning:十九(RBM简单理解) tornadomeet

[7] http://blog.csdn.net/celerychen2009/article/details/8984316 受限波尔兹曼机 celerychen2009

[8] http://blog.csdn.net/zouxy09/article/details/8537620 从最大似然到EM算法浅解 zouxy09

[9] http://www.sigvc.org/bbs/thread-513-1-3.html   《RBM 和DBN 的训练》 王颖

[10]  神经网络原理叶[M] 叶世伟,史忠植:机械工业出版社

[11] http://www.sigvc.org/bbs/thread-512-1-1.html   《Restricted Boltzmann Machine (RBM) 推导》朱飞云

[12] http://blog.csdn.net/mytestmy/article/details/9150213  限制波尔兹曼机

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章