初识深度信念网络DBN

第一次接触深度信念网络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.计算XX'差值,若不近乎为零(未达到网络要求),则5;若近乎为零(达到网络要求),则9;
5.XY做矢量乘积得到矩阵ZX'Y'做矢量乘积得到矩阵Z',其中,ZZ'均为x*y矩阵(xX向量维度,yY向量维度);
6.ZZ'相减,调整权重向量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进行的。


本节参考:机器学习——DBN深度信念网络详解

本节参考:深度信念神经网络DBN最通俗易懂的教程


【调优过程的wake-sleep算法】

除顶层RBM外(因为顶层的RBM神经元向上并不是双向连接),其它层的RBM被分为向上的认知权重(recognition weight)和向下的生成权重(generative weight)。

在训练过程中,有人发现,给定生成权重,可以学习得到认知权重;给定认知权重,可以学习得到生成权重。

由于机器学习的目的在于抽象出模型(自下而上),所以自上而下的生成连接似乎没有什么用。

但是如果有较好的认知连接(认知权重),就可以使用一种自下而上的传播——用真实数据激活每层神经元,从而通过尝试前一层的神经元活跃度信息重建每层的神经元活跃度,从而学习生成权重。(如果这一段没看懂,直接看算法阶段就好)

wake-sleep算法:

1.wake阶段:认知过程,通过外界特征(真实世界)和认知权重所产生的抽象表示(概念),修改下行生成权重。

2.sleep阶段:生成过程,通过wake阶段学得的概念和生成权重,生成底层状态(还原真实世界),修改上行认知权重。

最后,再加上这两句很有名的话:

wake:“如果现实和我想象的不一样,改变我的生成权重使得我想象的东西就是这样的”

sleep:“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得这种景象在我看来就是这个概念”


本节参考:deeplearning的wake-sleep算法

本节参考:[深度学习]Wake-Sleep算法

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值