信息论入门
"不确定性"能不能量出来?熵就是答案:一个分布平均有多"意外"。从它出发,交叉熵和 KL 散度衡量"我的模型离真实分布有多远",这正是分类网络的损失函数;互信息衡量"这个传感器平均能帮我消除多少不确定性",这正是主动感知(选下一个观察位置)的依据。四个量,一套直觉。
1为什么机器人需要它
信息论的几个量在机器人与机器学习里无处不在,却常常被当作"公式"背下来:
- 交叉熵损失:分类网络(识别物体、判断地形、行为克隆里的离散动作)几乎都用它训练。为什么是它?
- KL 散度:PPO、TRPO 限制"新策略不要离旧策略太远";VAE 的损失里有一项让隐变量分布靠近先验;SLAM 与滤波里比较两个高斯信念差多少。
- 熵:一个信念有多不确定?粒子滤波的 \(N_{\mathrm{eff}}\)、卡尔曼滤波协方差椭圆的"体积",其实都在量熵;强化学习里"最大熵"让策略保持探索。
- 互信息与信息增益:机器人下一步该看哪里、走到哪里再测,才能最快消除对地图或自身位置的不确定性?答案是选期望信息增益最大的动作(4.7 节末尾已经用过了)。传感器放哪里、要不要加一个传感器,也是同一个问题。
这些量看似各管一摊,背后其实只有一个想法:用概率来度量"意外"。
2直觉:意外程度,与"平均要问几个问题"
一个事件越不可能,发生时你越意外。把这个直觉写成数:事件概率为 \(p\) 时,意外程度(自信息)是 \(-\log_2 p\) 比特。必然发生(\(p=1\))的事 0 比特;抛一枚硬币得到正面(\(p=\tfrac12\))是 1 比特;\(p=\tfrac18\) 是 3 比特。取对数是为了让独立事件的意外相加:两个独立事件同时发生,概率相乘,意外相加。
熵就是意外程度的平均值:\(H(p)=-\sum_i p_i\log_2 p_i\)。它还有一个很实在的含义:用"是 / 否"问题去猜一个按 \(p\) 分布的结果,最聪明的问法平均要问大约 \(H(p)\) 个问题。均匀分布最难猜(熵最大),确定的事不用问(熵为 0)。拖动下面的柱子,感受一下。
- 让熵达到最大(超过 2.55 比特)。这个分布长什么样?
- 让熵低于 0.5 比特,同时保证最小的那个结果概率不为 0。"几乎确定"长什么样?
- 制造一个概率低于 0.03 的结果,读它的意外:超过 5 比特。再看它对熵的贡献有多小。
熵衡量分布的"平坦程度",而不是数值的大小:把结果的标签换一换,熵不变。均匀 = 最不确定,尖峰 = 最确定。机器人里,"信念的熵"就是它对自己状态的无知程度,这是 4.7 节 FIG 1 右侧读数里的那个"熵 H"。
3动手玩:我的模型离真相有多远?
现在有两个分布:真实的 \(p\)(比如"这张图片里到底是哪一类"),和你的模型给出的 \(q\)(网络输出的 softmax)。如果按 \(q\) 去设计"问题清单"(编码),而世界实际按 \(p\) 发生,你平均要付出的比特数是交叉熵 \(H(p,q)=-\sum_i p_i\log_2 q_i\)。它总是不小于 \(H(p)\);多出来的那部分,叫 KL 散度("用错了模型而白白多付的比特数"):
拖动 \(q\) 的柱顶,让它靠近 \(p\),看那条"交叉熵"是怎样退到只剩 \(H(p)\) 的。
- 最小化损失:让 \(q\) 贴近 \(p\),KL 低于 0.02 比特。此时交叉熵等于多少?(等于 \(H(p)\)。)
- 分类损失:选"独热标签",此时 \(H(p)=0\),交叉熵就是 \(-\log_2 q_{\text{正确类}}\)。让 \(q\) 对正确类的概率低于 0.05:损失超过 4.3 比特。
- 不对称:找一个 \(q\),使 \(D_{\mathrm{KL}}(p\|q)\) 与 \(D_{\mathrm{KL}}(q\|p)\) 相差超过 0.5 比特。KL 不是距离。
训练集是 \(n\) 个样本,把它们的经验分布记作 \(\hat p\)。对数似然 \(\frac1n\sum_i \log q(x_i)\) 恰好等于 \(-H(\hat p,q)\)。所以最大化似然 = 最小化交叉熵 = 最小化 \(D_{\mathrm{KL}}(\hat p\|q)\)(因为 \(H(\hat p)\) 不依赖模型)。4.6 节的最大似然与这里的 KL 是同一件事的两种说法;平方误差对应的是高斯似然,交叉熵对应的是分类(类别分布)的似然。
4第二个视角:KL 的两个方向,"覆盖"还是"抓峰"
\(D_{\mathrm{KL}}(p\|q)\) 与 \(D_{\mathrm{KL}}(q\|p)\) 不相等,在连续分布里差别很有教育意义。用一个高斯 \(q\) 去拟合一个双峰的 \(p\):
- 前向 KL \(D_{\mathrm{KL}}(p\|q)\):只要 \(p\) 有质量的地方 \(q\) 几乎为 0,就被重罚。所以 \(q\) 会把所有的峰都罩住,摊得很宽("覆盖质量")。最小化它就是高斯的矩匹配,也是最大似然。
- 反向 KL \(D_{\mathrm{KL}}(q\|p)\):\(q\) 有质量的地方 \(p\) 几乎为 0,才被重罚。于是 \(q\) 老老实实地蹲在某一个峰上("抓峰"),宁可丢掉另一个峰。变分推断常用这个方向。
下面两个按钮真的在 \((\mu,\sigma)\) 上暴力搜索最优高斯。下方曲线是两个 KL 的被积函数,面积就是 KL 的值。
- 按"最优前向 KL":高斯摊宽、盖住两个峰,中间那块没有 \(p\) 的地方也有 \(q\)。
- 按"最优反向 KL":高斯收紧、只贴住一个峰。比较两个 KL 值,哪个方向对"丢掉一个峰"更宽容?
- 手动把高斯拖到前向 KL 在最优值的 1.05 倍以内。
5第三个视角:互信息,传感器值多少钱?
一个门可能开着,也可能关着(先验 \(\pi=P(\text{开})\))。机器人有个传感器,读数 \(Z\) 说"开"或"关",但不一定准:门开时说"开"的概率是真阳性率 \(\mathrm{TPR}\),门关时误说"开"的概率是假阳性率 \(\mathrm{FPR}\)。
读数前你对门的不确定性是 \(H(X)\);读到读数后平均剩下 \(H(X\mid Z)\)。互信息就是减少的那一部分:\(I(X;Z)=H(X)-H(X\mid Z)\)。它回答"这个传感器平均能提供多少比特的信息?"。
- "自信却没用"的传感器:让 TPR 和 FPR 都在 0.7 以上且相等,互信息为 0:传感器总是很有"态度",但和门毫无关系。
- "撒谎"的传感器:让 TPR ≤ 0.1、FPR ≥ 0.9,互信息仍超过 0.5 比特:一个稳定地说反话的传感器和说真话的传感器一样有用。
- 先验也重要:把先验 \(\pi\) 调到 0.95 以上,传感器最多只能提供不到 0.3 比特,因为你本来就几乎知道答案。
6再看数学
提示:悬停下面公式中带底色的符号,FIG 2 和 FIG 4 里对应的部分会高亮。
熵与联合、条件熵
对数以 2 为底,单位是比特;以 \(e\) 为底,单位是奈特 (nat),\(1\) nat \(=1.443\) 比特。机器学习里常用 nat。条件会使熵减小,平均而言知道更多总不会更糊涂:\(H(X\mid Z)\le H(X)\)。
交叉熵与 KL 散度
KL 非负(吉布斯不等式):由 \(\log\) 的凹性与 Jensen 不等式,\(-D_{\mathrm{KL}}=\sum_x p\log\frac qp\le\log\sum_x p\frac qp=\log\sum_{x:p>0}q\le0\),等号当且仅当 \(p=q\)。所以当 \(q=p\) 时交叉熵最小,等于 \(H(p)\)。KL不对称、也不满足三角不等式,所以不是距离;若 \(p(x)>0\) 而 \(q(x)=0\),则 \(D_{\mathrm{KL}}(p\|q)=\infty\)(呼应 4.7 节"不要把概率写成 0")。
互信息
它是联合分布与"假装独立"的分布之间的 KL,所以对 \(X\) 和 \(Z\) 对称,当且仅当两者独立时为 0。FIG 4 中"撒谎的传感器"之所以信息量最大,是因为互信息只看依赖,不看读数的"含义"。传感器的价值 = 它的读数让我们对 \(X\) 的预测能力提升了多少,而不是读数字面上准不准。再往后,数据处理不等式说:对 \(X\to Z\to W\),\(I(X;W)\le I(X;Z)\):随便怎么加工读数,都不会凭空增加关于 \(X\) 的信息。
高斯情形:熵与 KL 的闭式
高斯的熵只依赖 \(\ln\det\Sigma\):协方差椭圆"体积"的对数。所以卡尔曼滤波每次更新,信息增益就是 \(\tfrac12\ln\frac{\det P^-}{\det P}\)(4.8 节:协方差椭圆变小了多少)。连续分布的这个"微分熵"可以为负,它不再是"比特数",但差值(如 KL、互信息)仍有明确含义。
7机器人中的它:下一个最佳视角
一台机器人在未知的房间里建占据栅格地图:每个格子占据的概率是 \(m_c\),一开始是 0.5(完全不知道,熵 1 比特)。它去哪个位置扫描,才能最快地弄清这张地图?
在视点 \(v\) 处,传感器能读到半径 \(R\) 内的每个格子(读数带噪声:真阳性率 0.9,假阳性率 0.1)。每个格子的期望信息增益就是它和读数之间的互信息 \(I(m_c;z_c)\);整个视点的增益是这些格子之和(假设读数独立):
已经确认的格子(概率接近 0 或 1)熵很低,再看一遍也没什么增益;最不确定的区域信息增益最大。贪心地反复"走到增益最大的视点,扫描,更新地图",就是经典的信息增益驱动的探索。点击地图选一个视点试试;用"去最优视点"一路跟着贪心走。
- 先点一个增益很小的视点(圆点最小的地方)去扫描,再点增益最大的:比较两次地图总熵降了多少。
- 只用"去最优视点":在 7 次扫描内把地图总熵降到初始的 40% 以下。
这是"下一个最佳视角 (next-best-view)"与"信息增益驱动的探索"的骨架:三维重建与 NeRF 采集里的视点选择;无人机在未知环境中的前沿探索;主动 SLAM 里权衡"去探索新区域"与"回头做回环、压低位姿不确定性";机械臂用触觉探测物体形状时选下一个触点。真实系统要考虑遮挡(射线被障碍挡住)、移动代价(增益除以路程)、读数相关性,并用分块的熵(如互信息的子模性)加速,不过核心就是 FIG 5 里这一条:选期望熵下降最多的动作。
8常见误区
KL 不对称,也不满足三角不等式。\(D_{\mathrm{KL}}(p\|q)\) 与 \(D_{\mathrm{KL}}(q\|p)\) 回答的是不同的问题,拟合出来的结果大相径庭(FIG 3)。需要真正的距离或对称量时,可以用 Jensen–Shannon 散度、总变差或 Wasserstein 距离。
熵只看概率的分布,不看结果的取值。约定 \(0\log0=0\)(极限)。另外要注意单位:模型里的对数几乎总是自然对数 nat,而这一节为了直觉用比特,二者差一个 \(\ln 2\),比较别人的数字时要先看底数。
交叉熵里的 \(\log q\) 在 \(q=0\) 时是 \(-\infty\)。实现时要对概率做下限(\(\log(q+\varepsilon)\)),或者直接在 logits 上用数值稳定的 log_softmax 版交叉熵,不要先 softmax 再 log。
FIG 5 的贪心规则没考虑代价:最远处的视点增益可能最大,但走过去要很久。实用的规则是"增益 ÷ 代价"或带折扣的多步规划。此外,增益是在当前模型下算的期望:如果传感器模型或先验是错的,信息增益也会误导你。
FIG 4 的"撒谎传感器"信息量最大,因为互信息衡量的是统计依赖。你需要知道传感器的混淆矩阵(它怎样出错),才能把读数解码成信念。如果你把一个稳定说反话的传感器当成说真话的来用,后验会被推向错误的方向,即使互信息很高。
9小练习
10延伸阅读
- T. M. Cover & J. A. Thomas, Elements of Information Theory, 2nd ed., Wiley, 2006, Ch. 2 — 熵、KL、互信息的标准教科书
- D. J. C. MacKay, Information Theory, Inference, and Learning Algorithms, Cambridge University Press, 2003, Ch. 1–2, 4 — 直觉丰富,把信息论与推断、学习放在一起讲,附免费电子版
- C. M. Bishop, Pattern Recognition and Machine Learning, Springer, 2006, §1.6 — 信息论在机器学习中的角色:熵、KL 与互信息
- S. Thrun, W. Burgard & D. Fox, Probabilistic Robotics, MIT Press, 2005, Ch. 17 — 机器人探索:信息增益驱动的贪心探索
- 3Blue1Brown, "Solving Wordle using information theory" (YouTube) — 用猜词游戏讲熵和信息增益,几乎没有公式也能讲明白