信息熵是什么
从 Bit 到 AGI · 第三章:信息(Information) · 信息熵是什么
上一篇定义了单条消息的自信息 。现实中我们更常问:「平均来说,一次观测能带来多少信息?」 比如抛 1000 次硬币,总惊喜是多少、平均每次多少?答案就是信息熵——压缩、通信、GPT 训练损失的理论基石。
直觉:平均惊喜有多大
你订阅了一个每日天气推送:
- 90% 的日子写「晴」
- 10% 的日子写「暴雨」
大多数日子推送内容乏味(概率高 → 自信息低),偶尔一条暴雨预警让你立刻查航班(概率低 → 自信息高)。熵就是把这两种情况的自信息按出现频率加权平均,得到一个「典型日子」的惊喜水平。
熵高 = 结果难猜、平均惊喜大;熵低 = 结果单调、几乎每次一样。
定义:香农熵
离散随机变量 取值 的概率为 ,熵定义为:
即自信息的期望值,单位仍是 bit。
等价写法(自然对数,单位 nat):
换算:。机器学习论文常用 nat,通信领域常用 bit;差一个常数因子,本质相同。
不要和热力学熵混淆。符号都是 ,但信息熵衡量不确定性,热力学熵衡量微观状态数;二者数学形式相似(玻尔兹曼与香农互相致敬),物理含义不同。
例子一:硬币熵的数值
| 硬币类型 | (bit) | 计算 | |
|---|---|---|---|
| 公平 | 0.5 | 1.000 | |
| 轻微偏(0.6/0.4) | 0.6 | 0.971 | 略低于公平 |
| 严重偏(0.99/0.01) | 0.99 | 0.081 | 几乎没惊喜 |
| 两面都是正面 | 1.0 | 0 | 完全确定 |
公平硬币熵 = 1 bit,这是二元分布能达到的最大值。任何偏离公平都会降低熵。
例子二:英文字母熵
若 26 个字母等概率出现:
真实英文里 e 远多于 z,字母频率不均匀,单字母熵约 4.0 bit。考虑前后字母关联(bigram)后,每字母有效熵降到约 1.0–1.5 bit——说明字母序列有大量可预测结构,后面压缩和 GPT 都利用这一点。
量化:熵的边界与意义
最大值: 个等可能结果,。
最小值:结果唯一确定时 。
条件熵 :已知 后 还剩多少不确定性。后面互信息、GPT 上下文预测都依赖它。
对 GPT 而言,词表大小 约 50,000–100,000。若每个 Token 完全随机等概率:
真实语言远非随机:给定上文「今天天气」,下一个 Token 可能是「很」「不」「真」等,概率集中在少数候选上。实测大模型在英文上的每 Token 熵约 2–4 bit(随模型和领域变化)——比随机猜测低了一个数量级,说明语言高度可预测。
动手试一试
import math
from collections import Counter
def entropy(probs: list[float]) -> float:
"""给定概率列表(不必归一化),返回熵(bit)。"""
total = sum(probs)
h = 0.0
for p in probs:
p = p / total
if p > 0:
h -= p * math.log2(p)
return h
# 公平硬币
print(f"公平硬币: {entropy([0.5, 0.5]):.3f} bit")
# 偏置硬币
print(f"0.99/0.01 硬币: {entropy([0.99, 0.01]):.3f} bit")
# 从一段英文估计字母熵(仅小写 a-z)
text = """
the quick brown fox jumps over the lazy dog
""" * 50
counts = Counter(c for c in text.lower() if "a" <= c <= "z")
probs = list(counts.values())
print(f"英文字母熵(此样本): {entropy(probs):.2f} bit/字母")
print(f"理论均匀上界: {math.log2(26):.2f} bit/字母")样本越大、越接近真实英文,估计越稳——但仍高于考虑上下文后的 1–1.5 bit/字符(单字母模型看不到搭配规律)。
量化:微分熵与连续变量(预告)
离散熵用于 Token、字符;图像像素、音频采样是连续值,对应微分熵 。高斯噪声 的微分熵 bit——方差越大,不确定性越高。第一章讲过音频量化:16 bit PCM 把连续波形离散化,量化步长决定有效熵与失真之间的权衡。LLM 主要处理离散 Token,但多模态模型(图文)会在离散与连续交界处再次遇到熵——第七章以后还会用到。
最大熵原理:在已知约束(如均值、方差固定)下,熵最大的分布往往是最「保守」的假设。指数族、Softmax 输出都与最大熵有关——GPT 输出层 Softmax 是在 个类上取熵最大的指数形式分布,再靠训练把参数拉向语料 。
联合熵与链式法则(后文互信息、条件熵会反复用到):
对 Token 序列,。整句熵 = 逐步条件熵之和——语言建模正是在逐步降低每一项。
常见误区
| 误区 | 纠正 |
|---|---|
| 「熵越大越好」 | 对通信而言,高熵意味着难压缩、难预测;对安全随机数而言,高熵才是目标 |
| 「熵 = 文件字节数」 | 字节数是表示长度;熵是概率分布的属性,与编码方式无关 |
| 「GPT 输出熵越低越好」 | 太低 → 重复无聊;太高 → 胡言乱语;好文本在合理的不确定性范围内 |
小结
- 熵 是平均自信息,衡量随机变量的典型不确定性。
- 公平硬币 bit;确定事件 ; 等可能结果 。
- 英文字母序列考虑上下文后约 1–1.5 bit/字符;GPT 每 Token 约 2–4 bit——语言远非随机。
- 熵是压缩、交叉熵损失和预测的统一语言。
下一篇回答:既然熵告诉我们「最少需要多少 bit」,压缩文件时到底去掉了什么?