Deep Learning 学习笔记 5:深度学习的训练过程 2

来源:互联网 发布:朱梓骁郭敬明 知乎 编辑:程序博客网 时间:2024/06/05 14:23

深度学习与浅层学习(shallow learning)以及传统神经网络的不同,以及wake-sleep训练过程的介绍。


Deep Learning 的训练过程
假设我们有一个系统S,它有n层(S1,…Sn),它的输入是I,输出是O,形象地表示为: I =>S1=>S2=>…..=>Sn => O,如果输出O等于输入I,即输入I经过这个系统变化之后没有任何的信息损失(这是不可能的,信息论中有个“信息逐层丢失”的说法(信息处理不等式),设处理a信息得到b,再对b处理得到c,那么可以证明:a和c的互信息不会超过a和b的互信息。这表明信息处理不会增加信息,大部分处理会丢失信息。当然了,如果丢掉的是没用的信息那多好啊),保持了不变,这意味着输入I经过每一层Si都没有任何的信息损失,即在任何一层Si,它都是原有信息(即输入I)的另外一种表示。现在回到我们的主题Deep Learning,我们需要自动地学习特征,假设我们有一堆输入I(如一堆图像或者文本),假设我们设计了一个系统S(有n层),我们通过调整系统中参数,使得它的输出尽可能接近输入I,那么我们就可以自动地获取得到输入I的一系列层次特征,即S1,…, Sn。
对于深度学习来说,如果对所有层同时进行训练,计算太复杂耗时太多;如果每次只训练一层,那么偏差就会逐层传递,就像小时候玩的传话游戏一样,传递到顶层的特征与原信号的偏差将会惨不忍睹,拿给怎么办呢,我们机器学习的老先生Hinton提出了一个建立神经网络的有效方法,简单的说分为两步:第一步每次训练一层网络,第二步在所有网络训练完之后进行调优,调优采用的方法是wake-sleep算法,最终的结果要求原始信号X经过神经网络生成的信号Y和信号Y通过“反向”神经网络生成的X’尽可能一致。
下面详细的介绍一下Deep Learning的训练过程:

第一步:使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
采用无标定数据(有标定数据也可)分层训练各层参数,这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是feature learning过程):
具体的,先用无标定数据训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型capacity的限制以及稀疏性约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数;

第二步:wake-sleep算法优化。首先以前的神经网络的节点都是单向的,但是对于wake-sleep算法来说,除了顶层和低层两层之外,其他每层的每个节点的权重都变成了双向的。对于向上的权重,我们称之为“认知权重”,用来认知真实信号X从而在顶层形成Y;对于向下的权重,我们称之为“生成权重”,通过顶层的信号Y来生成底层的信号X’。当认知权重和生成权重达到完美之后,最顶层就能够准确无误的表示出底层的图像。
wake-sleep算法是通过醒(wake)和睡(sleep)两个步骤来不断的修正认知权重和生成权重。
1)wake阶段:认知过程。通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。
2)sleep阶段:生成过程。通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改变我的认知权重使得梦中的景象就是脑中的概念”。
下面简单的结构能够帮助理解:
这里写图片描述
左图为wake阶段,以第二层抽象表达为例,首先基于第二层层得到的抽象表达通过生成权值得到想象信号,其次将想象信号和现实进行比较,最后根据比较的结果来优化生成权重。右图为sleep阶段,也以第二层为例,首先基于第二层得到的抽象表达通过认知权重生成梦中的景象,其次将梦中的景象和脑中的概念进行比较,最后根据比较的结果来优化认知权重。

以上是本人对wake-sleep训练算法的理解,如果不足之处欢迎批评指正。

0 0
原创粉丝点击