第 17 章 自编码器
自编码器是一种无监督表示学习模型。它的目标不是预测人工标签,而是把输入压缩成隐表示,再从隐表示重构原输入。
基本结构:
text
输入 x -> 编码器 -> 隐变量 z -> 解码器 -> 重构 x_hat17.1 编码器和解码器
编码器把输入映射成隐表示:
解码器把隐表示映射回输入空间:
训练目标是让
对于连续输入,常用均方误差:
对于二值输入或归一化图像,也可以使用交叉熵重构损失。
17.2 瓶颈结构
如果隐表示维度小于输入维度,模型必须压缩信息。
text
高维输入 -> 低维 z -> 高维重构这个低维
如果隐表示维度太大,并且没有其他约束,自编码器可能学成近似恒等映射,表示学习意义就会变弱。
17.3 自编码器和 PCA
线性自编码器在某些条件下和 PCA 有联系。PCA 寻找线性低维子空间;自编码器如果不使用非线性激活,本质上也只能学习线性变换。
非线性自编码器更灵活,可以学习非线性流形。
| 方法 | 表示能力 | 训练方式 |
|---|---|---|
| PCA | 线性降维 | 特征分解 |
| 自编码器 | 可非线性降维 | 神经网络优化 |
17.4 去噪自编码器
去噪自编码器先给输入加入噪声,再要求模型重构干净输入。
text
干净 x -> 加噪 x_tilde -> 编码器 -> 解码器 -> 重构 x目标是:
它迫使模型学习稳定结构,而不是记住输入的局部噪声。
17.5 稀疏自编码器
稀疏自编码器会约束隐藏层大多数神经元保持不激活,只让少数神经元响应。
这种约束可以让模型学习更有选择性的特征。例如图像中某些神经元可能只对边缘、纹理或局部形状敏感。
稀疏性通常通过额外正则项实现。
17.6 变分自编码器
普通自编码器把输入编码成一个确定向量
编码器输出均值和方差:
然后从分布中采样:
VAE 的损失包含两部分:
| 项 | 作用 |
|---|---|
| 重构损失 | 让生成结果接近输入 |
| KL 散度 | 让隐变量分布接近先验 |
常见先验是标准正态分布:
KL 项让潜空间更规整,因此可以从先验中采样
17.7 重参数化技巧
VAE 训练时需要采样,但直接采样会阻断梯度。重参数化技巧把采样写成:
其中:
随机性来自
17.8 应用
自编码器常见用途:
- 降维。
- 表示学习。
- 去噪。
- 异常检测。
- 生成模型的基础结构。
异常检测中,可以用重构误差判断样本是否异常。模型在正常样本上训练,如果某个样本重构误差很大,说明它可能和训练分布不同。