AutoEncoder

AutoEncoder,第1张

1.简介

   Autoencoder是一种无监督学习过程,由encode和decode构成,给定输入之后,经过encode将输入编码成code,然后在经过decode将code解码成输出,通过不断地训练,使得输入和输出尽可能相似。通过控制encode的输出维数,可以实现以低维参数学习高维特征,实现了降维。在训练的过程中,主要使用反向传播进行优化,使得输入和输出尽可能相似。

encode和decode两个过程可以理解成互为反函数,在encode过程不断降维,在decode过程提高维度。当AutoEncoder过程中用卷积 *** 作提取特征,相当于encode过程为一个深度卷积神经网络,好多层的卷积池化,那么decode过程就需要进行反卷积和反池化(https://blog.csdn.net/roguesir/article/details/77469665)。

Autoencode并不需要使完全重构输入,只是需要学习到原始图像的重要特征,实现降维,从而有利于可视化或分类。下面使李宏毅机器学习可成长的一个利用autoencode进行text retrieval的例子。

2.应用

2.1文本检索

将每一个文本提取构建成一个向量,那么就可以轻易的根据余弦相似度等方法得到不同文本之间的相似度,找到我们需要的文本,那个,这个向量如何构建呢,最直接的方法就是利用词袋,若世界上一共有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

        autoencoder 可以用来初始化神经网络的权重(即预训练:pre-training)和降维。如果在做 autoencoder 的时候 激活函数为 linear 的话,那么这就相当于在做PCA了。

在CV领域已有的预训练方法大多属于有监督,数据要求高。MAE基于自监督,且有效降低计算量。

1、输入图像patch切分

2、encoder结构类似ViT,但是随机mask掉输入的75%的patch(mask服务分布保证以center为中心)

3、encoder输出+统一的mask patch embedding输入decoder

4、decoder网络很小,最后一层线性映射,每个token的channel等于patch像素点数,得到像素级重建

5、重建的loss为像素级的MAE

6、推理时,只是用encoder部分,输入全部的patch,获取整图的embedding

7、作为backbone,在分类、检测、分割等下游任务实验中表现优异

1、与BERT的差异

MAE为了消除BERT训练mask推理无mask的GAP:在训练过程中,encoder直接去除了mask patch;decoder中输入统一的mask embedding,loss 计算也只计算mask patch。

2、和Swin transformer的差异

Swin transformer强调构建多层次结构;MAE强调低计算量的预训练

3、MAE和ViT的position embedding差异?

ViT的position embedding是一维可学习embedding,对推理时不同的patch长度采用2D 插值

MAE的position embedding使用sine-cosine全局编码

这里也体现出 可学习position embedding和sine-cosine embedding的一个区别:

训练和推理不一致时,可学习的embedding将不再有效,需要插值使用;

sine-cosine embedding基于周期性的确定值,将可以直接使用

4、应用与小目标等边界场景?

MAE的网络中没有进行下采样,推测最终得到的feature map对小目标的检测更加有利


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11788591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存