深度置信神经⽹络(DBN-DNN)
1.1 BP神经⽹络
BP神经⽹络是1968年由Rumelhart和Mcclelland为⾸的科学家提出的概念,是⼀种按照误差反向传播算法进⾏训练的多层前馈神经⽹络,是⽬前应⽤⽐较⼴泛的⼀种神经⽹络结构。BP⽹络神经⽹络由输⼊层、隐藏层和输出层三部分构成,⽆论隐藏层是⼀层还是多层,只要是按照误差反向传播算法构建起来的⽹络(不需要进⾏预训练,随机初始化后直接进⾏反向传播),都称为BP神经⽹络。BP神经⽹络在单隐层的时候,效率较⾼,当堆积到多层隐藏层的时候,反向传播的效率就会⼤⼤降低,因此BP神经⽹络在浅层神经⽹路中应⽤较⼴,但由于其隐层数较少,所以映射能⼒也⼗分有限,所以浅层结构的BP神经⽹络多⽤于解决⼀些⽐较简单的映射建模问题。
在深层神经⽹络中,如果仍采⽤BP的思想,就得到了BP深层⽹络结构,即BP-DNN结构。由于隐藏层数较多(通常在两层以上),
刻苦学习的故事
、⾃顶⽽下逐层衰减,等传播到最底层的隐藏层时,、就⼏乎为零了。如此训练,效率太低,需要进⾏很长很长时间的训练才⾏,并且容易产⽣局部最优问题。因此,便有了⼀些对BP-DNN进⾏改进的⽅法,例如,采⽤ReLU的激活函数来代替传统的sigmoid函数,可以有效地提⾼训练的速度。此外,除了随机梯度下降的反向传播算法,还可以采⽤⼀些其他的⾼效的优化算法,例如⼩批量梯度下降算法(Mini-batch Gradient Descent)、冲量梯度下降算法等,也有利于改善训练的效率问题。直到2006年,Hinton提出了逐层贪婪预训练受限玻尔兹曼机的⽅法,⼤⼤提⾼了训练的效率,并且很好地改善了局部最优的问题,算是开启了深度神经⽹络发展的新时代。Hinton将这种基于玻尔兹曼机预训练的结构称为深度置信⽹络结构(DBN),⽤深度置信⽹络构建⽽成的DNN结构,就是本⽂要重点介绍的⼀种标准型的DNN结构,即DBN-DNN。
1.2 深度置信神经⽹络
如图⼀所⽰,以3层隐藏层结构的DBN-DNN为例,⽹络⼀共由3个受限玻尔兹曼机(RBM,Restricted Boltzmann Machine)单元堆叠⽽成,其中RBM⼀共有两层,上层为隐层,下层为显层。堆叠成DNN的时,前⼀个RBM的输出层(隐层)作为下⼀个RBM单元的输⼊层(显层),依次堆叠,便构成了基本的DBN结构,最后再添加⼀层输出层,就是最终的DBN-DNN结构。
图⼀ 深度置信神经⽹络(DBN-DNN)结构
受限玻尔兹曼机(RBM)是⼀种具有随机性的⽣成神经⽹络结构,它本质上是⼀种由具有随机性的
⼀层可见神经元和⼀层隐藏神经元所构成的⽆向图模型。它只有在隐藏层和可见层神经元之间有连接,可见层神经元之间以及隐藏层神经元之间都没有连接。并且,隐藏层神经元通常取⼆进制并服从伯努利分布,可见层神经元可以根据输⼊的类型取⼆进制或者实数值。
进⼀步地,根据可见层(v)和隐藏层(h)的取值不同,可将RBM分成两⼤类,如果v和h都是⼆值分布,那么它就是Bernoulli-Bernoulli RBM(贝努⼒-贝努⼒RBM);如果v是实数,⽐如语⾳特征,h为⼆进制,那么则为Gaussian-Bernoulli RBM(⾼斯-贝努⼒RBM)。因此,图⼀中的RBM1为⾼斯-贝努⼒,RBM2和RBM3都是贝努⼒-贝努⼒RBM。
既然提到了受限玻尔兹曼机(RBM),就不得不说⼀下,基于RBM构建的两种模型:DBN和DBM。如图⼆所⽰,DBN模型通过叠加RBM进⾏逐层预训练时,某层的分布只由上⼀层决定。例如,DBN的v层依赖于h1的分布,h1只依赖于h2的分布,也就是说,h1的分布不受v的影响,确定了v的分布,h1的分布只由h2来确定。⽽DBM模型为⽆向图结构,也就是说,DBM的h1层是由h2层和v层共同决定的,它是双向的。如果从效果来看,DBM结构会⽐DBN结构具有更好的鲁棒性,但是其求解的复杂度太⼤,需要将所有的层⼀起训练,不太利于应⽤。⽽DBN结构,如果借⽤RBM逐层预训练的⽅法,就⽅便快捷了很多,便于应⽤,因此应⽤的⽐较⼴泛。
图⼆ DBN模型和DBM模型
下⾯详细介绍⼀下,Hinton提出的对DBN结构进⾏预训练和反向调优的具体步骤:
1. ⾸先,进⾏基于受限玻尔兹曼机的⽆监督预训练(Pre-training)
利⽤CD-k算法(Contrastive Divergence,对⽐散度算法)进⾏权值初始化如下,Hinton 发现k取为1时,就可以有不错的学习效果。
人教版三年级下册数学教案
1) 随机初始化,其中为权重,是可见层的偏置向量,为隐藏层的偏置向量,随机初始化为较⼩的数值(可为0)。
, ,
,
,
其中,M为显元的个数,N为隐元的个数。可初始化为来⾃正态分布N(0 , 0.01)的随机数,初始化,其中表⽰训练样本
中第i个样本处于激活状态(即取值为1)的样本所占的⽐例,⽽可以直接初始化为0。隐元和显元值的计算可以表⽰如下:
美人美体
,
蒙山2)将赋给显层,计算它使隐层神经元被开启的概率:
(对于⾼斯或贝努⼒可见层神经元)
其中,式中的上标⽤于区别不同的向量,下标⽤于区别同⼀向量中的不同维。
3)根据计算的概率分布进⾏⼀步Gibbs抽样,对隐藏层中的每个单元从{0 , 1}中抽取得到相应的值,即。详细过程如下:
⾸先,产⽣⼀个[0 , 1]上的随机数,然后确定的值如下:
障碍赛马
印染废水处理工艺
4)⽤重构显层,需先计算概率密度,再进⾏Gibbs抽样:
路上花(对于贝叶斯可见层神经元)
(对于⾼斯可见层神经元)
其中,N表⽰为正态分布函数。
5)根据计算到的概率分布,再⼀次进⾏⼀步Gibbs采样,来对显层中的神经元从{0 , 1}中抽取相应的值来进⾏采样重构,即
。详细过程如下:
⾸先,产⽣[0 , 1]上的随机数,然后确定的值:
6)再次⽤显元(重构后的),计算出隐层神经元被开启的概率。
(对于⾼斯或者贝努⼒可见层神经元)
7)更新得到新的权重和偏置。
其中,为学习率。
需要说明的是,RBM的训练,实际上是求出⼀个最能产⽣训练样本的概率分布。也就是说,要求⼀个分布,在这个分布⾥,训练样本的概率最⼤。由于这个分布的决定性因素在于权值W,所以我们训练的⽬标就是寻找最佳的权值,以上便是Hinton于2002年提出的名为对⽐散度学习算法,来寻找最佳的权值。
在图⼀中,利⽤CD算法进⾏预训练时,只需要迭代计算RBM1,RBM2和RBM3三个单元的W,a,b值,最后⼀个BP单元的W和b值,直接采⽤随机初始化的值即可。通常,我们把由RBM1,RBM2和RBM3构成的结构称为DBN结构(深度置信⽹络结构),最后再加上⼀层输出层(BP层)后,便构成了标准型的DNN结构:DBN-DNN。
2. 然后,进⾏有监督的调优训练(Fine-tuning)
进⾏有监督的调优训练时,需要先利⽤前向传播算法,从输⼊得到⼀定的输出值,然后再利⽤后向传播算法来更新⽹络的权重值和偏置值。
<1> 前向传播算法
1)利⽤CD算法预训练好的W,b来确定相应隐元的开启和关闭。
计算每个隐元的激励值如下:
其中,为神经⽹络的层数索引。⽽W和b的值如下:
,
其中,代表从第i个显元到第j个隐元的权重,M代表显元的个数,N代表隐元的个数。
2)逐层向上传播,⼀层层地将隐藏层中每个隐元的激励值计算出来并⽤sigmoid函数完成标准化,如下所⽰:
当然,上述是以sigmoid函数作为激活函数的标准化过程为例。
3)最后计算出输出层的激励值和输出。
其中,输出层的激活函数为,为输出层的输出值。
<2> 后向传播算法
1)采⽤最⼩均⽅误差准则的反向误差传播算法来更新整个⽹络的参数,则代价函数如下:
其中,E为DNN学习的平均平⽅误差,和分别表⽰了输出层的输出和理想的输出,i为样本索引。表⽰在层的有待学习的权重和偏置的参数。修身养性的名言警句
2)采⽤梯度下降法,来更新⽹络的权重和偏置参数,如下所⽰:
以上便是构建整个DBN-DNN结构的两⼤关键步骤:⽆监督预训练和有监督调优训练。选择好合适的隐层数、层神经单元数以及学习率,分别迭代⼀定的次数进⾏训练,就会得到我们最终想要的DNN映射模型。