深度自编码器原理

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gentelyang/article/details/77478568

自编码器的目标:使用少量高阶特征重构输入

定义:使用自身的高阶特征编码自己

思想:自编码器其实也是一种神经网络,他的输入和输出一致的,借助稀疏编码的思想,目标是使用高阶特征重新组合来重构自己。

特点:期望输入和输出一致;希望使用高阶特征来重构自己,而不只是复制像素点。

Hinton提出基于信念网络(deep belief Networds,DBN,由多层RBM堆叠而成)可以使用无监督学习逐层训练的贪心算法,为训练很深的网络提供了一个可行方案:我们可能很难直接训练极深的网络,但是可以用无监督的逐层训练提取特征,将网络的权重初始化到一个比较好的位置,辅助后面的监督训练,其中无监督的逐层训练,其思想就和自编码器相似,就是提取中间层特征或者最后输出的高阶特征,来作为研究初始化权重用;后面的目标就是让神经网络的输出能和原始输出一致,相当于学习一个恒等式y=x

一:AutoEncoder自编码器:自动编码器是一种尽可能复现输入信号的神经网络。为了实现复现输入数据,自动编码器必须捕捉可以代表输入数据的最重要的因素,当中间隐层节点的数量少于输入节点数量时,那只能学习数据中最重要的特征复原,将不太相关的特征去除,此时类似PCA一样,找到代表原信息的主要成分,同时也可以再给中间隐层加一个L1的正则,可以惩罚隐层节点的稀疏程度,惩罚稀疏越大,学到的特征组合就越稀疏,时间使用的特征数量就越少。


二:AutoEncoder是一种无监督学习学习特征

 对比一下监督学习和AutoEncoder的区别:

                           

左侧的为监督学习,给定了target作为标签,而右侧的为非监督的未给定标签


AutoEncoder编码器,code也就是输入的一个表示,我们找的也是让重构误差最小的折合coder来作为input信号的良好表达,input先经过encoder再经过decoder过程解码,我们最后得到一个重构的输出信号,我们希望这个重构的输出和input有最小的重构误差。这里重点来说明一下监督学习和自编码器在优化时的区别吧:监督学习优化的是prediction-real_data的均方差来op的,而在利用自动编码器的时候我们没有target这个真实值,所以优化的是重构之后的输出和input之间的误差。


三:每一层都会得到原始input的不同表达,这里我们希望它是越抽象越好,像人的视觉系统一样最好。

       因为这里AutoEncoder还不能用来分类数据,AutoEncoder还没有学习如何去连接一个输入和一个类,这里的AutoEncoder只是学习了如何去重构或者复现他的输入而已。只是学习获得了一个可以良好代表输入的特征,这个特征最大程度的代表输入信号。只需要在AutoEncoder的最顶层添加一个LR、SVM、Softmax分类器等就可以,最后再通关标准的多层神经网路的监督训练方法去训练(SGD)


四:在原有的特征上添加一些自动学习得到的特征可以大大提高Accuracy,接下来介绍两种AutoEncoder的两种变体:

      ①:Sparse AutoEncoder稀疏编码器:前提是当隐层节点数少于输入的时候,将相当于一个降维的过程,类似pca;在AutoEncoder的中间隐层加上L1的Regulations限制,就得到了Sparse AutoEncoder,L1主要用来约束每一层节点中大部分为0,少数为1.

code尽量稀疏,稀疏的表达比其他的表达效果更好。

②:Denoising AutoEncoder降噪自动编码

最具代表性的就是去噪自编码器,应用范围广,其中去噪自编码器只需要去掉噪声,并保证隐层节点小于输入层节点;Masking Noise的自编码器只需要将高斯噪声改为随机遮挡噪声;VAE(Variational AutoEncoder)相对比较复杂,VAE中间节点的分布有强假设,拥有额外的损失项,且会使用特殊的SGVB算法进行训练,目前VAE在生成模型 中发挥了很大作用。

      DA实在AutoEncorder的基础上,在训练数据中加入了噪声,加入噪声之后,自动编码器必须学习如何去得到没有噪声的原始输入,自动编码器就去学习输入信号的鲁棒性的表达,所以在训练数据中加入噪声经过AutoEncoder之后得到的输出有更好的泛化能力。

⑤:Output=a1*Q1+..........an*Qn,其中Qi是基向量,ai是系数,我们要求Min|Output-Input}+regulations的最小值,SC就是将一个信号表示为一组基的线性组合,而且要求只需较少的几个基就可以将信号表示出来。稀疏自动编码就是一种无监督学习,它是来寻求一组“超完备”基向量来更高效的表示样本数据。类似PCA,让我们找到一组完备的基向量Qi,超完备基的好处是它能更好的找出隐含在输入数据内部的结构与模式。对于超完备基来说,稀疏ai不再有输入唯一确定。所以,在稀疏自编码算法中,我们加入了冷一个评判标准“稀疏性”来解决因超完备导致的退化问题。


⑥Sparse coding 主要由两部分组成:

      1:Training阶段:给定一系列的样本图片[x1,x2....],要学习得到一组完备基[Q1,Q2,....],这组完备基也就是字典。

        2:Coding阶段:给定一个新图片x,由完备基通过一个Lasso问题得到稀疏向量a。

自编码器的隐层只有一层那么原理类似PCA,DBN训练的时候,需要先对每两层间进行无监督训练,这个过程相当于另一个多层的自编码器,可以将整个网络的权重初始化到一个理想的分布,最后通过反向传播调整模型权重,这个步骤会使用经过标注的信息来做监督性的分类训练。

总结:自编码器的作用不仅局限在给监督学习做预训练,直接使用自编码器进行特征特区和分析也是可以的,现实生活中最多的还是未标注的数据,因此自编码器拥有用武之地。


展开阅读全文

没有更多推荐了,返回首页