自编码器
把数据压缩到最小,然后还原——迫使网络学会什么是"重要的信息"
01 核心原理(大白话版)
想象你要把一幅画压缩成一句话,再让别人根据这句话重新画出来。这句话就是"潜在编码"——它必须包含画中最重要的信息,否则还原时就会出错。
编码器负责压缩:输入→瓶颈(低维)。解码器负责还原:瓶颈→重建输出。训练目标是让重建结果尽量接近原始输入(最小化重建损失)。
瓶颈越窄,压缩越激进,网络被迫学到更本质的特征。自编码器不需要标签,属于无监督学习。
结构图
输入 x → [编码器] → 潜在向量 z → [解码器] → 重建 x̂
训练目标:最小化 MSE(x, x̂) = ‖x − x̂‖²
训练目标:最小化 MSE(x, x̂) = ‖x − x̂‖²
1
编码器 Encoder
将高维输入(如 784 像素)压缩到低维瓶颈(如 32 维),提取关键特征。
2
瓶颈(潜在空间)
最窄的隐藏层,存储对重建最关键的信息,维度越低压缩越激进。
3
解码器 Decoder
从潜在向量还原到原始维度,目标是让重建结果与输入尽可能相同。
步骤1:编码器-解码器结构,信息损失演示
步骤2:重建损失(MSE)与瓶颈维度的关系
瓶颈越窄,保留信息越少,重建误差越大:
步骤3:潜在空间可视化
训练好的编码器会让同类数据在潜在空间聚集,体现出语义结构:
步骤4:手写自编码器训练(梯度下降)
从零实现线性自编码器,观察损失如何随轮次下降:
线性自编码器 ≈ PCA:当编码器和解码器都是线性变换时,自编码器学到的方向等价于主成分分析(PCA)的主成分方向,但激活函数引入非线性后,可以捕捉更复杂的结构。
02 代码
TF.js 实现非线性自编码器,可修改 LATENT 变量观察不同瓶颈维度对重建质量的影响。
03 学术性讲解
自编码器的变体
去噪自编码器 DAE
输入加入随机噪声,目标仍是重建干净数据。迫使模型学到更鲁棒的特征,不依赖噪声细节。
变分自编码器 VAE
潜在空间服从高斯分布,可以从中采样生成新数据。同时是生成模型,不只是压缩工具。
稀疏自编码器
在损失中加入 L1 正则,限制每次只有少数神经元激活,类似大脑的稀疏编码。
自编码器 vs PCA vs VAE
PCA
线性降维,全局最优,无需训练,可解释性强。但无法捕捉非线性结构。
自编码器
非线性降维,可学习复杂流形,但结果不可解释,潜在空间不连续(不能随机采样)。
VAE
潜在空间连续且有概率意义,可生成新样本,但训练更复杂(ELBO 目标)。
应用场景
- 异常检测:正常数据重建误差小,异常数据误差大——用重建损失当异常分数。
- 降噪:DAE 可去除图像/信号中的随机噪声。
- 预训练(历史):深度学习早期用自编码器逐层预训练,再微调。现已被随机初始化+BatchNorm取代。
- 数据压缩:学习领域特定的压缩方案,比通用压缩效果更好。