最近重新整理信息论,发现它概念不多但关系很紧——一个地方没想透,后面就越背越乱。所以这篇笔记不写成公式大全,而是按我自己复习的顺序来:

  1. 数学基础:熵、条件熵、互信息、交叉熵
  2. 工程实践:压缩、通信、ML、风控、LLM
  3. 语言现象:诗词、文言文和日常所说的”信息量”

原始讨论来自这个 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 有多难预测(→ 熵)
  • XY 之间有没有关系(→ 联合熵、互信息)
  • 看了 X 之后,Y 会不会更容易预测(→ 条件熵)

加上交叉熵和 KL 散度,就是整个第一部分要讲的内容。

举一个日常的例子。假设我们把”明天是否下雨”定义成随机变量 Y

  • 一条天气预报说”明天下雨概率 90%”,会明显改变我们对 Y 的判断——这条消息携带了很多信息
  • 如果只是重复我们已经知道的结论,那它几乎不改变判断——信息量很小
  • 极端情况:如果变量本身几乎确定(比如”太阳明天是否升起”),那任何陈述都很难再减少不确定性

这里有一个关键前提:

信息论里的不确定性,一定是相对于某个随机变量和某个预测目标而言的。

不是先看语义有没有”像信息”,而是先定义我们到底想预测什么。信息论最关心的,是一条消息让目标变量的不确定性减少了多少。这个”减少量”后面会用互信息来精确描述。

1.2 香农信息量与信息熵

这一节最好分成两步看:

  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 还剩多少不确定性。

如果 XY 很有帮助,那么条件熵就会下降。

一个直观例子是天气预测:

  • 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) 表示:

同时预测 XY 有多难。

比如 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) $$

也就是说,XY 的信息增益,等于 YX 的信息增益。这和条件熵不同——条件熵一般不对称,H(Y|X) \neq H(X|Y)

最后,把联合熵、条件熵和单变量的熵串起来的是链式法则:

$$ H(X,Y) = H(X) + H(Y|X) $$

直觉上就是:“两个变量合在一起的总不确定性 = 先看 X 的不确定性 + 知道 XY 还剩的不确定性”。

结合互信息的定义,还可以得到另一个常用表达:

$$ I(X;Y) = H(X) + H(Y) - H(X,Y) $$

这条式子很适合用韦恩图来理解:互信息就是两个变量的熵的重叠部分。

H(X|Y)I(X;Y)H(Y|X)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)XY 的信息增益(对称的)
  • 交叉熵 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 这些工程系统,也能帮我们重新理解诗词、文言文和日常语言里的”信息感”。

以后再碰到这些概念,快速回答三个问题就够了:

  1. 它描述的是”剩余不确定性”还是”信息增益”
  2. 它用在数学推导、工程优化还是日常表达
  3. 我有没有把”字面内容多”误解成”信息论信息多”