自编码器(autoencoder,AE)是一类应用于半监督学习和无监督学习的人工神经网络(ArtificialNeuralNetworks,ANNs),属于深度学习领域的范畴,其作用是以输入信息为学习目标,学习输入信息的表示。常用于压缩降维、风格迁移和离群点检测等。对于图像,图像的数据分布信息可以高效地表示为代码,但其维度和数据信息一般远小于输入数据,这可以作为一个强大的特征提取器,适用于深度神经网络的预训练。此外,它还可以随机生成与训练数据相似的数据,以高效表达原始数据的重要信息,因此通常被视为生成模型。自编码器在深度学习的发展过程中出现过很多变种,比如从去噪自编码器进化到变分自编码器(DenoisingAutoencoder,DAE),再到变分自编码器(Variationalauto-encoder,VAE),以及最后解耦变分自动编码器。随着时代的发展,未来还会出现更多优秀的模型,但它的原理从数学的角度从输入空间和特征空间说起。autoencoder解决了两者前者映射的相似性误差,通过以下公式最小化。求解完成后,autoencoder输出计算出的特征h,即编码特征,但是在autoencoding运算的过程中,容易混入一些随机性,在公式中被识别为高斯噪声,然后编码器的输出作为下一个解码器的输入特征,最终得到一个生成的数据分布信息。简单的架构如下所示,以变分自动编码器(VAE)为例。下面按照逻辑顺序分别介绍一下。1.Autoencoder(AE):autoencoder分为两部分,第一部分是encoder,通常是多层网络,将输入数据压缩成一个向量,变成低维的,这个向量被称为瓶颈。第二部分是解码器,它充满了瓶颈并输出数据,我们称之为重建输入数据。我们的目的是让重构后的数据和原始数据一样,从而达到压缩和恢复的效果。损失函数是最小化重建数据和原始数据之间的距离。损失函数参见图3。下图是一次训练一个浅层自动编码器。首先,第一个自动编码器学习重建输入。然后,第二个自动编码器学习重建第一个自动编码器隐藏层的输出。最后,将两个自动编码器集成在一起。缺点:低维瓶颈明显丢失大量有用信息,重构数据效果不佳。2.Denoisingautoencoder(DAE)这里要说的是我们得到一张干净的图片,想象一个干净的原始minst数据集,这时候我们在原来干净的图片集上加入了很多噪声,对于编码器,我们希望能还原成干净的图片集,和AE一样训练,得到的网络模型就是DAE。如上图所示,去噪编码器通常会在初始输入中添加噪声,训练后会产生无噪声输出。这可以防止自动编码器简单地将输入复制到输出,从而从数据中提取有用的模式。增加噪声的方式可以是在图6左侧加入高斯噪声,也可以通过图6右侧的dropout直接丢弃一层特征。3.变分自编码器VAEVAE与AE、DAE的区别就是原来的编码器被映射成一个向量,现在映射成两个向量,一个向量代表分布的均值,一个代表分布的标准差。两个向量具有相同的正态分布。现在这两个向量被分别采样,采样数据被馈送到解码器。于是我们得到了损失函数:损失函数的前半部分和其他autoencoder函数一样是reconstructionlossloss,后半部分是KLdivergence。KL散度是衡量两个不同分布之间差异的指标,一个重要的特性是它始终为非负数。仅当两个分布相同时才为0。所以后面的作用就是控制瓶颈处的两个向量服从正态分布。(均值为0,标准差为1)。这里有个问题,从两个分布采样数据,BP的时候怎么办?于是就有了一种技术叫做参数化技巧(ReparameterizationTrick)。在前向传播过程中,我们通过上面的公式得到z。在BP过程中,我们让神经网络拟合μ和σ。一般我们很难找到的参数都丢失了。给神经网络就好了,就像BatchNormonization的γ和β一样。缺点是它仍然很模糊。4.解耦变分自编码我们希望瓶颈处的向量,即低维向量在编码过程中保留有用的维度,用正态分布的噪声代替无用的维度,可以理解为学习不同的维度。特性,但这些特性有好有坏。我们只需要在损失函数中加上一个β就可以达到目的。最终实验表明,VAE重构图片时,图片的
