这篇paper来做什么的?
用神经网络来降维、之前降维用的方法是主成分分析法PCA,找到数据集中最大方差方向。(附:降维有助于分类、可视化、交流和高维信号的存储)
这篇paper提出了一种非线性的PCA 的推广,通过一个小的中间层来重构高维输入向量,训练一个多层神经网络。利用一个自适应的、多层的编码网络(Deep autoencoder networks),达到降维的目的。
这种降维方法,比主成分分析法PCA(principal compenent analysis)效果要好的多。
在这两种网络中,随机初始化权重,通过最小化原始数据及其重建数据之间的差异,进行训练。
利用链规则来反馈错误,首先通过解码网络(Decoder),然后通过编码网络(Encoder),可以获得梯度。
Hinton把它的算法分成了3部分:(预处理)Pretraining、Unrolling、Fine-tuning
预处理包含了学习一个受限玻尔兹曼机栈( 堆叠的RBM),每一个只有一层特征监测子。一层RBM学习过的数据作为下一层RBM的输入,然后使用BP算法调整参数。
给定原始输入后,先要训练模型的第一层,即图中左侧的黑色框。黑色框可以看作是一个编码器,将原始输入编码为第一层的初级特征,可以将编码器看作模型的一种“认知”。为了验证这些特征确实是输入的一种抽象表示,且没有丢失太多信息,需要引入一个对应的解码器,即图中左侧的灰色框,可以看作模型的“生成”。为了让认知和生成达成一致,就要求原始输入通过编码再解码,可以大致还原为原始输入。因此将原始输入与其编码再解码之后的误差定义为代价函数,同时训练编码器和解码器。训练收敛后,编码器就是我们要的第一层模型,而解码器则不再需要了。这时我们得到了原始数据的第一层抽象。
(1)Pretraining
Pretraining就是RBM限制玻尔兹曼机,通过CD-1算法先获得参数W、b的初始值。
RBM的能量函数
1、h是特征j的二值状态。feature detector特征描述子,是模型自己学习获得的,被称为隐式hidden变量,其实它就是每层网络的输出
2、v是像素i的二值状态。可见变量,即输入。上一层的h就是下一层的v。。
3、bi,bj是像素i和特征j的偏差。
4、wij是像素i和特征j间的权值
我们的目标就是通过调整权值和偏差最小化这个能量函数,使得网络更倾向的真实的数。
每个特征探测子j的二值状态hj以的概率被设为1。
其中σ是逻辑函数(logistic function )
每个vi以的概率被设为1
权重更新:
这里emuxilong 是学习率,<>表示{0, 1}随机变量为1的期望。data分式中,h是通过v获得的;recon中,v是通过隐式变量h重构的, h是通过重构后的v重新计算的。
(2)Unrolling
固定第一层模型,原始输入就映射成第一层抽象,将其当作输入,如法炮制,可以继续训练出第二层模型,再根据前两层模型训练出第三层模型,以此类推,直至训练出最高层模型.
Unrolling其实就是根据encode的输出,获得重构图像的过程,即decode。
训练完一层网络之后,我们可以使它激活,当这一层被数据驱动——进而生成数据作为学习第二层特征的输入。第一层的特征探测子成为第二层RBM的可见元。这种一层接一层/逐层的学习 当必要时可以重复多次/反复进行。
(3)Fine-tuning
有了重构后的输入,再加上原始输入,就可以通过Fine-tuning做进一步的参数调整了。
逐层初始化完成后,就可以用有标签的数据,采用反向传播算法对模型进行整体有监督的训练了。这一步可看作对多层模型整体的精细调整。由于深层模型具有很多局部最优解,模型初始化的位置将很大程度上决定最终模型的质量。“逐层初始化”的步骤就是让模型处于一个较为接近全局最优的位置,从而获得更好的效果。
参数调整阶段使用最小化交叉熵损失:
vi 为像素点i的强度,Vi recon为此点的重构后的值。
总结:
其中Pretraining就是RBM模型,通过CD-1算法先获得参数W、b的初始值。Unrolling其实就是根据encode的输出,获得重构图像的过程,即decode。有了重构后的输入,再加上原始输入,就可以通过Fine-tuning做进一步的参数调整了。
优化多隐层的非线性自编码器的权重是非常困难(2-4):使用大的初始权重,自编码器往往会陷入较差的局部极小(poor local minima);使用小的初始权重,(由于梯度消失)前几层的梯度非常小,使得训练多隐层的自编码器变得不可行
自顶向下的监督学习:
(就是通过带标签的数据去训练,误差自顶向下传输,对网络进行微调)基于第一步得到的各层参数进一步fine-tune整个多层模型的参数,这一步是一个有监督训练过程;第一步类似神经网络的随机初始化初值过程,由于DL的第一步不是随机初始化,而是通过学习输入数据的结构得到的,因而这个初值更接近全局最优,从而能够取得更好的效果;所以deep learning效果好很大程度上归功于第一步的feature learning过程。
多层感知机其实在上世纪已经被提出来了,但是为什么它没有得到广泛应用呢?其原因在于对多层非线性网络进行权值优化时很难得到全局的参数。因为一般使用数值优化算法(比如BP算法)时需要随机给网络赋一个值,而当这个权值太大的话,就很容易收敛到”差”的局部收敛点,权值太小的话则在进行误差反向传递时离输入层越近的权值更新越慢,因此优化问题是多层NN没有大规模应用的原因。而本文的作者设计出来的autoencoder深度网络确能够较快的找到比较好的全局最优点,它是用无监督的方法(这里是RBM)先分开对每层网络进行训练,然后将它当做是初始值来微调。这种方法被认为是对PCA的一个非线性泛化方法。