[受限玻尔兹曼机] 原理、求解、深度信念网络

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quiet_girl/article/details/80515194

写在前面

本篇文章主要写受限玻尔兹曼机、Gibbs求解方法、CD对比散度求解方法和深度信念网络。并非全部都是原创,有部分来自于书籍和网络。

一、受限玻尔兹曼机

1、简介玻尔兹曼机结构

如下图所示(图片来源:知乎),玻尔兹曼机的网络是相互连接型网络,其有两种形式:
①网络节点全部由可见单元构成。
②网络节点由可见单元和隐藏单元共同组成。

这种网络结构的训练非常复杂,因此基于此网络,辛顿等人提出了受限玻尔兹曼机。

2、受限玻尔兹曼机

受限玻尔兹曼机(Restricted Boltzmann Machines, RBM)主要有伯努利-伯努利RBM、伯努利-高斯RBM、高斯-伯努利RBM,本文主要基于伯努利-伯努利RBM,即可观测变量服务伯努利分布,隐变量也服从伯努利分布。

在玻尔兹曼机的基础上,首先玻尔兹曼机增加了限制:层内单元之间无连接。如下图所示:

受限玻尔兹曼机是由可见层和隐藏层构成的两层结构。可见层由可见变量组成,隐藏层由隐藏变量组成。可见层和隐藏层之间相互连接,层内之间无连接。

**受限玻尔兹曼机的目的:**通过求取连接权重和偏置项,使得重构的v~\widetilde{v}vv误差最小。利用这些连接权重和偏置项我们可以进行分类或者进行生成。

受限玻尔兹曼机的能量函数如下:
E(v,h,θ)=i=1nbivij=1mcjhji=1nj=1mwijvihj E(v,h,\theta) = -\sum_{i=1}^nb_iv_i- \sum_{j=1}^mc_jh_j-\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j
其中,bib_i是可见变量的偏置,cjc_j是隐藏变量的偏置,wijw_{ij}是连接权重,θ\theta是表示所有连接权重和偏置的参数集合。状态(v,h)(\red{v},h)的联合概率分布如下所示:
p(v,hθ)=1Zexp{E(v,h,θ)}Z=v,hexp{E(v,h,θ)} p(\red{v},h|\theta)=\frac{1}{Z}exp\{-E(\red{v},h,\theta)\} \\ Z=\sum_{v,h}exp\{-E(v,h,\theta)\}
注意:标红的v\red{v}表示是某一个vv,而ZZ中未标红的vv表示随机变量,不是某个固定值。

其对数似然函数为(关于此似然函数的原因,参见深度学习读书笔记之RBM(限制波尔兹曼机)1.3.2 从概率到极大似然):
logL(θv)=log1Zhexp{E(v,h,θ)}=loghexp{E(v,h,θ)}logv,hexp{E(v,h,θ)} \begin{array}{lcl} logL(\theta|\red{v}) &=& log\frac{1}{Z}\sum_{h}exp\{-E(\red{v},h,\theta)\} \\ &=& log\sum_hexp\{-E(\red{v},h,\theta)\}-log\sum_{v,h}exp\{-E(v,h,\theta)\} \end{array}
上述似然函数对θ\theta求导计算梯度,过程如下:
logL(θv)θ=(loghexp{E(v,h,θ)})θ(logv,hexp{E(v,h,θ)})θ=1hexp{E(v,h,θ)}h(exp{E(v,h,θ)}E(v,h,θ)θ)+1v,hexp{E(v,h,θ)}v,h(exp{E(v,h,θ)}E(v,h,θ)θ)=h(p(hv)E(v,h,θ)θ)+v,h(p(v,h)E(v,h,θ)θ) \begin{array}{lcl} \frac{\partial logL(\theta|v)}{\partial \theta} &=& \frac{\partial (log\sum_h exp\{-E(\red{v},h,\theta)\})}{\partial \theta}-\frac{\partial (log\sum_{v,h}exp\{-E(v,h,\theta)\})}{\partial \theta} \\ &=& -\frac{1}{\sum_h exp\{-E(\red{v},h,\theta)\}}\sum_h (exp\{-E(\red{v},h,\theta)\}\frac{ \partial E(\red{v},h,\theta)}{\partial \theta}) \\ &+& \frac{1}{\sum_{v,h} exp\{-E(v,h,\theta)\}}\sum_{v,h} (exp\{-E(v,h,\theta)\}\frac{ \partial E(v,h,\theta)}{\partial \theta}) \\ &=& -\sum_h (p(h|\red{v})\frac{ \partial E(\red{v},h,\theta)}{\partial \theta})+\sum_{v,h} (p(v,h)\frac{ \partial E(v,h,\theta)}{\partial \theta}) \end{array}
上式中,θ\theta可以取wijw_{ij}bib_icjc_j,分别计算梯度如下:

