是什么
自编码器(autoencoder)是一种无监督神经网络,它学习两个函数:编码器把输入映射成低维编码,解码器再从编码重建输入[1]。两者之间那个窄层叫瓶颈层(bottleneck),其中的数值构成隐表示(latent representation)[1]。2020 年的一篇综述给出的定义与此一致:它是一类被设计用来把输入编码成压缩而有意义的表示、再解码回来,使重建结果尽可能接近原输入的神经网络[2]。
怎么工作
训练时最小化重建损失,常见的是输入与重建结果之间的 L2 距离,用梯度下降更新参数[1]。它不需要标签,因为要拟合的目标就是输入本身。
瓶颈层是关键所在。一个可以直接把信息原样传过去的网络学不到有用的东西:如果编码和输入一样大,或者模型容量过大,它就可以学会恒等映射,从而变得毫无用处[1]。所以设计工作大多花在堵住这条捷径上——把编码压小,或者限制编码器能做什么。几类主要的自编码器,区别也正在于加了哪一种约束:约束编码要稀疏、要求网络去重建被弄脏的输入,或者惩罚编码对输入细微变化的敏感程度。
从哪来
1982 年,Oja 证明主成分分析(principal component analysis, PCA)等价于一个只有一层恒等激活隐层的神经网络,这个网络同时充当编码器和解码器[1]。1986 年 Rumelhart 和 McClelland 描述了自联想(autoassociation),随后出现了可运行的实现:Elman 和 Zipser 在 1988 年用于语音,Cottrell 及同事在 1987 年用于图像[1]。Baldi 和 Hornik 在 1989 年、Kramer 在 1991 年把 PCA 推广到非线性 PCA,这就是自编码器;Kramer 把自己的版本称为稳健自联想网络[1]。这一想法早期的名字还包括恒等映射(identity mapping)、自监督反向传播(self-supervised backpropagation)和 Diabolo 网络[1]。
变体
稀疏自编码器由 Hinton 和 Zemel 在 1993 年、Ng 在 2011 年探索过[1]。去噪自编码器源自 Kramer 在 1991 年提出的稳健网络,由 Vincent 和 Larochelle 在 2010 年进一步发展[1]。收缩自编码器由 Rifai 及同事在 2011 年提出[1]。2020 年的那篇综述梳理了今天主要使用的各类自编码器,并介绍了它们的应用与使用场景[2]。
用在哪里
主要用途包括降维、用于信息检索的语义哈希(semantic hashing)、异常检测、去噪、压缩和药物发现[1]。
由于训练信号来自数据本身而不是人工标签,只要无标注数据充足,同一套做法就能用上;瓶颈层给出的紧凑描述,也方便系统的后续环节接着处理。
局限
最典型的失效方式恰恰是结构本身招来的:容量过大的模型会干脆学会恒等映射,从而变得毫无用处[1]。重建损失也决定了什么能穿过瓶颈——编码保留下来的,是有助于还原输入的信息,而这不一定是人或者下游任务关心的东西。目标函数里没有任何一条保证隐表示的每个数值单独来看有意义;这取决于编码受到了怎样的约束,以及网络是在什么数据上被训练去重建的。
注释与来源
- Autoencoderhttps://en.wikipedia.org/wiki/Autoencoder
- Autoencodershttps://arxiv.org/abs/2003.05991
引用本页: 自编码器. TellWorld, https://www.tellworld.net/zh/learn/autoencoder. 更新于 2026-11-07