AutoEncoder
1.简介
Autoencoder是一种无监督学习过程,由encode和decode构成,给定输入之后,经过encode将输入编码成code,然后在经过decode将code解码成输出,通过不断地训练,使得输入和输出尽可能相似。通过控制encode的输出维数,可以实现以低维参数学习高维特征,实现了降维。在训练的过程中,主要使用反向传播进行优化,使得输入和输出尽可能相似。
PAC(上)和autoencode(下)对比encode和decode两个过程可以理解成互为反函数,在encode过程不断降维,在decode过程提高维度。当AutoEncoder过程中用卷积操作提取特征,相当于encode过程为一个深度卷积神经网络,好多层的卷积池化,那么decode过程就需要进行反卷积和反池化(https://blog.csdn.net/roguesir/article/details/77469665)。
架构Autoencode并不需要使完全重构输入,只是需要学习到原始图像的重要特征,实现降维,从而有利于可视化或分类。下面使李宏毅机器学习可成长的一个利用autoencode进行text retrieval的例子。
2.应用
2.1文本检索
利用autoencode进行Text retrieval将每一个文本提取构建成一个向量,那么就可以轻易的根据余弦相似度等方法得到不同文本之间的相似度,找到我们需要的文本,那个,这个向量如何构建呢,最直接的方法就是利用词袋,若世界上一共有1000个词,那个这个文本对应的向量的维度是一千维的,每一个分量的取值为0或1,表示对应的单词在文档中有没有出现。但是这种方法构建的向量复杂,且没有考虑语义信息。Autoencode更好的解决了这个问题。
autoencode可以将向量不断压缩,压缩成一个二维的向量,右上角的图是Hinton在Science上发表的文章的结果图,将文章分为了不同的类别,query对应的类别如图中红点所示,描述的是Energy markets。而右下角所示的LSA并不能起到这种良好的分类效果。
2.2图像搜索
或许可以通过图片在像素上的相似程度来找到相似的图片,但是这样可能会存在问题。如下图,要找到图一的迈克尔杰克逊,但是直接计算像素上的相似性可能得到的相似性图片是后面那几张。
用Autoencode就可以解决这个问题,将图片层层编码成一个code,相当于对原图进行了压缩和特征提取,最后在code上进行处理来比较相似性。
利用自编码器进行图片搜索2.3预训练深度神经网络
在进行神经网络训练的时候,通常需要初始化一些参数,如权重等。有一些方法可以实现这些参数的初始化,即pre-training,预训练。那么怎么进行这些参数的初始化呢?autoencode就可以完成这个工作
预训练第一层参数假如构建了一个如上图右边所示的神经网络,每一层的输入维度分别为784/1000/1000/500,那么在训练第一层的时候可以利用自编码器,如右图所示,将784维的输入输进自编码器,中间encode一千维,使得输出的结果和input越接近越好,这样就将输入转化成了一个一千维的code,就得到了可以用来初始化的第一层的参数W1.这里要注意,encode的code如果要比输入还要大,即这里的1000维大于784维,要小心自编码器将输入完全复制成code的情况,使得输入和输出是完全identity的。这一步将第一层的参数训练好之后就可以进行下一步
第二层参数预训练在固定第一层的参数的之后,可以得到一个1000维的输入,在输入一个自编码器中,将输入转化为1000维的code,保证输入和输出尽可能相似,此时可以得到第二层的参数W2,如此下去,将W1和W2固定,再通过自编码器可以得到W3,然后继续下图所示的过程。
微调第四层参数将前三层参数预训练得到以后,将输出的结果进入最后一层,最后一层的参数可以随机初始化,然后根据最后的误差并利用反向传播算法进行调整。
4.在CNN上的应用
在卷积神经网络中,利用反向传播算法进行学习时,会有反卷积和反池化,就利用到了autoencode。
https://blog.csdn.net/sinat_25346307/article/details/79104612
3.几种自编码器
3.1De-noising auto-encode
https://blog.csdn.net/marsjhao/article/details/73480859
本文只是作者的粗浅的理解,想要了解更多内容可以看一下李宏毅老师的课程https://www.bilibili.com/video/av35932863/?p=24