(1)求对wijw_{ij}的梯度

logL(θv)wij=h(p(hv)E(v,h,θ)wij)+v,hp(v,h)(E(v,h,θ)wij)=hj(p(hjv)vihj)vi,hjp(vi,hj)vihj=hj(p(hjv)vihj)vi(p(vi)hjp(hjvi)vihj)=p(hj=0v)vi0+p(hj=1v)vi1(vip(vi)p(hj=0vi)vi0+vip(vi)p(hj=1vi)vi1)=p(hj=1v)vivi(p(vi)p(hj=1vi)vi) \begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial w_{ij}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial w_{ij}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial w_{ij}} ) \\ &=& \sum_{h_j} (p(h_j|\red{v})v_ih_j)-\sum_{v_i,h_j}p(v_i,h_j)v_ih_j \\ &=& \sum_{h_j} (p(h_j|\red{v})v_ih_j)- \sum_{v_i} (p(v_i)\sum_{h_j}p(h_j|v_i)v_ih_j) \\ &=& p(h_j=0|\red{v})v_i \cdot 0 +p(h_j=1|\red{v})v_i \cdot 1 \\ &-& (\sum_{v_i}p(v_i)p(h_j=0|v_i)v_i \cdot 0 + \sum_{v_i}p(v_i)p(h_j=1|v_i)v_i \cdot 1) \\ &=& p(h_j=1|\red{v})v_i - \sum_{v_i}(p(v_i)p(h_j=1|v_i)v_i) \end{array}
注意: 在这里,因为求的是wijw_{ij}的梯度,因此求导之后参考其中的只有hjh_jviv_i

(2)求对bib_{i}的梯度

logL(θv)bi=h(p(hv)E(v,h,θ)bi)+v,hp(v,h)(E(v,h,θ)bi)=h(p(hv)vi)vi,hp(vi,h)vi=h(p(hv)vi)vi(p(vi)hp(hvi)vi)=vivi(p(vi)vi) \begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial b_{i}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial b_{i}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial b_{i}} ) \\ &=& \sum_{h} (p(h|\red{v})v_i)-\sum_{v_i,h}p(v_i,h)v_i \\ &=& \sum_{h} (p(h|\red{v})v_i)- \sum_{v_i} (p(v_i)\sum_{h}p(h|v_i)v_i) \\ &=& v_i - \sum_{v_i}(p(v_i)v_i) \end{array}
注意: hp(hvi)=1\sum_{h}p(h|v_i) = 1,注意区分vp(hv)=p(h)\sum_{v}p(h|v) = p(h)

(3)求对cjc_{j}的梯度

logL(θv)cj=h(p(hv)E(v,h,θ)cj)+v,hp(v,h)(E(v,h,θ)cj)=hj(p(hjv)hj)v,hjp(v,hj)hj=hj(p(hjv)hj)v(p(v)hjp(hjv)hj)=p(hj=0v)0+p(hj=1v)1(vp(v)p(hj=0v)0+vp(v)p(hj=1v)1)=p(hj=1v)v(p(v)p(hj=1v)) \begin{array}{lcl} \frac{\partial log L(\theta|v)}{\partial c_{j}} &=& -\sum_h (p(h|\red{v})\frac{ \partial E(v,h,\theta)}{\partial c_{j}})+\sum_{v,h}p(v,h) (\frac{ \partial E(v,h,\theta)}{\partial c_{j}} ) \\ &=& \sum_{h_j} (p(h_j|\red{v})h_j)-\sum_{v,h_j}p(v,h_j)h_j \\ &=& \sum_{h_j} (p(h_j|\red{v})h_j)- \sum_{v} (p(v)\sum_{h_j}p(h_j|v)h_j) \\ &=& p(h_j=0|\red{v}) \cdot 0 +p(h_j=1|\red{v})\cdot 1 \\ &-& (\sum_{v}p(v)p(h_j=0|v) \cdot 0 + \sum_{v}p(v)p(h_j=1|v)\cdot 1) \\ &=& p(h_j=1|\red{v})- \sum_{v}(p(v)p(h_j=1|v)) \end{array}

