第一次接触深度信念网络DBN,结合看到的博客内容简单谈谈理解,如果有哪些地方不太准确,欢迎各位大神批评指正。
【概述】
周志华老师所著的《机器学习》5.6节对DBN的描述可以用简单一句话来概括:
DBN由多层受限Boltzmann机(RBM)堆叠而成,各层RBM预训练完成后,利用一层BP对整个网络进行训练。
那么问题来了,RBM是个什么?
【受限Boltzmann机(RBM)】
每个RBM有两层神经元,显层和隐层。
显层中的神经元是显性神经元,用于接收输入;隐层中的神经元是隐性神经元,用于提取特征。
两层间的神经元双向全连接,单层内神经元不连接(受限Boltzmann机和Boltzmann机的区别就在于层内神经元是否连接)。
看到这里,联系之前有所接触的前馈神经网络,不知道有没有人和本人一样,想到了一个问题:
为什么RBM层间神经元是双向连接的呢?
要想回答这个问题,就需要简单说说RBM的工作方式了,结合所看到的一些资料,总结出了RBM训练的算法:
1.已知显层向量X,由权重向量W、偏置向量B计算出输出向量Y; 2.通过Y,由权重向量W、偏置向量A回求X'; 3.通过X',由权重向量W、偏置向量B再次计算出输出向量Y'; 4.计算X、X'差值,若不近乎为零(未达到网络要求),则5;若近乎为零(达到网络要求),则9; 5.X、Y做矢量乘积得到矩阵Z,X'、Y'做矢量乘积得到矩阵Z',其中,Z、Z'均为x*y矩阵(x为X向量维度,y为Y向量维度); 6.Z、Z'相减,调整权重向量W = W + alpha*(Z-Z'),其中,alpha为学习速率learning rate; 7.调整偏置向量A = A + alpha * (A-A')、B = B + alpha * (B-B'); 8.重复上述过程; 9.结束。
此刻再来看刚刚的问题,RBM层间神经元为什么双向连接呢?
它要在进行回推和比较啊!
该过程在一会儿介绍的wake-sleep算法中会进行进一步解释。
了解了RBM,我们可以再回头来看DBN是什么了。
【深度信念网络DBN】
由若干层RBM和一层BP组成的深层神经网络。
最顶部两层(最后一层RBM的输出和输出层)连接是无向的,较低的其他层之间有连接上下的有向全连接(参考上节:受限Boltzmann机)。在这里,最后一层RBM的输出是输出层的输入。
最底层代表数据向量,每个神经元代表数据向量的一维。
网络架构明确之后,简单谈谈其训练过程:
DBN在训练过程中主要有两步:
1.预训练阶段:分别单独无监督地训练每一层RBM网络(layer1训练好之后再进行layer2的训练),确保特征向量映射到不同特征空间时尽可能多地保留特征信息。
类似一个贪心算法,让每层RBM学习到的特征可以最好地还原输入。
2.调优过程:DBN最后一层中设置BP网络,接受RBM的输出特征向量作为其输入特征向量,有监督地训练实体关系分类器,且RBM只确保自身层内的权值对该层特征向量映射达到最优,而并不对整个DBN负责。反向传播网络(BP)将信息自顶而下传播至每层RBM,对整个DBN网络进行微调。
调优过程中有很多值得注意的地方:
a. 如周志华老师所著的《机器学习》5.3节中所说,BP网络指BP算法训练的前馈神经网络,这也就意味着,DBN的顶层是前馈神经网络,不存在双向连接。
b. 有关预训练阶段无监督而调优阶段有监督的问题:还是周志华老师所著的《机器学习》里面所说,监督学习和无监督学习是由训练数据是否具有标记信息而划分的。那么,预训练阶段中很明显不存在标记信息,而只是为了隐层神经元所回推的结果更符合输入,故该阶段为无监督学习;而调优阶段中,DBN的输出一定要与标记信息做比对,才能够确定如何调整网络参数,所以该阶段为有监督学习。
c. 在预训练阶段中,RBM网络的训练目标是“确保特征向量映射到不同特征空间时尽可能多地保留特征信息”,且RBM逐层训练,所以RBM网络仅仅对本层的输入、输出之间的关系负责,而不保证对整个 DBN 的特征向量映射达到最优。
d. 整个网络的微调是由BP进行的。
【调优过程的wake-sleep算法】
除顶层RBM外(因为顶层的RBM神经元向上并不是双向连接),其它层的RBM被分为向上的认知权重(recognition weight)和向下的生成权重(generative weight)。
在训练过程中,有人发现,给定生成权重,可以学习得到认知权重;给定认知权重,可以学习得到生成权重。
由于机器学习的目的在于抽象出模型(自下而上),所以自上而下的生成连接似乎没有什么用。
但是如果有较好的认知连接(认知权重),就可以使用一种自下而上的传播——用真实数据激活每层神经元,从而通过尝试前一层的神经元活跃度信息重建每层的神经元活跃度,从而学习生成权重。(如果这一段没看懂,直接看算法阶段就好)
wake-sleep算法:
1.wake阶段:认知过程,通过外界特征(真实世界)和认知权重所产生的抽象表示(概念),修改下行生成权重。
2.sleep阶段:生成过程,通过wake阶段学得的概念和生成权重,生成底层状态(还原真实世界),修改上行认知权重。
最后,再加上这两句很有名的话:
wake:“如果现实和我想象的不一样,改变我的生成权重使得我想象的东西就是这样的”
sleep:“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”