本公众号(IntBigData)内容主要涉及互联网大数据、大数据安全、人工智能安全等。推送的文章:
AutoEncoder
AutoEncoder框架包含编码过程g和解码过程f。通过g将输入样本x映射到特征空间z,即编码过程;通过f将抽象特征z映射回原始空间得到重构样本x',即解码过程。优化目标是通过最小化重构误差来同时优化encoder和decoder,从而学习得到针对样本输入x的抽象特征表示z。可以看出这是一种无监督模型。
基于神经网络的AutoEncoder模型,encoder部分通过逐层降低神经元个数来对数据进行压缩;decoder部分基于数据的抽象表示逐层提升神经元数量。注意上图中,g和f的梯形形状代表了逐层神经元个数的变化趋势。编码器和解码器是一个前馈全连接的神经网络,通常情况下解码器架构是编码器的镜像,但也不是绝对的,唯一的要求是输入和输出的维度必须相同。
自动编码器通过降维来学习x的抽象特征表示z时,它能学习到什么样的特征?自动编码器可以实现复杂的非线性变换,能够学习非线性流形抽象特征表示z。对于如图所示的二维数据集,AE在降维后有可能获得非线性流形表示。红色的为其他简单方法获得的线性表示。
如何迫使编码器学习提取最重要的特征并学习输入数据中更加鲁棒的表征?提高对训练集数据点周围小扰动的鲁棒性?能够更好地学习数据中的流形结构?这就要控制AE在网络参数复杂时可能存在的过拟合风险。
Denoising AutoEncoder
人类能够准确地把物体从含有噪声的照片中识别出来,这给了研究者一个提示,在神经网络提取特征过程中对含有噪声的输入进行编码解码,能使得学习到的神经网络具有人脑一样的抗干扰、泛化能力。从这个角度看,相应的自动编码器就称为去噪自动编码器(Denoising AutoEncoder)。它在传统AutoEncoder输入层加入随机噪声来增强模型的鲁棒性(具体说是带噪声的数据使得训练得到的网络权重更加鲁棒),使得模型学会如何去除输入中的噪声。
除了通过添加噪声进行学习来缓解经典AutoEncoder的过拟合问题,另一个办法就是结合正则化思想,如收缩自编码器CAE(Contractive AutoEncoder),通过在AutoEncoder目标函数中加上encoder的雅可比矩阵(Jacobian)范式来约束使得encoder能够学到具有抗干扰的抽象特征。
下图是DAE的模型框架。目前添加噪声的方式大多分为两种:添加服从特定分布的随机噪声;随机将输入x中特定比例置为0。第二种方法与现在广泛使用的Dropout很相似,但是Dropout方法是Hinton等人在2012年才提出来的,而第二种加噪声的方法在08年就已经被应用了。这其中的关系,就留给你思考一下,学术研究就是这么有意思。
Variational AutoEncoder
区别于普通AE,VAE最大的不同在于:VAE不再将输入x映射到一个固定的抽象特征z上,而是假设样本x的抽象特征z服从(μ,σ^2)的正态分布,然后再通过分布生成抽象特征z。最后基于z通过decoder得到输出。模型框架如下图所示:
(图来自知乎)
由于抽象特征z是从正态分布采样生成而来,因此VAE的encoder部分实际上可以作为生成模型使用,然后再结合decoder来实现重构保证信息没有丢失。VAE是一个里程碑式的研究成果,倒不是因为它是一个效果多么好的生成模型,主要是提供了一个结合概率图的思路来增强模型的鲁棒性。后续有很多基于VAE的扩展,包括infoVAE、betaVAE和factorVAE等。
CNN/LSTM AutoEncoder
传统AE使用全连接层,容易造成信息损失,由此可以将CNN/RNN/双向RNN/LSTM/GRU等引入到AE中,而且可以根据需要自由组合编码器和解码器的全连接层。由此,CoAE(CNN AE)用卷积层和池化层代替全连接层、LSTM AE 等等。
以LSTM AutoEncoder为例,目标是针对输入的样本序列学习得到抽象特征z。因此encoder部分是输入一个样本序列输出抽象特征z,采用如下的Many-to-one LSTM;而decoder部分则是根据抽象特征z,重构出序列,采用如下的One-to-many LSTM。
为进一步提升特征提取能力,也可以在输入层与隐含层间新增用于计算特征注意力向量的注意力机制层,从而将注意力机制引入 AE 中,注意力自编码器(AAE, attention autoencoder)就是这种思想的实现。如果将Encoder和Decoder全部替换成Self-attention层,就差不多到了Transformer了,但主要面向NLP上下文特征提取和预训练,慢慢地产生了一个新的方向,留得AE继续坚持它自己的目标。
Adversarial AutoEncoder
既然多种NN可以引入到AutoEncoder,将GAN的思路引入AutoEncoder也必定是可以的。对抗自编码器的网络结构主要分成两大部分:自编码部分、GAN判别网络。整个框架也就是GAN和AutoEncoder框架二者的结合。训练过程分成两个阶段:首先是样本重构阶段,通过梯度下降更新自编码器encoder部分、以及decoder的参数、使得重构损失函数最小化;然后是正则化约束阶段,交替更新判别网络参数和生成网络(encoder部分)参数以此提高encoder部分混淆判别网络的能力。
一旦训练完毕,自编码器的encoder部分便学习到了从样本数据x到抽象特征z的映射关系。
应用1:图像降维
使用MNIST手写数字图片库做训练,每个图片是28*28=764维的向量,AE训练完成后,对随机选择的若干个原始图片进行降维。当选择AE的参数分别为(784,8,784)、(784,16,784)、(784,64,784)时,可以看到64维基本上能达到较好的视觉效果。
应用2:异常检测
使用重构误差作为判断输入样本是否异常的标识。使用正常样本训练好的模型,某个样本的重构误差如果比较大,一般可认为是一个异常样本,否则可作为正常样本。
自编码器的应用包括:异常检测、数据去噪(例如图像、音频)、图像着色、图像修复、信息检索等、降维等。
文章参考:知乎(https://zhuanlan.zhihu.com/p/68903857)以及一篇综述:An Introduction to Autoencoders(2022)、自编码器及其应用综述(通信学报,202)。