/knowledge/notes/autoencoders-vs-pca
概念笔记 · 主成分分析与降维
自编码器与 PCA
两者都把每一行压成更少的数再还原。线性自编码器会精确地落到 PCA 的答案上,非线性才让它能跟着曲线走。
- 学于
- 面向数据科学的多元统计MAST90138 · MAST30034
- 时间
- 墨尔本大学,2021–2024
- 应用于
- 多元统计实验室 · 信号源分离实验室
- 阅读 / 复习
- 约 5 分钟阅读2026-10-21
PCA 和自编码器回应的是同一个要求:把每一行压缩成更少的几个数,再尽可能好地从这几个数里把这一行还原出来。PCA 用一条直线或一个平面来压缩,有闭式解。自编码器则把压缩和还原学成两个小神经网络。真正有用的,是知道两者在哪里完全一致,又在哪里分道扬镳。
01
基本想法
两种方法的结构一样。编码器把有 个数的一行 变成有 个数的编码 , 比 小。解码器再把编码变回一行 。训练就是在编码允许的范围内,让 尽量接近 。中间那段窄口,也就是瓶颈,逼着方法留下最重要的信息,放掉其余的。
在 PCA 里,两半都是线性的。编码器投影到 个方向上,解码器再把这些方向加回去。按平方误差算,最好的方向就是协方差矩阵最大的几个特征向量,所以根本不需要训练。每次得到的答案都一样,只是每个方向的正负号可能不同。
在自编码器里,两半都是神经网络。隐藏层用了非线性激活函数,编码就能沿着一条曲线或一个弯曲的面走,于是一个数就能描述弯曲形状上的一个点,而这个形状没有任何直线拟合得了。
反过来的联系更值得记住:把激活函数去掉,让每一层都是线性的,再用平方误差训练,自编码器最后张成的子空间正好就是 PCA 找到的那个。Baldi 和 Hornik 在 1989 年证明了,只有一个隐藏层时,这个损失函数除了 PCA 的解之外没有别的局部极小值。线性层叠得再多,算的仍然只是一个线性映射,不可能做得更好。非线性才是全部意义所在。
02
数学
把数据按均值 中心化,构造协方差矩阵 。它的特征向量 就是主方向,每个特征值 是沿这个方向的方差。
这里除以 n 而不是 n − 1,是为了让下面的误差等式精确成立,不影响方向。
把最大的 个特征向量排成矩阵 的列。PCA 的重建就是投影到这些方向上,它的平均平方误差正好等于被丢掉的方差。
Eckart–Young 定理说,按平方误差算,没有哪个秩为 k 的线性映射能做得更好。
自编码器把投影换成两个学出来的函数,编码器 和解码器 ,在同一个损失上用梯度下降来拟合。
如果 f 和 g 都是线性的,最好的 g∘f 就是 PCA 的投影。如果它们能弯,重建就能贴着曲面走。
能弯是有代价的,代价就是 PCA 从来不需要的那些东西:层的大小和激活函数要选,学习率要定,起点是随机的,什么时候停要有规则,拟合出来的形状还可能绕着噪声转。PCA 只有一个决定要做,就是 ,而保留下来的方差比例 能帮你做这个决定。
03
动手试
下面的工具把 80 个点各压成一个数,再还原回来。虚线是 PCA 的答案。红色曲线是一个小自编码器,结构是 2、6、1、6、2 个单元,就在你的浏览器里用 Adam 训练 1,200 步。两者都在训练点和同一条曲线上新抽的 80 个点上计分。
自编码器的层
显示误差
- 训练点
- PCA,一个主成分
- 自编码器,一个数的编码
第一主成分保留了 78% 的方差。
| 方法 | 训练 | 新数据 |
|---|---|---|
| PCA | 0.0921 | 0.0911 |
| 自编码器(tanh) | 0.0024 | 0.0033 |
在新数据点上,PCA 的误差为 0.0911,tanh 自编码器为 0.0033。自编码器跟上了 PCA 的直线跟不上的弯。
- 把层切换成“线性”。红色曲线被拉直,落在虚线上,两列误差和 PCA 一直到小数点后四位都相同,正如 Baldi 和 Hornik 所预言的。
- 切回 tanh、弯曲程度为 1 时,曲线跟着弯走,它在新数据上的误差比 PCA 小二十倍以上。
- 把弯曲程度拖到 0。这时数据真的是一条直线,PCA 几乎保留了全部方差,自编码器无可添加。
- 弯曲程度保持为 0,把噪声调到 0.20,再按两次“换一组数据”到种子 3。tanh 自编码器在训练点上赢了 PCA,在新数据上却输了。它把自己弯去迁就噪声了。
- 在弯曲的设置下显示 PCA 的误差。误差线在弯的两端最长,那里直线离数据最远。
04
我在哪用到它
05
容易出错的地方
06
参考资料
- Neural networks and principal component analysis: Learning from examples without local minimaBaldi 与 Hornik,Neural Networks 第 2 卷第 1 期,1989,第 53–58 页。“动手试”第一条背后的证明:用平方误差训练的线性自编码器,唯一的极小值就是 PCA 的子空间。
- Nonlinear principal component analysis using autoassociative neural networksKramer,AIChE Journal 第 37 卷第 2 期,1991,第 233–243 页。工具采用的瓶颈结构出自这里:一个映射层、一个窄编码层和一个反映射层,作为非线性 PCA 提出。
- Reducing the dimensionality of data with neural networksHinton 与 Salakhutdinov,Science 第 313 卷第 5786 期,2006,第 504–507 页。让深层自编码器变得实用的论文,里面有 PCA 编码和自编码器编码的对照图。
- Deep Learning, Chapter 14: AutoencodersGoodfellow、Bengio 与 Courville,MIT Press,2016。可以免费在线阅读的教材章节,讲欠完备、正则化和去噪自编码器,以及它们和流形学习的联系。
- Principal component analysis: a review and recent developmentsJolliffe 与 Cadima,Philosophical Transactions of the Royal Society A 第 374 卷,2016。一篇清楚的 PCA 现代综述,包括标准化的选择和保留几个主成分的问题。