(4)更新方程

wijw_{ij}bib_icjc_j求完梯度之后,可以按照如下方程更新参数:
wijwij(logL(θv))wijbibi(logL(θv))bicjcj(logL(θv))cj \begin{array}{lcl} w_{ij} &\leftarrow& w_{ij}-\frac{\partial (log L(\theta|v))}{\partial w_{ij}} \\ b_{i} &\leftarrow& b_{i}-\frac{\partial (log L(\theta|v))}{\partial b_{i}} \\ c_{j} &\leftarrow& c_{j}-\frac{\partial (log L(\theta|v))}{\partial c_{j}} \end{array}
迭代更新即可。

3、求解存在的问题

受限玻尔兹曼机也存在效率的问题,上述公式可以看到,vp(v)\sum_{v}p(v)是需要计算的,而这个式子的计算需要所有可见变量的模式之和,其复杂度为O(2nv+nh)O(2^{n_v+n_h}),这会使得效率非常低。因此可以使用Gibbs采样和CD对比散度算法来求解。

二、受限玻尔兹曼机的求解

在给定一个训练样本后,训练一个RBM的意义在于调整模型的参数,以拟合给定的训练样本,使得在该参数下RBM表示的可见层节点概率分布尽可能的与训练数据相符合。我们可以采用Gibbs采样或者CD算法求解参数,CD算法的效率更高。
Gibbs采样求解和CD算法求解都是近似求解模型,我们希望p(v)=ptrain(v)p(v)=p_{train}(v)(数据的真实、底层分布)。所以我们通过近似算法, 迭若干次之后,使得马尔科夫链拟合最终的vv的分布。

1、Gibbs采样

我们希望p(v)=ptrain(v)p(v)=p_{train}(v)(数据的真实、底层分布),所以我们可以使用Gibss采样去收敛这个最终的分布pp
Gibbs采样的思想是虽然我们不知道样本数据v1,v2,...,vnvv_1,v_2,...,v_{n_v}的联合概率,但是我们知道样本的条件概率p(vivi)p(v_i|v_{-i}),则我们可以先求出每个数据的条件概率值,得到vv的任一状态[v1(0),v2(0),...,vnv(0)][v_1(0), v_2(0), ..., v_{n_v}(0)],然后,用条件概率公式迭代对每一个数据求条件概率。最终,迭代kk次的时候,vv的某一个状态[v1(k),v2(k),...,vnv(k)][v_1(k), v_2(k), ..., v_{n_v}(k)]将收敛于vv的联合概率分布p(v)p(v),其过程图如下(图片来自参考博客):

求解过程是: 假设给我一个训练样本v0v_0,根据公式P(hj=1v)P(h_j=1|v)h0h_0中每一个节点的条件概率,再根据公式p(vi=1h)p(v_i=1|h)v1v_1中每个节点的条件概率,然后依次迭代,直到K步,此时p(vh)p(v|h)的概率收敛于p(v)p(v)的概率。
h0p(hv0)v1p(vh0)h1p(hv1)v2p(vh1)...vk+1p(vhk) \begin{array}{lcl} h_0 \sim p(h|v_0) \\ v_1 \sim p(v|h_0)\\ h_1 \sim p(h|v_1)\\ v_2 \sim p(v|h_1)\\ ...\\ v_{k+1} \sim p(v|h_k) \end{array}

2、CD对比散度算法

上述使用Gibbs采样虽然已经相比较BP算法来说,代价减少了很多,但是Gibbs采样需要不断迭代直到收敛到平稳分布,所以迭代过程需要多次。基于此,hinton提出了对比散度算法,对比散度算法和Gibbs采样的区别在于:Gibbs采样p(hv)p(h|v)vv的初始化是随机初始化,但是CD算法中vv初始化为训练样本,其余和Gibbs采样相同。实验证明,CD算法只要迭代1次就可以有很好的效果。

