30u30 中文导读 / 30 天目录 / 第 4 天

第 4 天 · 权重越模糊,信息越少,泛化越好

第 1 单元Keeping Neural Networks Simple by Minimizing the Description Length of the WeightsGeoffrey E. Hinton, Drew van CampCOLT 1993 · 1993
这是导读,不是翻译。先用 10 分钟拿到这篇论文的思想地图,再去读 原论文 →,去原仓库的 04_Minimizing_Description_Length/ 目录 → 动手写代码。
给孩子讲:这一天有 10 岁孩子能听懂的讲义,带猜字游戏和动手活动,可打印。打开儿童讲义 → · PDF 简体 · PDF 繁體

一句话

Hinton 和 van Camp 把“防止过拟合”改写成通信问题:发送者要把权重和预测误差一起传给接收者,总比特数越少越好。他们给每个权重配一个可学习的高斯噪声,噪声越大,权重需要的比特越少。这个目标就是今天变分推断和 VAE 损失函数的前身。

论文讲了什么

核心主张。如果权重里的信息量远小于训练数据输出里的信息量,网络就能泛化。所以训练时要惩罚权重携带的信息量。论文把这个信息量量化成比特数。

通信游戏。发送者和接收者都能看到训练输入,只有发送者能看到正确输出。发送者先训练一个网络,然后发送 2 样东西:

接收者用权重算出网络输出,再加上差值,就恢复了全部正确输出。总描述长度 L(w) + L(D|w) 越短,说明网络抓住的规律越多,记住的噪声越少。这就是最小描述长度原则(Minimum Description Length, MDL),第 5 天会系统讲。

关键问题:一个实数权重要多少比特?精确到无限位需要无限比特。论文的答案是不要精确发送。给每个权重一个高斯分布 N(μ_i, σ_i²)。σ_i 越大,这个权重越“模糊”,发送它需要的比特越少。权重的信息量等于这个分布 Q 与先验 P 之间的 KL 散度(KL divergence)KL(Q || P)。

取舍。噪声越大,权重越便宜,但网络输出越不准,差值越贵。训练同时调节每个权重的均值和方差,在两者之间找平衡。目标函数是一行:总代价 = 期望数据误差的编码长度 + KL(Q || P)。论文第 5.2 节给出“比特回收”(bits back)论证:按分布 Q 随机选权重时,接收者事后能收回选择用掉的随机比特,所以权重的真实代价正好是 KL 散度。

技术贡献。网络含一层非线性隐藏单元、输出单元为线性时,作者推导出期望平方误差及其导数的计算方法,不需要耗时的蒙特卡洛采样。先验也可以学习:作者用 5 个高斯组成的自适应混合先验,延续了 Nowlan 和 Hinton 1992 年的软权重共享(soft weight-sharing)。

实验。任务是预测一类多肽分子的活性。每个分子有 128 个输入特征,训练集只有 105 个样本,测试集 420 个。网络有 4 个隐藏单元、521 个权重,不加限制时严重过拟合。结果用相对误差衡量(1.0 表示和“猜均值”一样差):

作者坦承这只是初步结果,还没有和其他方法做全面比较。今天看,它的价值主要在思想。

关键概念

最小描述长度(Minimum Description Length, MDL)
选模型的原则:模型的描述长度加上借助模型描述数据的长度,总和最短者最好。复杂模型拟合好但自身贵,简单模型便宜但误差贵。
KL 散度(KL divergence)
衡量两个分布的差别。本文中,KL(Q || P) 等于用先验 P 的编码发送一个按 Q 选出的权重时,平均要花的比特数。KL 为 0 表示权重没有从数据中学到任何信息。
比特回收(bits back)
从分布 Q 随机选权重要消耗随机比特。接收者知道 Q 后能反推出这些比特,它们可以用来传别的信息。扣掉收回的部分,净代价就是 KL 散度。
噪声权重(noisy weights)
每个权重不是一个数,而是一个高斯分布,有均值和方差 2 个可学习参数。方差大表示网络不在乎这个权重的精确值,它携带的信息就少。
变分自由能(variational free energy)
“期望数据误差 + KL”这个目标的物理学名字,也就是后来变分推断里的负证据下界(negative ELBO)。描述长度最小化和变分贝叶斯是同一个目标的两种说法。
平坦极小值(flat minimum)
损失曲面上宽而平的低谷,权重小幅变动时损失几乎不变。能容忍大噪声的权重必然落在这种区域。Hochreiter 和 Schmidhuber 1997 年把它和泛化联系起来。

历史位置:为什么值得读

1993 年,反向传播已经普及。但很多实际任务数据少、参数多,过拟合是主要难题。常用的工具是权重衰减(weight decay)和早停(early stopping),它们缺少统一的理论解释。

这篇论文把 Rissanen 的 MDL 原则用到神经网络上,给出一个信息论答案:模型复杂度 = 描述权重需要的比特数。它还把“给权重加噪声”和“减少权重信息量”严格挂上了钩。论文顺带说明,权重衰减就是“权重服从零均值高斯先验”时的特例。

它的影响在约 20 年后才完全显现:

在清单中,它和第 5 天(MDL 教程)、第 23 天(变分有损自编码器)、第 26 天(Kolmogorov 复杂度)构成一条“压缩即学习”的主线。Ilya Sutskever 2023 年的演讲 An Observation on Generalization 专门讲过这条主线。

学前准备

在原仓库怎么学

原仓库第 4 天把论文思想实现为一个“噪声权重”网络,用缺口正弦波回归任务演示。注意本天的练习目录名是大写的 Exercises/。建议按下面的顺序学:

  1. 先读论文第 2–5 节,再打开 README.md 看本天的结构。
  2. 读 implementation.py。先看 BayesianLinear 的 sample_weights 和 kl_divergence,再看 MDLNetwork.update_weights 怎样用 kl_weight 平衡两项代价。
  3. 运行 train_minimal.py:在中间缺一段数据的正弦波上训练,观察缺口处的预测区间是否变宽。
  4. 打开 notebook.ipynb,用 visualization.py 画不确定性包络。
  5. 做 Exercises/ 里的 5 个练习:重参数化技巧、缺口实验、beta 系数研究、蒙特卡洛预测、帕累托前沿。补充题在 exercises_extra.md。
  6. 对照 solutions.py 和 solutions_extra.py 检查答案,最后用 CHEATSHEET.md 复习。

建议:练习 2 的缺口实验最直观。普通网络在缺口处给出过于自信的预测,噪声权重网络的预测区间会在缺口处变宽。练习 3 改变 beta 系数,可以观察模型在“拟合数据”和“保持简单”之间怎样移动。

今天再看

还活着的:“数据误差 + KL”这个结构到处都是。VAE、扩散模型的变分推导、贝叶斯神经网络都用它。大语言模型对齐时的 RLHF 目标里也有一个 KL 惩罚项,用来限制新策略偏离参考模型(第 29–30 天)。

没走通的:给每个权重学一个方差,在大模型上代价高、收益小。今天的大模型几乎不用贝叶斯权重,主要靠海量数据和权重衰减。

压缩视角在复兴:

容易卡住的地方

延伸阅读