本页目录
熵与信息度量
熵不是"混乱度"这种玄学,而是一个能数出来的比特数——把一件不确定的事问清楚,平均要问几个是非问题。自信息、熵、联合熵、条件熵、互信息是同一套语言的五个词,后面所有内容(压缩、信道、损失函数)都从这几个量长出来。
引子:猜数字要问几次
先玩个游戏,把直觉建起来,再谈定义。
对方心里想了一个 1 到 8 之间的整数。你只能问是非题,比如"是不是大于 4"。最少平均要问几次,才能保证猜中?
最优策略是每次都把剩下的可能对半砍。先问"是不是大于 4",不管答案是什么,候选都从 8 个变成 4 个;再砍成 2 个,再砍成 1 个。三刀下去,唯一答案就出来了。\log_2 8 = 3,正好三次。
这不是巧合。一个答案概率各半的二选一问题,恰好携带 1 bit 信息;而熵给出"平均最少要问几次"的理论下界。只有概率恰好适合二叉树时才能精确命中;一般单次游戏的最优平均提问次数落在 H(X) 到 H(X)+1 之间,把很多局打包后才会渐近逼近 H(X)。
再改一下游戏。假设对方 80% 的概率会选 7(觉得这个数"有灵性")。这时候还老老实实对半砍就傻了——聪明的做法是第一问就直接问"是不是 7"。大多数情况一次命中,平均问题数远少于 3 次。
结论很朴素:分布越不均匀、越有结构,平均要问的问题就越少。整篇文章要做的,就是把这句直觉变成公式。信息量、熵、后面几章的压缩,追到底都是在回答同一个问题——平均要花几个 bit,才能把一件不确定的事问清楚。
自信息:一个事件有多"意外"
先看单个事件。自信息(self-information) 把猜数字的直觉推广到任意概率。事件 x 发生的概率是 p(x),它的自信息定义为:
I(x) = -\log_2 p(x)
单位是 bit。它衡量的就是"确认这件事发生,相当于问了几个是非题"。
回到游戏验证一下:8 个数均匀分布,每个数的概率是 1/8,自信息是 -\log_2(1/8) = 3\ \text{bit},和手动数出的三次提问严丝合缝。
几个例子帮你建立手感:
- 抛硬币出正面,p=0.5,自信息 -\log_2 0.5 = 1\ \text{bit}。
- 掷骰子出某个特定点数,p=1/6,自信息 -\log_2(1/6) \approx 2.58\ \text{bit}。
- "太阳明天升起"这种必然事件,p \approx 1,自信息 \approx 0\ \text{bit}。你早就知道了,它没带来任何信息,一个问题都不用问。
为什么非得用对数? 因为信息量应该"可加":两个独立事件同时发生,总信息量应该是各自之和。而独立事件的联合概率是相乘的,p(x)p(y)。对数正好把乘法翻译成加法:
-\log(p(x)p(y)) = -\log p(x) - \log p(y)
这个"可加性"不是审美偏好,而是整套熵体系的地基。
熵:自信息的期望
单个事件说清楚了,现在看整个随机变量。熵(entropy) H(X) 就是 X 所有取值的自信息的期望——也就是猜数字游戏里"平均要问几次"的理论基准:
H(X) = -\sum_x p(x) \log_2 p(x)
它同时还是另一件事的答案:用最优编码表示 X,平均码长能逼近多少 bit。单符号前缀码通常满足 H(X)\leq L<H(X)+1,对长序列分块编码则能把每符号码长任意逼近 H(X),这由 源编码定理 保证。眼下只需记住:熵越大,不确定性越高,平均要问的问题(要花的 bit)就越多。
二元熵函数
最简单的情形是只有两个取值,概率分别为 p 和 1-p:
H(p) = -p\log_2 p - (1-p)\log_2(1-p)
这条曲线是理解熵最好的入口:
用猜数字的话来读这条曲线:p=0.5 时熵最大(1 bit)。最公平的硬币最难预测,不管怎么问,平均都得问满一次。往任一端偏,熵都往下掉;到 p=0 或 p=1,结果已经确定,熵为 0——一个问题都不用问。
熵的三条性质
这三条性质后面会反复用到,都能用猜数字的直觉验证:
- 非负性:H(X) \geq 0。因为 0 \leq p(x) \leq 1,每一项 -p\log p 都非负。等号只在 X 完全确定时成立(某个 p(x)=1)——确定的事没有不确定性可言。
- 上界与最大熵:H(X) \leq \log_2|X|,其中 |X| 是取值个数。等号当且仅当 X 均匀分布。所有取值等概率时不确定性最大,对应猜数字里"没有任何偏向可利用,只能老老实实对半砍"。这也解释了为什么均匀分布是"最无知"的先验:没有额外约束时,它是熵最大的那个分布(最大熵原理)。
- 链式法则:H(X,Y) = H(X) + H(Y \mid X)。这句话读作:同时问清 X 和 Y 的总不确定性,等于先问清 X,再加上"已知 X 之后 Y 还剩多少不确定性"。它是把复杂联合分布拆成条件项的核心工具,也正是 LLM 自回归分解的样子:H(\text{token 序列}) = \sum_i H(\text{token}_i \mid \text{前文})。每生成一个 token,都是在问"接下来这个位置还剩多少不确定性"。
连续变量的熵不能照搬离散直觉
上面的 H(X) 针对离散取值。连续变量使用微分熵(differential entropy):
h(X)=-\int p(x)\log p(x)\,dx
它长得很像离散熵,行为却不同:微分熵可以为负,会随单位和坐标缩放改变,也不能直接解释成"编码一个精确实数需要多少 bit"——精确表示连续值通常需要无限 bit。因此比较连续分布时,常优先使用坐标变换下更稳定的 KL 散度和互信息。另一个常用结论是:在方差固定时,高斯分布的微分熵最大,这正是 AWGN 信道容量 公式背后的关键性质。
直觉:结构如何压低熵
这里要澄清一个常见误解:熵度量的是分布的形状,不是取值的数量。
取值数量只决定"最多要问几次"(上界)。真正决定"平均实际要问几次"的,是分布的形状——它均不均匀?取值之间有没有依赖?三个例子把这个区别钉死:
- 公平硬币:2 个取值,均匀,H = 1 bit。达到上界,没有任何捷径可占。
- 公平骰子:6 个取值,均匀,H = \log_2 6 \approx 2.58 bit。
- 自然语言字符:26 个字母,若均匀应是 \log_2 26 \approx 4.7 bit/字符。但英文字母分布极不均(e 极高频,z 极低频),字母之间还有强依赖(q 后面几乎必是 u)。在特定字母表和语料口径下,Shannon 对英文熵率的经典估计约为 1.0–1.3 bit/字符,远低于 4.7;这个数会随是否计入空格、标点、语料类型和估计方法变化。
最后这个例子值得多想一秒。按均匀假设猜一个随机英文字母,平均要问将近 5 次。但如果你先问"是不是元音""前一个字母是不是 q"这类高信息量的问题,大部分位置几乎不用猜就定了。这个"结构压低熵"的差额——4.7 和 1.2 之间的落差——正是压缩算法和语言模型赖以为生的东西。它们做的事,本质就是把这些冗余榨干。
| 量 | 定义 | 直觉 |
|---|---|---|
| H(X) | -\sum p\log p | X 自身的平均不确定性(平均要问几次) |
| H(X,Y) | -\sum p(x,y)\log p(x,y) | 同时问清 X 和 Y 要问几次 |
| H(Y \mid X) | -\sum p(x,y)\log p(y \mid x) | 已知 X 后,问清 Y 还要问几次 |
| I(X;Y) | H(Y)-H(Y \mid X) | 知道 X 让问清 Y 少问几次 |
联合熵、条件熵、互信息:两个变量之间
前面只谈了一个随机变量。有两个变量时,"平均要问几次"这套语言会自然长出一整个家族。三个成员,一个一个来:
- 联合熵(joint entropy) H(X,Y) = -\sum p(x,y)\log_2 p(x,y):同时问清 X 和 Y,平均要问几次。
- 条件熵(conditional entropy) H(Y \mid X) = -\sum p(x,y)\log_2 p(y \mid x):已经知道了 X,再问清 Y 平均还要问几次。两个极端很说明问题——若 Y 完全由 X 决定,H(Y \mid X)=0(一个问题都不用多问);若两者独立,H(Y \mid X)=H(Y)(知道 X 毫无帮助,一个问题都省不了)。
- 互信息(mutual information) I(X;Y) = H(X) - H(X \mid Y) = H(Y) - H(Y \mid X):知道一个变量,能让另一个变量少问几个问题。
互信息有几条漂亮的性质:它是对称的(I(X;Y)=I(Y;X)),非负的,并且 I(X;Y)=0 当且仅当 X 与 Y 独立。它还有一个等价写法——I(X;Y)=D_{KL}(p(x,y) \parallel p(x)p(y)),即真实联合分布与"假装两者独立"的分布之间的 KL 散度。换句话说,互信息衡量的正是"两个变量偏离独立有多远"。
条件互信息与数据处理不等式
有时我们关心的不是"X 和 Y 总共共享多少信息",而是已经知道 Z 后,它们还额外共享多少。这就是条件互信息:
I(X;Y\mid Z)=H(X\mid Z)-H(X\mid Y,Z)
它能把"共同来自上下文 Z 的相关性"和"X、Y 之间剩余的联系"分开。需要注意:互信息描述统计依赖,不自动代表因果关系。两个变量可能只是共同受第三个变量影响。
互信息最值得反复使用的一条性质是数据处理不等式(data processing inequality)。如果 X\to Y\to Z 构成马尔可夫链,也就是 Z 只能通过 Y 接触 X,那么:
I(X;Z)\leq I(X;Y)
直觉是:信息经过加工只能保留或丢失,不能凭空增加。压缩、摘要、量化、神经网络中间表示都遵守这条约束。后面的 信道容量 和 信息瓶颈,本质上都在研究"怎样只丢掉不需要的信息"。
维恩图:信息度量的集合关系
这四个量之间的代数关系,可以借两个重叠的圆直观记忆。这是信息论最经典的一张图:
所有恒等式都能从图上直接读出来。并集是 H(X,Y),左圆是 H(X),重叠部分是 I(X;Y),左边的月牙是 H(X \mid Y)。于是 H(X) = H(X \mid Y) + I(X;Y)、H(X,Y) = H(X) + H(Y \mid X) 这些式子一眼就能看明白。
一个提醒:这个类比只在两个变量时严格成立。三个变量以上,"交互信息"可能取负值,维恩图会失效。但两圆图对建立直觉已经足够了。
这套度量是后续所有内容的地基:压缩把码长逼近 H(X)(源编码),信道容量是 \max I(X;Y)(信道容量),而深度学习的损失函数是 交叉熵与 KL 散度 的直接应用。
一张表串起整组文章
| 想回答的问题 | 主要工具 | 继续看 |
|---|---|---|
| 一个事件发生有多意外? | 自信息 -\log p(x) | 本篇 |
| 一个变量平均有多不确定? | 熵 H(X) | 本篇 |
| 知道 X 能让预测 Y 容易多少? | 互信息 I(X;Y) | 本篇 |
| 用模型分布 q 拟合真实分布 p 要付多少代价? | 交叉熵、KL 散度 | 第 2 篇 |
| 无损数据最多能压到多小? | 熵率、源编码 | 第 3 篇 |
| 带噪信道最多能可靠传多少? | 互信息、信道容量 | 第 4 篇 |
| 允许失真后最少要多少 bit? | 率失真函数 R(D) | 第 5 篇 |
| 这些量在 LLM 里分别对应什么? | NLL、PPL、KL、输出熵 | 第 6 篇 |
参考
- 教材: "Elements of Information Theory" (Cover & Thomas — 信息论标准教材,第 2 章 Entropy, Relative Entropy, and Mutual Information)
- 论文: "A Mathematical Theory of Communication" (Shannon, 1948 — 熵与信息论的奠基之作,一切从这里开始)
- 教材: "Information Theory, Inference, and Learning Algorithms" (MacKay — 免费在线,第 2、4 章直觉极佳)
关键词: 自信息 self-information, 熵 entropy, 微分熵 differential entropy, 联合熵 joint entropy, 条件熵 conditional entropy, 互信息 mutual information, 条件互信息 conditional mutual information, 数据处理不等式 data processing inequality, 马尔可夫链, 链式法则 chain rule, 最大熵 maximum entropy, 二元熵函数 binary entropy, bit