【DL学习笔记】5:自动编码器(AutoEncoder)及其变种

无监督学习的一个重要作用就是降维(Dimension Reduction),比如从大量的人员信息中自动学习到一些对业务有价值的特征,或者用于高维数据的可视化。传统的方法是用PCA、T-SNE或者一些简单的自编码器对数据进行降维。

相比监督学习以Label为目标,无监督学习的目标就是原始数据自己。

1 简述

自动编码器(以下简称AE)是将构造的神经网络模型分为编码器(Encoder)解码器(Decoder) 两部分,Encoder将原始表示编码成隐层表示,Decoder将隐层表示还原(Reconstruction)成原始表示形式,而训练的目标就是最小化重构误差。其中隐层表示往往是比原始表示的维度更低,以得到更稠密更有意义的表示。
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
所以AE实际上就是一个特殊的全连接网络,特殊在两个地方:

  • 输入和输出的维度一样
  • 网络中间有一个neck,可以取出其中的隐层表示

【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
AE降维后的隐层表示应当具备原始数据的语义表示,也就是同一类型的数据应当尽可能的聚类在一起。

2 训练AE采用的损失函数

因为AE就是一个全连接网络,训练过程中其它的没有什么可说的,就是要把损失函数设计好。

2.1 MSE Loss

对于实数构成的向量数据[x1,...,xk][x_1,...,x_k],可以直接用element-wise的MSE损失:
l(f(x))=12k(xk^xk)2 l(f(x)) = \frac{1}{2} \sum_k{(\hat{x_k}-x_k)^2}

其中xk^\hat{x_k}是从隐层还原后的原始表示向量的分量,而xkx_k也就是输入数据向量的分量。

2.2 Cross Entropy Loss

对于二进制0和1或者两者之间的概率值构成的向量数据[x1,...,xk][x_1,...,x_k],可以直接用交叉熵损失:
l(f(x))=k(xklog(xk^)+(1xk)log(1xk^)) l(f(x)) = - \sum_k(x_k log(\hat{x_k})+(1-x_k)log(1-\hat{x_k}))

注意,像MNIST这样的灰度图像的数据,直接用MSE是可以的。如果将其从0-255归一化到0-1,那么也就表达了每个像素点接近1的概率,这样用交叉熵损失也是可以的。

3 相比传统降维方法的优势

很多传统降维方法只引入了非常有限的非线性成分,如PCA本身做的是一个线性变换的降维,实际上是很有局限性的,因为大部分数据的形态都不是能在线性空间上很好的表示的。

3.1 重建后的原始数据的比较

在MNIST数据集上重建的效果比较:
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
在人脸图像重建上的效果比较:
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
第一行是原始数据,最后一行是PCA降维再重建后的数据,第二行是用AE编码降维再重建后的数据。

3.2 隐层表示的可分离性(separability)的比较

降维还要尽量让低维的隐层表示在空间上是容易分离开的,这既是对数据保持语义的要求也是为方便数据可视化的要求。

下图是在MNIST上分别用PCA和AE降维到2维后的数据点:
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
在文本数据上降维后的结果(左侧是LSA,右侧是AE):
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
注意这里图上文本数据虽然标有Label信息,但是训练时并没有使用它,只是用Label信息来对AE的效果做了一个验证。

4 Denoising AutoEncoder

对于图像数据而言,如果直接用AE可能仅仅是让神经网络去记住图像的像素点,而没有学习到一些更深层的特征。Denoising AutoEncoder就是将图像先添加噪声扰动再作为AE的输入,而去要求期望的输出尽可能接近不带噪声的数据数据。
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种
这样中间学习到的隐层表示就是尽可能的和噪声无关的,更能代表数据真实的语义特征。

5 Dropout AutoEncoder

添加了Dropout的AE,即在训练的前向传播时随机将某些地方的Weight设置成0,也就是让这条连线暂时断开,迫使它学习到更多的神经元的输入,网络的鲁棒性也更好。

下图对不同程度的使用Dropout的情况做了比较,完全不使用Dropout时Loss确实是最小的(因为网络容量最大),见左侧图的最左边一列。但是Accuracy并不是最高的,如右图中使用0.2的断开几率时Accuracy最高。
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种

6 Adversarial AutoEncoder

这是从GAN中借鉴的技术。在使用普通的AE时会发现随着训练的进行,中间的隐层表示的分布会逐渐偏离所希望的分布。

在Adversarial AutoEncoder中为隐层表示表示添加了一个判别器,同时将希望的数据分布和隐层表示输入其中,以迫使AE学习到的隐层数据表示符合所希望的分布。
【DL学习笔记】5:自动编码器(AutoEncoder)及其变种