参考文献:http://blog.csdn.net/zouxy09/article/details/8775518
5.1训练原理
2006年,hinton提出了在非监督数据上建立多层神经网络的一个有效方法,简单的说,分为两步:一是,每次训练一层网络;二是调优,使原始表示x向上生成的高级表示r和该高级表示r向下生成的x'尽可能一致。
方法是:
1)首先逐层构建单层神经元,这样每次都是训练一个单层网络。
2)当所有层训练完后,Hinton使用wake-sleep算法进行调优。
将除最顶层的其它层间的权重变为双向的,这样最顶层仍然是一个单层神经网络,而其它层则变为了图模型。向上的权重用于“认知”,向下的权重用于“生成”。然后使用Wake-Sleep算法调整所有的权重。让认知和生成达成一致,也就是保证生成的最顶层表示能够尽可能正确的复原底层的结点。比如顶层的一个结点表示人脸,那么所有人脸的图像应该激活这个结点,并且这个结果向下生成的图像应该能够表现为一个大概的人脸图像。Wake-Sleep算法分为醒(wake)和睡(sleep)两个部分。
1)wake阶段:
认知过程,通过外界的特征和向上的权重(认知权重)产生每一层的抽象表示(结点状态),并且使用梯度下降修改层间的下行权重(生成权重)。
2)sleep阶段:
生成过程,通过顶层表示(醒时学得的概念)和向下权重,生成底层的状态,同时修改层间向上的权重。
deep learning训练过程具体如下:
1)使用自下上升非监督学习(就是从底层开始,一层一层的往顶层训练):
先用无标定数据(有标定数据也可)训练第一层,训练时先学习第一层的参数(这一层可以看作是得到一个使得输出和输入差别最小的三层神经网络的隐层),由于模型容量(capacity)的限制以及稀疏性(Sparse)约束,使得得到的模型能够学习到数据本身的结构,从而得到比输入更具有表示能力的特征;在学习得到第n-1层后,将n-1层的输出作为第n层的输入,训练第n层,由此分别得到各层的参数。
这一步可以看作是一个无监督训练过程,是和传统神经网络区别最大的部分(这个过程可以看作是featurelearning过程)
2)自顶向下的监督学习(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调):
基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deeplearning效果好很大程度上归功于第一步的feature learning过程。
5.2具体训练算法
1)AutoEncoder自动编码器,
http://blog.csdn.net/zouxy09/article/details/8775524(前一部分)
2)Sparse AutoEncoder稀疏自动编码器:AutoEncoder +稀疏限制(L1限制)
http://blog.csdn.net/zouxy09/article/details/8775524(中间部分)
http://blog.csdn.net/zouxy09/article/details/8777094(详细版)
3)Denoising AutoEncoder降噪自动编码器:AutoEncoder + 被加噪的数据
http://blog.csdn.net/zouxy09/article/details/8775524(末尾部分)