(1)CD算法的算法流程图

(图片来源:受限玻尔兹曼机(RBM)+对比散度算法(CD-k)

这是CD-1的算法流程,CD-k算法便是k次CD-1算法的迭代。

(2)条件分布P(hv)P(h|v)P(vh)P(v|h)

因为在CD算法中需要求p(hj=1v)p(h_j=1|v)的取值,所以我们先来看看它的公式是什么。
CD算法的能量函数为:
E(v,h,θ)=i=1nbivij=1mcjhji=1nj=1mwijvihj E(v,h,\theta) = -\sum_{i=1}^nb_iv_i- \sum_{j=1}^mc_jh_j-\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j
因此,定义给定v,hv,h情况下RBM的状态概率分布为:
P(v,h)=1ZeE(v,h)Z=v,heE(v,h) \begin{array}{lcl} P(v,h) = \frac{1}{Z}e^{-E(v,h)} \\ Z = \sum_{v,h}e^{-E(v,h)} \end{array}
有了概率分布,我们来看条件分布P(hv)P(h|v)
P(hv)=P(h,v)P(v)=1P(v)1Zexp{i=1nbivi+j=1mcjhj+i=1nj=1mwijvihj}=1Zexp{j=1mcjhj+i=1nj=1mwijvihj}=1Zj=1nhexp{cjhj+wijvihj} \begin{array}{lcl} P(h|v) &=& \frac{P(h,v)}{P(v)} \\ &=& \frac{1}{P(v)}\frac{1}{Z}exp\{\sum_{i=1}^nb_iv_i+ \sum_{j=1}^mc_jh_j+\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j\} \\ &=& \frac{1}{{Z}'}exp\{\sum_{j=1}^mc_jh_j+\sum_{i=1}^n\sum_{j=1}^mw_{ij}v_ih_j\} \\ &=& \frac{1}{{Z}'}\prod_{j=1}^{n_h}exp\{c_jh_j +w_{ij}v_ih_j \} \end{array}
其中,Z{{Z}'}为新的归一化常数:
1Z=1P(v)1Zexp{i=1nbivi} \frac{1}{{Z}'} = \frac{1}{P(v)}\frac{1}{Z}exp\{\sum_{i=1}^nb_iv_i\}
下面以同样的方式求条件分布P(vh)P(v|h)

能量模型基于条件分布的激活函数如下,我们以P(hj=1v)P(h_j=1|v)为例推导如下:
P(hj=1v)=P(hj=1v)P(hj=0v)+P(hj=1v)=exp{cj+wijvi}1+exp{cj+wijvi}=11+exp{(cj+wijvi)}=σ(cj+wijvi) \begin{array}{lcl} P(h_j=1|v) &=& \frac{P(h_j=1|v) }{P(h_j=0|v) +P(h_j=1|v) } \\ &=& \frac{exp\{c_j +w_{ij}v_i\}}{1+exp\{c_j +w_{ij}v_i\}} \\ &=& \frac{1}{1+exp\{-(c_j +w_{ij}v_i)\}} \\ &=& \sigma (c_j +w_{ij}v_i) \end{array}
因此,P(hj=1v)P(h_j=1|v)实际上就就是sigmoid激活函数,同理,P(vj=1h)P(v_j=1|h)也是sigmoid激活函数,其公式如下:
P(vi=1h)=σ(bi+wijhi) P(v_i=1|h) = \sigma (b_i +w_{ij}h_i)
有了激活函数,我们就可以从可见层和参数推导出隐藏层的神经元的取值概率了。

(3)CD算法求解举例

如下图所示(图片来自图解深度学习),我们以此为例讲解对比散度算法(Contrastive Divergence,CD)的过程。

如何判断值为0还是1:若根据上面的公式求出P(hj=1v)=0.7P(h_j=1|v)=0.7,现在我们取一个0~1之间的随机数,如果随机数小于0.7,则我们认为hj=1h_j=1(条件概率求出hj=1h_j=1的概率是0.7,随机数小于0.7的概率也是0.7),否则hj=0h_j=0

(A)如上图(a)所示,v1(0),v2(0),vi(0),vn(0)v_1^{(0)}, v_2^{(0)},v_i^{(0)},v_n^{(0)}的取值分别为1,0,1,11, 0, 1, 1

(B) 我们根据公式P(hj=1v)=σ(cj+wijvi)P(h_j=1|v)= \sigma (c_j +w_{ij}v_i)可以求出h1(0),hj(0),hm(0)h_1^{(0)},h_j^{(0)},h_m^{(0)}的概率分别为0.8,0.5,0.90.8,0.5,0.9

(C ) h1(0),hj(0),hm(0)h_1^{(0)},h_j^{(0)},h_m^{(0)}的概率分别为0.8,0.5,0.90.8,0.5,0.9,根据上述判断结果是0还是1的方法,h1(0),hj(0),hm(0)h_1^{(0)},h_j^{(0)},h_m^{(0)}的取值分别为0,1,10,1,1

(D) h1(0),hj(0),hm(0)h_1^{(0)},h_j^{(0)},h_m^{(0)}的取值分别为0,1,10,1,1,根据P(vi=1h)=σ(bi+wijhi)P(v_i=1|h) = \sigma (b_i +w_{ij}h_i)我们求得v1(1),v2(1),vi(1),vn(1)v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)}的概率分别为0.7,0.2,0.8,0.60.7, 0.2, 0.8, 0.6

(E)v1(1),v2(1),vi(1),vn(1)v_1^{(1)}, v_2^{(1)},v_i^{(1)},v_n^{(1)}的概率分别为0.7,0.2,0.8,0.60.7, 0.2, 0.8, 0.6,根据上述判断结果是0还是1的方法,v1(1),v2(1),vi(1),vn(1)v_1^{(1)},v_2^{(1)},v_i^{(1)},v_n^{(1)}的取值分别为1,1,0,11,1, 0, 1

(F)梯度的更新公式为:
wijwij+η[p(hj(0)=1v(0))vi(0)p(hj(1)=1v(1))vi(1)]bibi+η(vi(0)vi(1))cjcj+η[p(hj(0)=1v(0))p(hj(1)=1v(1))] \begin{array}{lcl} w_{ij} \leftarrow w_{ij}+\eta [p(h_j^{(0)}=1|v^{(0)})v_i^{(0)} - p(h_j^{(1)}=1|v^{(1)})v_i^{(1)}] \\ b_i\leftarrow b_i+\eta (v_i^{(0)} -v_i^{(1)}) \\ c_j \leftarrow c_j+\eta[p(h_j^{(0)}=1|v^{(0)})-p(h_j^{(1)}=1|v^{(1)})] \end{array}

三、深度信念网络

深度信念网络(Deep Belief Network, DBN)是由受限玻尔兹曼机堆叠而成,深度信念网络和其他神经网络的不同是:

1)神经网络的权重是先使用前向传播求得网络目标结果,再根据反向传播算法,把误差传播到下一层,调整所有的连接权重和偏置。
2)深度信念网络是逐层来调整连接权重和偏置项。具体做法是受限调整输入层和隐藏层之间的参数,把训练后得到的参数作为下一层的输入,再调整该层与下一个隐藏层之间的参数。不断迭代。

下图是DBN的示意图(图片来源:Deep Belief Networks (DBNs)):

四、应用

1、预训练
在预训练任务中,可以使用DBM逐层训练参数,因此当做其他任务的参数初始化结果。
2、生成模型和分类模型
DBN可以当做生成模型来使用,除此之外,也可以当做分类模型,在DBN的最顶层增加一层softmax层,即可变成分类模型。
3、降维
隐藏层可以看做是降维的结果
4、和自编码器关系
和自编码器关联极大,这点会在自编码器中介绍二者的异同。

参考文章:
[1] 深度学习读书笔记之RBM(限制波尔兹曼机)
[2] 受限玻尔兹曼机和深度置信网络
[3] 受限玻尔兹曼机(RBM)原理总结
[4] 受限玻尔兹曼机基础教程
[5] 深度信念网络
[6] Hinton G E, Osindero S. A Fast Learning Algorithm for Deep Belief Nets[J].
[7] 深度学习(书)
[8] 图解深度学习(书)
[9] 受限玻尔兹曼机(RBM)学习笔记(六)对比散度算法

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试