本节摘要:把机器学习的主流工具接进信息论族谱——交叉熵损失是逐词条件熵分解的直接后代;互信息做特征选择与表征评估的用法与估计偏差陷阱;信息瓶颈理论如何把"学习"重述为"压缩输入、保留标签相关",以及这条思路在深度学习可解释性上的位置与争议。
训练语言模型时最常写的目标叫"交叉熵损失"。这个名字不是巧合——它是信息论的直系亲属。回忆第 2 章的链式法则:整段文本的联合熵可以分解为"每个词在给定前文下的条件熵之和"。语言模型的训练目标正是最小化模型分布与真实分布之间的交叉熵,也就是让模型对"下一个词"的条件分布尽量贴近真实条件分布。逐词训练、逐词打分(困惑度以每词比特数计价)——整套流程是链式法则的工程化身,损失曲线直接读作"模型对语言的每词熵还差多少"。
分类任务同理:softmax 输出与独热标签的交叉熵,等价于"用模型分布编码真实标签的额外码长"。训练即在压缩——模型学得越好,用它编码数据的平均码长越短。这个视角近年甚至被推到极限:有研究直接把"训练后模型对数据的压缩长度"当作能力指标,把压缩与智能的古老联想做成了可测量的实验科学。
第 2 章铸好的互信息砝码,在机器学习里最先的岗位是特征选择:特征与标签的互信息高者优先入选——不辨因果方向恰好是美德(第 2 章的结论在此兑现),先验知识少的场景尤其好用。
# 互信息做特征选择:哪些特征真的在"称"标签 from math import log2 def mi_binary_feature(p_label, p_feat_given_label): """二值特征与二值标签的互信息(手算小样本演示)""" joint = [[p_label[i] * p_feat_given_label[i][j] for j in range(2)] for i in range(2)] p_feat = [sum(joint[i][j] for i in range(2)) for j in range(2)] ent = lambda ps: -sum(p * log2(p) for p in ps if p > 0) return ent(p_label) + ent(p_feat) - sum( joint[i][j] * log2(joint[i][j] / (p_label[i] * p_feat[j])) for i in range(2) for j in range(2) if joint[i][j] > 0) label = [0.5, 0.5] # 标签均衡 feat_informative = [[0.9, 0.1], [0.1, 0.9]] # 特征强烈依赖标签 feat_weak = [[0.6, 0.4], [0.5, 0.5]] # 特征几乎与标签无关 feat_redundant = [[1.0, 0.0], [1.0, 0.0]] # 特征恒定(零信息) print(f"强特征互信息 = {mi_binary_feature(label, feat_informative):.4f} 比特") print(f"弱特征互信息 = {mi_binary_feature(label, feat_weak):.4f} 比特") print(f"恒定特征互信息 = {mi_binary_feature(label, feat_redundant):.4f} 比特") # 输出: # 强特征互信息 = 0.5310 比特 # 弱特征互信息 = 0.0073 比特 ← 依赖越弱, 互信息越小 # 恒定特征互信息 = 0.0000 比特 ← 方差为零的特征对标签零信息
三个读数给特征选择的三条经验做了信息论注脚:强依赖特征接近标签熵的一半(本例标签熵一比特,单特征至多贡献一比特,这里给出零点五三);弱依赖特征贡献微小——方差虽大但与标签错拍,几乎白占维度;恒定特征严格为零——零方差特征在滤波法里最先被淘汰,信息论给出的是同一个判据的精确版本。互信息筛选是过滤法(不训练模型、只看统计关联)家族里最贴近信息论的一种,与相关性系数相比的优势是捕获非线性关联——相关系数只盯线性关系,互信息对任何统计依赖都灵敏。
⚠️ 估计陷阱:小样本下的互信息系统性偏高。互信息的直接估计需要联合分布,样本少时大量"恰好出现"的巧合被当成关联。经验法则是每对候选取值至少要有几十个样本,或使用带偏差校正的估计器(惩罚项与"非零单元格数"成比例)。高维稀疏场景里未校正的互信息排序几乎必然失真——这是把它用进真实数据前必须知道的坑。
二零一五年前后,塔什比等人提出用信息瓶颈理论审视深度网络:网络的每一层都被看作输入的压缩表示,好的表示应当尽量少地保留输入信息、尽量多地保留与标签相关的信息。形式化目标是一个权衡——最小化"层与输入的互信息"(压缩项)同时最大化"层与标签的互信息"(相关项),拉格朗日乘子在两者之间调温。这与第 3 章的速率失真、以及"充分统计"(第 7 章)一脉相承:速率失真压"输入",信息瓶颈压"输入中对标签有用的部分"——后者的失真度量由任务(标签)定义,是"任务的失真函数化"(第 3 章结尾预言的迁徙在此完成)。
这张图上可以读出三条重要推论。其一,数据处理不等式的约束:输入经中间层到标签构成马尔可夫链,标签与中间层的互信息不会超过标签与输入的互信息——网络不可能凭空创造标签信息,只能筛选(第 2 章的不等式在此站岗)。其二,泛化的压缩猜想:表示越小(对输入压缩越狠)泛化越好——"压缩即泛化"的口号由此而来,它与奥卡姆剃刀的传统直觉同源,但给出了可计算的量(互信息)。其三,两段式分工:训练前期中间层快速增加与标签的互信息(拟合阶段),后期缓慢丢弃与标签无关的输入信息(压缩阶段)——塔什比团队声称在小型网络上观测到了这个"相变",成为近年深度学习理论最有名的争论之一(后续研究对实验解读与拟合动力学提出异议,结论仍在打磨)。
争议本身就是价值。信息瓶颈的意义不在于已经解释了深度学习,而在于它给出了一个可计算、可测量、可证伪的理论语言——在此之前,"网络学到了什么"很难被写成数学。沿着这条线,表征学习的评估(中间层互信息的变化轨迹)、自监督学习(对比学习的InfoMax 目标:最大化两个视图的互信息)、公平性(表征中敏感属性互信息的上界约束)都有了统一的记账方式。
压缩与学习的账合上之后,最后一站是保密:香农如何用熵定义"完美保密",为什么现代密码选择了另一条路。