最近重新整理信息论,发现它概念不多但关系很紧——一个地方没想透,后面就越背越乱。所以这篇笔记不写成公式大全,而是按我自己复习的顺序来:
- 数学基础:熵、条件熵、互信息、交叉熵
- 工程实践:压缩、通信、ML、风控、LLM
- 语言现象:诗词、文言文和日常所说的”信息量”
原始讨论来自这个 ChatGPT 对话。把这些概念串成体系的人是 Claude E. Shannon(1916-2001),他的贡献在第一部分末尾展开。
先给一个整体轮廓:
flowchart TB
A["信息论"] --> B["香农信息量"]
A --> C["熵 H(X)"]
A --> D["条件熵 H(Y|X)"]
A --> E["联合熵 H(X,Y)"]
A --> F["互信息 I(X;Y)"]
A --> G["交叉熵 H(p, q)"]
C --> H["平均不确定性"]
D --> I["已知 X 后剩余的不确定性"]
E --> J["多个变量一起的不确定性"]
F --> K["X 对 Y 的信息增益"]
G --> L["用预测分布逼近真实分布的代价"]一、信息论的数学基础
1.1 信息论到底在研究什么
我对信息论最稳的理解方式是:
信息论研究的不是“内容本身”,而是“内容所对应的不确定性”。
也就是说,信息论关心的不是”说了多少字”,而是不确定性本身。它和概率论天然绑在一起——没有概率分布,就没有”平均不确定性”这回事。
如果把随机变量 X 看成一组可能结果,信息论最核心的问题是:
X有多难预测(→ 熵)X和Y之间有没有关系(→ 联合熵、互信息)- 看了
X之后,Y会不会更容易预测(→ 条件熵)
加上交叉熵和 KL 散度,就是整个第一部分要讲的内容。
举一个日常的例子。假设我们把”明天是否下雨”定义成随机变量 Y:
- 一条天气预报说”明天下雨概率 90%”,会明显改变我们对
Y的判断——这条消息携带了很多信息 - 如果只是重复我们已经知道的结论,那它几乎不改变判断——信息量很小
- 极端情况:如果变量本身几乎确定(比如”太阳明天是否升起”),那任何陈述都很难再减少不确定性
这里有一个关键前提:
信息论里的不确定性,一定是相对于某个随机变量和某个预测目标而言的。
不是先看语义有没有”像信息”,而是先定义我们到底想预测什么。信息论最关心的,是一条消息让目标变量的不确定性减少了多少。这个”减少量”后面会用互信息来精确描述。
1.2 香农信息量与信息熵
这一节最好分成两步看:
- 先看单个事件携带多少信息
- 再看一个随机变量整体平均有多少信息
从”猜数字”开始
假设朋友心里想了一个 1 到 8 之间的整数,你来猜,每次只能问一个是/否问题。
最聪明的策略是二分法:
- 第 1 问:”大于 4 吗?” → 排除一半
- 第 2 问:”大于 6 吗?”或”大于 2 吗?” → 再排除一半
- 第 3 问:锁定答案
8 个等可能结果,3 次二分就能确定。换句话说,每个结果携带 3 bit 信息。
如果只有 2 个等可能结果(比如抛硬币),1 次就够,信息量是 1 bit。
如果有 4 个等可能结果,需要 2 次,信息量是 2 bit。
看到规律了吗?$N$ 个等可能结果,每个结果的信息量是 $\log_2 N$ bit。
但这只解决了”等可能”的情况。如果结果的概率不相等呢?
为什么信息量必须是对数
假设你连续抛两枚独立的硬币。直觉上:
- 第一枚的结果给你 1 bit 信息
- 第二枚的结果再给你 1 bit 信息
- 合起来应该是 1 + 1 = 2 bit
但两枚硬币的联合概率是相乘的:某个特定组合(比如”正正”)的概率是 $\frac{1}{2} \times \frac{1}{2} = \frac{1}{4}$。
这就出现了一个关键要求:
概率相乘时,信息量必须相加。
也就是说,我们需要一个函数 $f$,满足:
$$ f(p \cdot q) = f(p) + f(q) $$
在数学上,满足”把乘法变成加法”这个性质的函数,本质上只有对数。
再加上两个自然的约束:
- 概率越小,信息量越大($f$ 关于 $p$ 单调递减)
- 确定事件($p=1$)的信息量为 0
香农的公式就唯一确定了:
$$ I(x) = -\log_2 p(x) $$
这里 I(x) 是事件 x 的信息量,p(x) 是它发生的概率。负号是因为 $\log$ 对小于 1 的数取值为负,加个负号让信息量保持正数。
所以这个公式不是”规定”出来的,而是从可加性这个基本要求推导出来的。
验证直觉
回头看几个例子:
| 事件概率 | 信息量 | 直觉 |
|---|---|---|
| $p = 1$ | $I = 0$ bit | 确定会发生的事,不带来任何新信息 |
| $p = 1/2$ | $I = 1$ bit | 一次抛硬币的结果 |
| $p = 1/8$ | $I = 3$ bit | 相当于连续猜对 3 次二分问题 |
| $p = 1/64$ | $I = 6$ bit | 相当于连续抛 6 枚硬币的某个特定组合 |
概率每减半一次,信息量就多 1 bit——这正是对数的性质。
默认用底 2,是因为信息论的基本单位是 bit,对应一次二元选择。如果改用自然对数 ln,单位就变成 nat;用 log₁₀,单位变成 hartley。底不同只是单位不同,公式结构不变。
随机变量的平均信息量,也就是熵
单个事件的信息量只是局部的;真正更常用的是随机变量的平均信息量,也就是熵:
$$ H(X) = -\sum_x p(x)\log_2 p(x) $$
它可以理解成:
- 一个随机变量的平均不确定性
- 最优编码下,平均每个结果至少需要多少 bit
这个式子就是”信息量的期望值”。每个结果 x 的信息量是 $I(x) = -\log_2 p(x)$,熵就是按概率加权平均:
$$ H(X) = \sum_x p(x) \cdot I(x) = -\sum_x p(x)\log_2 p(x) $$
一句话:熵 = 单个结果的信息量在整个分布上的平均。
用公平硬币验证一下。正面和反面概率都是 $\frac{1}{2}$,代入熵的定义:
$$ H(X) = -\left(\frac{1}{2}\log_2 \frac{1}{2} + \frac{1}{2}\log_2 \frac{1}{2}\right) = -\log_2 \frac{1}{2} = 1 \text{ bit} $$
符合直觉:一次抛硬币,恰好 1 bit 的不确定性。
再看均匀骰子。六个面等可能,同样的思路可以直接化简为 $H(X) = \log_2 6 \approx 2.585$ bit——比硬币难猜,因为可能结果更多。
更一般的规律是:$N$ 个等可能结果的熵恒等于 $\log_2 N$,而且这也是所有 $N$ 个结果的分布中熵最大的情况——越均匀,越难猜。
我自己复习时会记成一句话:
熵不是在说”内容多不多”,而是在说”平均需要多少 bit 才能消除不确定性”。
业务上也可以这样想——假设”是否下单”是一个二元随机变量:
- 如果某用户下单概率是 99%,结果几乎没有悬念,熵接近 0
- 如果下单概率是 70%,还有一定不确定性,熵比上一种情况高
- 如果下单概率刚好 50%,你完全猜不出来,熵达到最大值 1 bit
- 反过来,如果下单概率是 0%,结果同样没有悬念,熵也接近 0
所以二元变量的熵是"两头低、中间高"——越接近 50/50,不确定性越大;越接近确定(不管是确定会还是确定不会),熵越低。
1.3 条件熵、联合熵与互信息
这三者最容易混在一起,但其实它们关注的是三个不同的问题。
条件熵
条件熵 H(Y|X) 表示:
已知
X之后,Y还剩多少不确定性。
如果 X 对 Y 很有帮助,那么条件熵就会下降。
一个直观例子是天气预测:
Y是“明天是否下雨”X是“今天的湿度、气压、云层情况”
如果只看 Y,你不知道明天会不会下雨;
但如果把 X 加进来,你可能已经能大致判断了。
这时候 H(Y|X) 就会比 H(Y) 小很多。
条件熵的数学定义是:
$$ H(Y|X) = -\sum_{x,y} p(x,y)\log_2 p(y|x) $$
也就是对所有 (x, y) 组合,用联合概率加权条件信息量的平均。
再比如风控:
Y是“是否违约”X是“历史逾期、收入、负债率、设备行为”
知道这些特征之后,违约结果还剩多少不确定性,就是条件熵在描述的东西。
联合熵
联合熵 H(X,Y) 表示:
同时预测
X和Y有多难。
比如 X 是今天的天气,Y 是路上是否堵车。单独看各自都有不确定性,合在一起要处理两个变量的所有组合状态,整体不确定性通常更高。
联合熵的数学定义是:
$$ H(X,Y) = -\sum_{x,y} p(x,y)\log_2 p(x,y) $$
互信息
互信息 I(X;Y) 表示:
知道
X以后,关于Y的不确定性减少了多少。
它也可以写成:
$$ I(X;Y) = H(Y) - H(Y|X) $$
这条式子是我觉得最值得反复记的一条,因为它把“剩余不确定性”和“减少的不确定性”直接连起来了。
一个最容易懂的例子是“考试成绩预测”:
Y是考试成绩X是平时作业、上课出勤、模拟考表现
如果这些特征很有用,知道 X 后你对 Y 就会更有把握;
如果这些特征没什么用,知道 X 之后也没太大帮助。
所以互信息可以直接理解成:
一个特征到底有没有“解释力”。
用一张图把关系串起来:
flowchart TD
A[原始不确定性] --> B[剩余不确定性]
A --> C[减少的不确定性]核心等式就是:H(Y) = H(Y|X) + I(X;Y)
条件熵看”还剩多少”,互信息看”减少了多少”——它们不是同一个量,但加起来恰好等于原始的熵。
还有一个容易忽略的性质:互信息是对称的。
$$ I(X;Y) = H(Y) - H(Y|X) = H(X) - H(X|Y) $$
也就是说,X 对 Y 的信息增益,等于 Y 对 X 的信息增益。这和条件熵不同——条件熵一般不对称,H(Y|X) \neq H(X|Y)。
最后,把联合熵、条件熵和单变量的熵串起来的是链式法则:
$$ H(X,Y) = H(X) + H(Y|X) $$
直觉上就是:“两个变量合在一起的总不确定性 = 先看 X 的不确定性 + 知道 X 后 Y 还剩的不确定性”。
结合互信息的定义,还可以得到另一个常用表达:
$$ I(X;Y) = H(X) + H(Y) - H(X,Y) $$
这条式子很适合用韦恩图来理解:互信息就是两个变量的熵的重叠部分。
1.4 交叉熵与 KL 散度
在机器学习里,最常见的不是熵本身,而是交叉熵。
交叉熵的形式是:
$$ H(p, q) = -\sum_x p(x)\log q(x) $$
这里:
p是真实分布q是预测分布
直觉上,它衡量的是:
如果真实世界是
p,但我用q去表示,会付出多大的代价。
比如分类任务:真实标签是”猫”,模型却给”狗”打了高概率,交叉熵就大;把”猫”的概率打高、其他压低,交叉熵就小。所以分类模型用交叉熵做损失函数——目标不只是猜对类别,而是让预测分布逼近真实分布。
KL 散度和交叉熵关系很近:
$$ D_{KL}(p|q) = H(p, q) - H(p) $$
也就是说,在真实分布 p 固定的前提下,最小化交叉熵和最小化 KL 散度本质上是同一个方向。
需要注意的是,KL 散度不是对称的:
$$ D_{KL}(p|q) \neq D_{KL}(q|p) $$
所以它不是严格意义上的"距离"(不满足对称性,也不满足三角不等式)。它衡量的是"用 q 去近似 p 的代价",方向反过来结果通常不同。
我复习时会这样记:
- 熵:世界本来就有多难猜
- 交叉熵:用错误的分布去猜,要付出多少额外代价
- KL 散度:比最优情况多浪费了多少(注意不对称)
1.5 Shannon 的地位
把这些概念串成体系的人,就是 Claude E. Shannon(1916-2001)。
Shannon 早年在密歇根大学学习,后来在 MIT 发表了著名的硕士论文,把布尔代数和继电器电路联系起来——这件事后来几乎成了数字电路设计的理论起点之一。1948 年,他发表了里程碑式论文 A Mathematical Theory of Communication,把熵、信道容量、编码等概念系统化。
如果只用一句话概括他的意义:
Shannon 把”信息”从一个模糊的日常词,变成了可计算的数学对象。
从那以后,通信、压缩、统计建模、机器学习,都可以共享一套关于”不确定性”的语言。他不是第一个讨论”信息”的人,但他是第一个让信息可以被严格定义、计算和推导的人。
1.6 这一部分最该带走的结论
如果只保留几句话,我会保留这些:
- 熵
H(X):平均不确定性 - 条件熵
H(Y|X):知道X后,Y还剩多少不确定性 - 联合熵
H(X,Y):多个变量一起的不确定性 - 互信息
I(X;Y):X对Y的信息增益(对称的) - 交叉熵
H(p, q):用预测分布逼近真实分布的代价 - KL 散度
D_KL(p‖q):预测分布比最优情况多浪费了多少(不对称的)
如果只留一条判断标准:
看完某个变量之后,另一个变量是不是更容易预测了?
能——说明信息被传递了。不能——说明这个变量没提供有效信息。
二、信息论的工程实践
2.1 计算机里的信息论
在计算机里,信息论最直接的落点是数据压缩和编码。
信息论在这里给出的关键结论是 Shannon 第一定理(源编码定理):
无损压缩的平均码长,不可能低于数据源的熵。
也就是说,熵就是压缩的理论极限。数据越有规律(熵越低),就越能压得小;数据越随机(熵越高),越压不动。
具体到工程上:
- 无损压缩(ZIP、PNG):找出统计规律,用更短的符号表示高频模式,逼近熵的下界
- 有损压缩(JPEG、MP3):允许丢掉人眼或人耳不敏感的信息,换取更高压缩率
所以不管是哪种压缩算法,本质上都在问同一个问题:数据里有多少冗余可以去掉?
flowchart LR
A["原始数据"] --> B["识别统计规律"]
B --> C["去冗余"]
C --> D["更短的表示"]
D --> E["传输 / 存储 / 解码"]2.2 通信里的信息论
通信是信息论的原生领域。
通信系统关心的核心问题是:
在噪声存在的情况下,怎样尽可能快、尽可能可靠地把信息送到另一端。
Shannon 给出的答案是信道容量:在给定带宽和信噪比下,理论上能稳定传输的信息量上限。只要传输速率不超过信道容量,就一定存在某种编码方案能让错误率趋近于零——这就是 Shannon 第二定理(信道编码定理)。
所以纠错编码、抗噪编码这些工程技术,本质上都在逼近 Shannon 给出的这条理论上界。
2.3 机器学习里的信息论
机器学习里最常见的落点就是分类模型。
为什么分类任务里经常用交叉熵?
因为模型输出的不是单点判断,而是一个概率分布。交叉熵正好衡量:
- 模型的概率分布和真实分布差得有多远
- 模型在“猜类别”这件事上有多不确定
对于二分类问题,交叉熵损失通常写成:
$$ L = -\bigl[y\log p + (1-y)\log(1-p)\bigr] $$
这个式子看起来很普通,但背后其实就是概率建模——模型不只是要”猜对类别”,而是要让预测的概率分布尽可能接近真实分布。
2.4 金融风控里的信息论
风控是我觉得信息论特别好用的一个场景。
因为风控里的核心问题,本来就是:
- 这个人会不会违约
- 哪些特征真的有用
- 模型输出的概率是否稳定
这里面,条件熵和互信息很有用。
比如:
H(Y|X)可以理解成“看完特征后,对是否违约还剩多少拿不准”I(X;Y)可以理解成“这个特征到底帮了多大忙”
如果某个特征加入后,条件熵明显下降,说明它对标签有解释力;如果互信息很低,说明它提供的有效信息不多。
交叉熵则用于训练阶段——让模型输出的违约概率尽可能接近真实分布。
归根结底:
风控不是判断”对不对”,而是在统计意义上控制不确定性。
2.5 LLM 与自然语言处理里的信息论
LLM 和信息论的关系比很多人想得更直接。
语言模型本质上就是一个概率模型:给定上下文,预测下一个 token 的概率分布。所以训练语言模型的核心目标,就是最小化预测分布和真实文本分布之间的交叉熵——从更底层看,大模型训练不是在"猜答案",而是在做概率分布拟合。
困惑度(Perplexity)的定义是:
$$ \text{PPL} = 2^{H(p,, q)} $$
其中 $H(p, q)$ 是模型预测分布 q 相对于真实分布 p 的交叉熵。
从这个角度看:
- 困惑度越低,模型对下一个 token 的预测越准确
- 交叉熵越低,模型预测越接近真实文本分布
简单记的话,可以把困惑度看成”模型读到这里时,平均觉得下一个 token 有多少个等可能的选项”。PPL = 10 就像在 10 个选项里随机猜。
所以理解 LLM 不必先懂 Transformer 的全部细节——只要懂概率和交叉熵,就能抓住”模型到底在学什么”。
2.6 这一部分最该带走的结论
如果把工程应用压成一句话,我会这样记:
- 计算机:压缩和编码
- 通信:抗噪和可靠传输
- 机器学习:概率预测和损失函数
- 风控:特征筛选和风险建模
- LLM:token 预测和交叉熵优化
flowchart TB
A["信息论"] --> B["计算机"]
A --> C["通信"]
A --> D["机器学习"]
A --> E["金融风控"]
A --> F["LLM / NLP"]
B --> B1["压缩 / 编码"]
C --> C1["信道容量 / 抗噪"]
D --> D1["分类损失 / 概率预测"]
E --> E1["特征价值 / 风险分层"]
F --> F1["token 预测 / 困惑度"]三、信息密度与日常语言
3.1 诗词为什么短,却让人觉得”信息量很大”
看到一首短诗,我们很容易说”信息量大”;但严格讲,这不一定是香农意义上的信息量更大。
比如马致远的”枯藤老树昏鸦,小桥流水人家,古道西风瘦马”——一共 18 个字,字面上只是列了几组意象。但读者脑中会自动补出画面、季节、情绪、旅人的处境,甚至整个”游子思归”的叙事。这 18 个字触发的联想远超字面本身。
更准确的说法是:
诗词往往有更高的语义密度和联想密度,但不一定对应更高的香农信息量。
它不是把所有东西都说满,而是用少量符号激活读者已有的大量背景知识——像一把钥匙,打开的空间远大于钥匙本身。
3.2 文言文为什么看起来像”压缩版汉语”
文言文给人的感觉也很像”压缩”,但我更愿意把它理解成:
一种高上下文密度的表达方式。
它之所以短,不只是因为字少,还因为它默认读者共享大量背景——典故、语法习惯、文化预设。发送方和接收方共享的”码本”越大,同样多的字就能传递越多的意思。
用信息论的语言说:文言文不是把信息压缩到了更少的 bit 里,而是把大量信息藏进了双方共享的上下文里。如果接收者背景够强,解码就很快;背景不够,反而觉得”难懂”。
3.3 “信息量大”到底是什么意思
日常说的”信息量大”,和信息论里的”信息量”其实不是一回事。
- 日常语境里的信息量:说了多少内容、描述了多少细节
- 信息论里的信息量:减少了多少不确定性、预测分布变了多少
一段话很长、内容很多,但如果全在重复同一个已知事实,信息论意义上的有效信息并不高。反过来,一段很短的话如果能极大改变我们的判断,信息量反而很高。
所以更准确的区分是:
信息论衡量的是”减少了多少不确定性”,而文学和语言常常在衡量”激发了多少意义”。
两者有关联,但不在同一个层面。
3.4 这一部分最该带走的结论
这部分我最后想留下三句话:
- 诗词短,不代表香农信息量一定高
- 文言文像压缩,不代表它就是机械无损压缩
- 日常说的“信息量大”,常常混合了语义、情绪和联想
结语
整理完最大的感受:
信息论不是一门只讲公式的课,它更像一门关于”不确定性如何被减少”的通用语言。
它能进入压缩、通信、ML、风控、LLM 这些工程系统,也能帮我们重新理解诗词、文言文和日常语言里的”信息感”。
以后再碰到这些概念,快速回答三个问题就够了:
- 它描述的是”剩余不确定性”还是”信息增益”
- 它用在数学推导、工程优化还是日常表达
- 我有没有把”字面内容多”误解成”信息论信息多”