自编码器是什么?先压缩再还原,在过程中学到数据的精华
自编码器(Autoencoder)是一种特殊的神经网络,它的目标是把输入的数据先压缩成一个简短的表示,再从这个表示中尽可能准确地还原出原来的数据。由于训练时的“标准答案”就是输入本身,它不需要任何人工标注的标签,属于无监督学习,或者说自监督学习。
它的结构
自编码器由两部分组成。编码器:把输入的数据,比如一张图片,压缩成一个维度低得多的向量,这个向量叫作潜在表示、编码或瓶颈。解码器:根据这个潜在表示,重建出与原始输入尽量相似的数据。训练的目标是让重建的数据与原始输入之间的差距,也就是重建误差,尽可能小,比如用均方误差来衡量。
关键在于中间那个“瓶颈”:它的维度比输入小得多,网络无法简单地把输入原封不动地复制过去,只能学会抓住数据中最本质、最重要的信息,丢掉那些不重要的细节和噪声。就像要用很少的字给朋友描述一张照片,你只能挑最关键的特征来说。训练好之后,这个潜在表示就是对数据的一种紧凑的、有用的特征表示。
与主成分分析的关系
如果编码器和解码器都只是线性变换,并且使用均方误差作为损失,那么自编码器学到的潜在空间,与主成分分析找到的主成分空间是一样的。而使用多层的、带非线性激活函数的神经网络作为编码器和解码器,自编码器就能学到更复杂的非线性结构,可以看作主成分分析的非线性推广。2006 年,杰弗里·辛顿和 Ruslan Salakhutdinov 在《科学》杂志上发表论文,展示了用逐层预训练的深度自编码器进行降维,效果明显优于主成分分析,这项工作是深度学习复兴的标志性成果之一。
常见的变体
去噪自编码器:由 Pascal Vincent 等人在 2008 年提出,故意给输入加上噪声或遮住一部分,让网络学会从受损的输入中还原出干净的原始数据,这迫使它学到更鲁棒的特征。稀疏自编码器:在潜在表示上加入稀疏性的约束,让每次只有少数神经元被激活,即使潜在表示的维度很高,也能学到有意义的特征。近年来,稀疏自编码器被用于大语言模型的可解释性研究,Anthropic 等机构用它从模型内部的激活中分解出大量可理解的特征,比如对应某个具体概念的特征。变分自编码器(VAE):由 Diederik Kingma 和 Max Welling 在 2013 年提出,编码器输出的不是一个确定的向量,而是一个概率分布,并要求这个分布接近标准正态分布。这样,潜在空间变得连续而规整,可以从中随机采样,再用解码器生成全新的数据,使自编码器成为一种生成模型。Stable Diffusion 等潜空间扩散模型就使用变分自编码器把图片压缩到潜在空间中进行处理。掩码自编码器(MAE):由何恺明等人在 2021 年提出,随机遮住图片中大部分的小块,比如 75%,让模型根据剩下的部分还原出被遮住的内容,被证明是视觉模型预训练的一种高效方法。BERT 的掩码语言模型也体现了类似的思想。
应用
自编码器被用于数据降维和可视化;图像去噪和修复;异常检测:用正常的数据训练自编码器,遇到异常的数据时,它很难重建,重建误差会明显偏大,可以据此发现工业设备的故障、信用卡的欺诈交易、网络的入侵行为;数据压缩;以及作为生成模型和预训练模型的组成部分。