神经网络自20世纪50年代发展起来后,因其良好的非线性能力、泛化能力而备受关注。然而,传统的神经网络仍存在一些局限,在上个世纪90年代陷入衰落,主要有以下几个原因:
1、传统的神经网络一般都是单隐层,最多两个隐层,因为一旦神经元个数太多、隐层太多,模型的参数数量迅速增长,模型训练的时间非常之久;
2、传统的神经网络,随着层数的增加,采用随机梯度下降的话一般很难找到最优解,容易陷入局部最优解。在反向传播过程中也容易出现梯度弥散或梯度饱和的情况,导致模型结果不理想;
3、随着神经网络层数的增加,深度神经网络的模型参数很多,就要求在训练时需要有很大的标签数据,因为训练数据少的时候很难找到最优解,也就是说深度神经网络不具备解决小样本问题的能力。

由于以上的限制,深度的神经网络一度被认为是无法训练的,从而使神经网络的发展一度停滞不前。

2006年,“神经网络之父”Geoffrey Hinton祭出神器,一举解决了深层神经网络的训练问题,推动了深度学习的快速发展,开创了人工智能的新局面,使近几年来科技界涌现出了很多智能化产品,深深地影响了我们每个人的生活。

那这个神器是什么呢?那就是“深度信念网络”(Deep Belief Network,简称DBN)。

深度信念网络,DBN,Deep Belief Nets,神经网络的一种。既可以用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器来使用。
从非监督学习来讲,其目的是尽可能地保留原始特征的特点,同时降低特征的维度。从监督学习来讲,其目的在于使得分类错误率尽可能地小。而不论是监督学习还是非监督学习,DBN的本质都是Feature Learning的过程,即如何得到更好的特征表达。
深度信念网络(DBN)通过采用逐层训练的方式,解决了深层次神经网络的优化问题,通过逐层训练为整个网络赋予了较好的初始权值,使得网络只要经过微调就可以达到最优解。而在逐层训练的时候起到最重要作用的是“受限玻尔兹曼机”(Restricted Boltzmann Machines,简称RBM),为什么叫“受限玻尔兹曼机”呢?因为还有一个是不受限的,那就是“玻尔兹曼机”(Boltzmann Machines,简称BM)。
下面依次介绍一下什么是“玻尔兹曼机”(BM)、“受限玻尔兹曼机”(RBM)?

一、玻尔兹曼机(Boltzmann Machines,简称BM)

深度信念网络 python实例 深度信念神经网络_监督学习


玻尔兹曼机于1986年由大神Hinton提出,是一种根植于统计力学的随机神经网络,这种网络中神经元只有两种状态(未激活、激活),用二进制0、1表示,状态的取值根据概率统计法则决定。

由于这种概率统计法则的表达形式与著名统计力学家L.E.Boltzmann提出的玻尔兹曼分布类似,故将这种网络取名为“玻尔兹曼机”。

在物理学上,玻尔兹曼分布(也称为吉布斯分布,Gibbs Distribution)是描述理想气体在受保守外力的作用(或保守外力的作用不可忽略)时,处于热平衡态下的气体分子按能量的分布规律。

在统计学习中,如果我们将需要学习的模型看成高温物体,将学习的过程看成一个降温达到热平衡的过程(热平衡在物理学领域通常指温度在时间或空间上的稳定),最终模型的能量将会收敛为一个分布,在全局极小能量上下波动,这个过程称为“模拟退火”,其名字来自冶金学的专有名词“退火”,即将材料加热后再以一定的速度退火冷却,可以减少晶格中的缺陷,而模型能量收敛到的分布即为玻尔兹曼分布。

听起来很难理解的样子,只需要记住一个关键点:能量收敛到最小后,热平衡趋于稳定,也就是说,在能量最少的时候,网络最稳定,此时网络最优。玻尔兹曼机(BM)是由随机神经元全连接组成的反馈神经网络,且对称连接,由可见层、隐层组成,BM可以看做是一个无向图,如下图所示:

深度信念网络 python实例 深度信念神经网络_深度信念网络_02


其中,x1、x2、x3为可见层,x4、x5、x6为隐层。

整个能量函数定义为

深度信念网络 python实例 深度信念神经网络_监督学习_03


其中,w为权重,b为偏置变量,x只有{0,1}两种状态。

根据玻尔兹曼分布,给出的一个系统在特定状态能量和系统温度下的概率分布,如下:

深度信念网络 python实例 深度信念神经网络_监督学习_04


前面讲过,“能量收敛到最小后,热平衡趋于稳定”,因此:

1、简单粗暴法

要寻找一个变量使得整个网络的能量最小,一个简单(但是低效)的做法是选择一个变量,在其它变量保持不变的情况下,将这个变量设为会导致整个网络能量更低的状态。那么一个变量Xi的两个状态0(关闭)和1(打开)之间的能量差异为:

深度信念网络 python实例 深度信念神经网络_深度信念网络_05


这时,如果能量差异ΔE大于一定的阈值(比如0),我们就设Xi = 1(也即取能量小的),否则就设Xi = 0。这种简单的方法通过反复不断运行,在一定时间之后收敛到一个解(可能是局部最优解)。

2、最大似然法

利用“模拟退火”原理寻找全局最优解,根据玻尔兹曼分布,Xi=1的概率为:

