受限玻尔兹曼机器之梯度下降法求解

前面我们讲到深度学习的两类神经网络模型的原理,包括前向神经网络和有反馈的神经网络。前向神经网络包括

深度神经网络

和卷积神经网络,有反馈的神经网络包括循环神经网络和LSTM神经网络。本篇文章,我们来了解第三类神经网络模型:玻尔兹曼机

1.RBM模型结构

玻尔兹曼机是一类神经网络模型,但在实际应用中使用最多的是受限玻尔兹曼机(Restricted Boltzmann Machine, RBM)。RBM模型本身很简单,只是一个两层的神经网络,因此严格意义上不算是深度学习的范畴。

RBM包含两层,隐藏层(hidden layer)和可见层(visible layer)。隐藏层和可见层之间是全连接的,这点和DNN类似。不同的是RBM不分前向和后向,可见层的状态可以作用于隐藏层,隐藏层的状态也可以作用于可见层。常用的RBM一般是二值的,即不管隐藏层还是可见层,他们的神经元的取值只为0或1。本文只讨论二值RBM,模型结构如下所示。

其中下层表示可见层,用v向量表示可见层神经元的值,a向量表示可见层的偏倚系数。上层表示隐藏层,用h向量表示隐藏层神经元的值,b向量表示隐藏层神经元的偏倚系数。两者的连接权重用矩阵W表示。

2.RBM概率分布

RBM是基于能量的概率分布模型,包含能量函数和基于能量函数的概率分布函数。例如,对应上述给定的状态向量h和v,RBM当前的能量函数可以表示为

矩阵表达形式为

有了能量函数,则定义给定v,h的概率分布函数为

其中Z为归一化因子,类似于softmax中的归一化因子,表达式为

有了概率分布,我们就可以求出条件分布P(h|v)为

其中Z'为新的归一化系数,表达式为

同样的方法,我们也可以求出P(v|h)。有了条件概率分布,我们来看看RBM的激活函数,由于使用的是能量概率模型,RBM的基于条件分布的激活函数是很容易推导出来的。此处我们以P(hj = 1|v)为例进行推导

从上面可以看出,RBM从可见层到隐藏层用的其实就是sigmoid激活函数。同样的方法,我们也可以得到隐藏层到可见层的激活函数,也是sigmoid激活函数。即

有了激活函数,我们就可以根据可见层和参数推导出隐藏层神经元的取值概率。同样的方法,也可以从隐藏层推导出可见层神经元的取值概率。对于0,1取值的情况,可以设置大于0.5取值为1,小于0.5取值为0。

3.RBM模型参数求解

RBM模型的关键是求出模型中的W,a,b参数,如何求出呢?对于训练集V,RBM一般采用对数损失函数,即希望最小化下式

对于求解参数W,a,b,我们首先想到的是梯度下降法来迭代求解。首先来看单个样本的梯度计算,单个样本的损失函数如下述所示。其中V表示某个特定的训练样本,v指的是任意一个样本。

以ai的梯度计算为例

同样的方法,可以得到W,b的梯度,结果如下所示

4.RBM推广到DBM

RBM很容易推广到DBM(深层的RBM),推广的方法就是加入更多的隐藏层,比如一个三层的DBM如下所示

当然隐藏层的层数可以是任意的,随着层数的增多,那模型怎么表示呢?其实DBM也可以看作是一个RBM,比如下面一个四层的DBM,稍加变化就可以看作是一个RBM。

将偶数可见层放在一边,将奇数隐藏层放在另一边,就可以得到RBM,只是现在的RBM并不是全连接的,其实也可以看作部分权重为0的全连接RBM。RBM的算法思想同样可以在DBM上使用,只是此时我们需要求解的模型参数会更多,参数迭代过程中更加复杂。

5.RBM总结

上面我们用到梯度下降法求解RBM参数,虽然理论上可以解决RBM的优化,但在实际应用中,由于概率分布的计算量大,有pow(2,nv+nh)种情况,所以往往不能直接按照上面的梯度公式去求所有样本的梯度和。而是用基于MCMC的方法来模拟计算求解每个样本的梯度损失,然后再求梯度和。常用的方法是基于Gibbs采样的对比散度方法,下篇文章我们将来详细介绍。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181222G184RB00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券