自编码器
自编码器通过中间的潜在编码重建输入。本课八维编码对留出手写数字的平均重建优于二维,但同一数字解码器遇到棋盘格仍失败:编码更宽,不保证能恢复陌生模式。
可以把编码看作递给重画者的短说明。说明长度有限,重画者还依赖已有经验。适合描述数字的方式不一定适合棋盘格,增加几个坐标也不会自动补上这种经验。
编码与重建
编码器将 x 映射到 z,解码器将 z 映射到重建 x̂。训练调节两者权重,降低重建与输入的差异。不需要类别标签,每张输入就是自己的目标。《深度学习》第 14 章介绍这一目标及限制直接复制的必要性。
欠完备自编码器让编码维数少于输入值数,借此检查紧凑表示保留了什么。绕过编码的直接复制路径会破坏这个检验。限制可能促成有用表示,但不保证一定有用。
解码器只能读取编码与已训练权重,不能偷看原图。原始像素只在误差计算时再次出现。本课每图 64 像素:
MSE = Σᵢ(x̂ᵢ − xᵢ)² / 64
平方防止正负误差相消,平均得到逐像素误差,背景也计入。潜在坐标是学出的数值,不一定是像素、类别概率或某个可命名形状。重建得像 8,输出仍是 64 个强度值,不是 8 类预测。
网络结构
输入是 [0,1] 的 8×8 灰度图。网络 64 → 24 → k → 24 → 64,k = 2、4、8。隐藏层为 tanh,输出 sigmoid。按行向量记法:
hEnc = tanh(x W₁ + b₁)
z = tanh(hEnc W₂ + b₂)
hDec = tanh(z W₃ + b₃)
x̂ = sigmoid(hDec W₄ + b₄)
逐步演示
默认八维模型和原数据第 249 行的手写 8,来自 scikit-learn 8×8 digits,不是 MNIST。训练使用另外 1,437 张,留出 360 张;此图用于展示重建对比。
- 确定目标:重建全部 64 像素,数字标签只用于选择示例。
- 编码:八坐标的舍入值为
[0.0612, 0.4671, −0.3931, 0.0032, −0.1654, −0.0009, 0.4504, 0.2202]。解码器只能依赖这些数和权重。 - 解码:轮廓保留,各像素强度不完全相同。
- 先看单像素再看平均:零基像素
[6,4]原值0.4375,重建约0.8077649,平方误差约0.1370961,是该图最大的单项。64 项平均为0.0106606,最大误差与平均误差回答不同问题。 - 回看训练记录:第 0 轮该图 MSE
0.1891698,第 1、10、50、200 轮分别为0.0887845、0.0467999、0.0120355、0.0106606。图像始终未参与训练;这是离线检查点回放,不是播放时训练。 - 先比同图,再比集合:独立训练的二维模型对此图 MSE 为
0.0465775,细节丢失更多。对相同 360 张留出图,二维均值0.0375854、八维0.0148576,集合结果也支持八维更好。 - 改变输入类型:保持八维最终权重,改用合成棋盘格,MSE 达
0.4291607,未恢复交替模式。数字训练没有让它成为通用复制器。
训练图表显示的是 360 张留出图的平均 MSE,与当前图误差分开。第 200 轮分别为 0.0148576 和 0.0106606。横轴按 0、1、10、50、200 的实际轮距排布,不是五个连续更新。
编码宽度与输入分布
改变瓶颈会选择另一套独立训练的网络。划分、24 单元隐藏层、优化器、轮数和种子策略固定,参数数与学得权重必然不同;二维不是从八维模型删去六个坐标。
| 编码维数 | 默认数字 MSE | 360 留出数字平均 MSE | 棋盘格 MSE |
|---|---|---|---|
| 2 | 0.0465775 | 0.0375854 | 0.4074093 |
| 4 | 0.0171610 | 0.0247478 | 0.4114591 |
| 8 | 0.0106606 | 0.0148576 | 0.4291607 |
宽网络在数字集更好,棋盘格却反向排序。报告平均重建误差要说明输入分布,不保证宽度改善每个样本,也不保证优化找到理论最优权重。
八个实数不是八比特。维数比不是文件压缩率,还要计算数值精度与解码器存储成本。
选择需要的编码
在同一留出数字集比较各宽度,在编码预算内选择满足误差容忍度的模型,并看重建图,检查平均值掩盖的细节。容忍度由应用决定。用此数据选模型后,最终报告还需独立评估。
陌生输入类型另测,否则数字均值会掩盖棋盘格失败。若计划把 z 用在其他任务,应直接评估那个任务,不能由重建好推断迁移好。相关内容见 PCA和反向传播。
边界情况
- 二维瓶颈:本配置数字平均误差最高,不是所有二维编码都必然失败的证明。
- 棋盘格:三模型 MSE 都大于 0.4,是未训练的合成探针,选择后整个流程都展示同一失败。
- 重放或变速:数值相同,不更新权重,也不添加随机噪声。
- 宽度范围:2、4、8 只是提供的结构。更大或过完备编码若要学到超出复制的表示,需其他约束。
常见错误
- 给解码器目标图或绕过编码的复制路径,零误差也不能说明编码保留信息。
- 把 MSE 当数字置信度;它只比较像素。
- 期待自动去噪。本课输入和目标为同图;去噪自编码器需损坏输入、干净目标的不同任务。
- 随机取潜在数就期待有效图像。普通自编码器没有训练采样先验,重建目标本身不保证生成能力。
- 把低误差重建叫无损压缩,或把维数当编码比特数。
模型范围
小型全连接网络、8×8 数字、编码器/解码器分组显示、五个离线检查点。Adam 训练 200 轮,示例图留出。未包含卷积、正则化、去噪、变分推断和潜在采样先验。扩散模型展示从噪声生成新样本的另一项任务。