深度信念网络 python实例 深度信念神经网络_监督学习_06


训练集v的对数似然函数为:

深度信念网络 python实例 深度信念神经网络_深度信念网络_07


对每个训练向量p(v)的对数似然对参数w求导数,得到梯度:

深度信念网络 python实例 深度信念神经网络_神经网络_08


跟传统的神经网络类似,参数w的更新公式如下(a为学习率):

深度信念网络 python实例 深度信念神经网络_监督学习_09


好了好了,公式就讲到这里了,看上去挺复杂的,没错,确实计算很复杂,这个梯度很难精确计算,整个计算过程会十分地耗时。

目前,可以通过一些采样方法(例如Gibbs采样)来进行近似求解。

玻尔兹曼机(BM)可以用在监督学习和无监督学习中。在监督学习中,可见变量又可以分为输入和输出变量,隐变量则隐式地描述了可见变量之间复杂的约束关系。在无监督学习中,隐变量可以看做是可见变量的内部特征表示,能够学习数据中复杂的规则。玻尔兹曼机代价是训练时间很长很长很长。

二、受限玻尔兹曼机(Restricted Boltzmann Machines,简称RBM)

深度信念网络 python实例 深度信念神经网络_深度信念网络_10


所谓“受限玻尔兹曼机”(RBM)就是对“玻尔兹曼机”(BM)进行简化,使玻尔兹曼机更容易更加简单使用,原本玻尔兹曼机的可见元和隐元之间是全连接的,而且隐元和隐元之间也是全连接的,这样就增加了计算量和计算难度。

“受限玻尔兹曼机”(RBM)同样具有一个可见层,一个隐层,但层内无连接,层与层之间全连接,节点变量仍然取值为0或1,是一个二分图。也就是将“玻尔兹曼机”(BM)的层内连接去掉,对连接进行限制,就变成了“受限玻尔兹曼机”(RBM),这样就使得计算量大大减小,使用起来也就方便了很多。如上图。

“受限玻尔兹曼机”(RBM)的特点是:在给定可见层单元状态(输入数据)时,各隐层单元的激活条件是独立的(层内无连接),同样,在给定隐层单元状态时,可见层单元的激活条件也是独立的。跟“玻尔兹曼机”(BM)类似,根据玻尔兹曼分布,可见层(变量为v,偏置量为a)、隐层(变量为h,偏置量为b)的概率为:

深度信念网络 python实例 深度信念神经网络_监督学习_11


训练样本的对数似然函数为:

深度信念网络 python实例 深度信念神经网络_DBN_12


求导数:

深度信念网络 python实例 深度信念神经网络_监督学习_13


总之,还是挺复杂的,计算也还是挺花时间的。

同样,可以通过Gibbs 采样的方法来近似计算。虽然比一般的玻尔兹曼机速度有很大提高,但一般还是需要通过很多步采样才可以采集到符合真实分布的样本。这就使得受限玻尔兹曼机的训练效率仍然不高。

2002年,大神Hinton再出手,提出了“对比散度”(Contrastive Divergence,简称CD)算法,这是一种比Gibbs采样更加有效的学习算法,促使大家对RBM的关注和研究。

RBM的本质是非监督学习的利器,可以用于降维(隐层设置少一点)、学习提取特征(隐层输出就是特征)、自编码器(AutoEncoder)以及深度信念网络(多个RBM堆叠而成)等等。

三、深度信念网络(Deep Belief Network,简称DBN)

使用BP算法单独训练每一层的时候,我们发现,必须丢掉网络的第三层,才能级联自联想神经网络。然而,有一种更好的神经网络模型,这就是受限玻尔兹曼机。使用层叠波尔兹曼机组成深度神经网络的方法,在深度学习里被称作深度信念网络DBN,,这是目前非常流行的方法。下面的术语,将把自联想网络称作自编码网络autoencoder.。通过层叠自编码网络的深度网络在深度学习里另外一个属于叫栈式自编码网络。经典的DBN网络结构 是由若干层 RBM 和一层 BP 组成的一种深层神经网络, 结构如下图所示.

深度信念网络 python实例 深度信念神经网络_深度信念网络 python实例_14


DBN 在训练模型的过程中主要分为两步:

第 1 步:分别单独无监督地训练每一层 RBM 网络,确保特征向量映射到不同特征空间时,都尽可能多地保留特征信息;(学习特征)

第 2 步:在 DBN 的最后一层设置 BP 网络,接收 RBM 的输出特征向量作为它的输入特征向量,有监督地训练实体关系分类器.而且每一层 RBM 网络只能确保自身层内的 权值对该层特征向量映射达到最优,并不是对整个 DBN 的特征向量映射达到最优,所以反向传播网络还将错误信息自顶向下传播至每一层 RBM,微调整个 DBN 网络.RBM 网络训练模型的过程可以看作对一个深层 BP 网络权值参数的初始化,使DBN 克服了 BP 网络因随机初始化权值参数而容易陷入局部最优和训练时间长的缺点。

上述训练模型中第一步在深度学习的术语叫做预训练,第二步叫做微调。最上面有监督学习的那一层,根据具体的应用领域可以换成任何分类器模型,而不必是BP网络。

一个DBN模型由若干个RBM堆叠而成,训练过程由低到高逐层进行训练,如下图所示:

深度信念网络 python实例 深度信念神经网络_神经网络_15