跳转至

讲解稿 · 第05章 第05节 · 信息论

口播时长:约 18 分钟|建议语速:中速,公式处停两拍|字数:约 4200 字


开场钩子(约 80 秒)

问你一个问题。

你现在看手机,输入法在帮你做一件事——它要猜你下一个字想打什么。可能是"我",可能是"你",可能是"今"。猜得准不准,看的是这个输入法在多大程度上减少了不确定性。如果下一个字是"今"——几乎每个中文句子都用"今"开头——它就猜"今";如果下一个字是"永"——只有极少数成语会用——那它就更不确定,需要更多信息才能锁定。

这套"用比特衡量不确定性"的语言,不是输入法发明的。1948 年,克劳德·香农(Claude Shannon)在一篇划时代论文里把这套语言系统化了。70 多年后,它已经成了现代机器学习每一根损失函数、每一个变分自编码器、每一个语言模型 perplexity 背后的骨架。今天这一节,我们就把这套语言从根上拆一遍。

扶稳了,我们开始。


复习昨日 & 今日路线(约 40 秒)

上一节 §04 我们啃了贝叶斯方法——先验、似然、证据、后验,加上 MLE/MAP/共轭先验那一整套工具。今天 §05 我们翻进信息论——它跟贝叶斯是近亲,但关注点不一样:贝叶斯关心"参数 \(\theta\) 的不确定性",信息论关心"分布本身的不确定性以及分布之间的差异"。

下一节 Ch06 经典机器学习里,决策树的信息增益、逻辑回归的交叉熵损失、VAE 的 KL 正则项——全部从这一节出发。这一节学扎实,下一节就是一马平川。


核心概念一 · 自信息——一个事件到底"值多少"(约 2.5 分钟)

先给直觉。

你住在沙漠里,有人告诉你"今天出太阳"——这不算新闻,因为沙漠里出太阳几乎是必然的。可要是有人告诉你"今天下雪了"——这绝对是大新闻,因为沙漠下雪是极小概率事件。罕见事件携带更多信息,常见事件几乎不携带信息。

把这种直觉写成公式,就是自信息 (surprisal, self-information):

\[I(x) = \log_2 \frac{1}{p(x)} = -\log_2 p(x)\]

单位是比特 (bit)。一次公平的抛硬币,自信息 \(-\log_2(0.5) = 1\) 比特。概率 \(1/8\) 的事件,自信息 \(\log_2(8) = 3\) 比特。

为什么用对数,不用 \(1/p\)? 这里有个学生常问的问题。三个原因:

  1. 必然事件应该带零信息:\(p=1\) 时,\(\log(1) = 0\),但 \(1/p = 1\)。只有对数能保证"必然事件信息量为 0"。
  2. 独立事件的信息应该可加:\(\log(1/(p_1 p_2)) = \log(1/p_1) + \log(1/p_2)\)。两个独立事件一起发生,携带的信息等于各自信息之和。乘法变加法——只有对数能做到。
  3. 行为平滑:\(1/p\) 在 \(p\) 接近 0 时会爆炸,而 \(\log(1/p)\) 增长很温和。

符号首现(四件套):

\(I(x)\) — 自信息 (self-information, surprisal):单次事件 \(x\) 携带的信息量,定义为 \(-\log_2 p(x)\),单位是比特。例子:\(p=0.25\) 的事件,自信息 \(I = -\log_2 0.25 = 2\) 比特。

这里有个反直觉的提醒——自信息是单次事件的属性,不是分布的属性。期望才会引出下一个概念。


核心概念二 · 熵——分布整体的"平均信息量"(约 3 分钟)

熵 (entropy) 就是自信息的期望——从某个分布采样时,平均每个事件携带多少信息。它度量的是分布本身的整体不确定性或不可预测性。

\[H(X) = E[I(X)] = -\sum_{x} p(x) \log_2 p(x)\]

数字例子 1 · 公平硬币:\(H = -0.5 \log_2 0.5 - 0.5 \log_2 0.5 = 1\) 比特。不确定性最大。

数字例子 2 · 偏心硬币(\(p=0.9\) 出正面):\(H = -0.9 \log_2 0.9 - 0.1 \log_2 0.1 \approx 0.469\) 比特。不确定性小,熵也小。

数字例子 3 · 确定性事件(\(p=1\)):\(H = 0\)。完全没有不确定性。

最重要的性质:当所有结果等可能时,熵取到最大。\(n\) 个等可能结果,\(H = \log_2 n\)。公平骰子(6 面)的熵是 \(\log_2 6 \approx 2.585\) 比特。这就是为什么均匀分布叫"最大熵分布"——它最不可预测。

符号首现(四件套):

\(H(X)\) — 熵 (entropy):分布 \(p(x)\) 的整体不确定性度量,定义为 \(-\sum_x p(x) \log_2 p(x)\),单位是比特。例子:公平硬币 \(H = 1\),公平骰子 \(H = \log_2 6 \approx 2.585\)。

熵的现实意义是压缩。香农源编码定理 (Shannon's source coding theorem) 告诉我们:无损压缩数据不能低于它的熵率。一张全白图片(熵极低)能压得很小;一张随机噪声图(熵最大)完全压不动。

感受一下量级:一个灰度像素最多 256 种取值,最大熵 8 比特。一张 1080p 灰度图最多 \(1920 \times 1080 \times 8 \approx 1660\) 万比特。真实图片的熵远比这低,因为相邻像素高度相关——这正是 JPEG 压缩起作用的原因。

⏸️ 暂停思考 · 第一次

想象你要给一个班级 30 个学生发成绩单,每个成绩是 A/B/C/D/E 五等。如果 30 个人全部拿了 A,"发成绩单"这件事你需要写多少比特?如果 30 个人五等分平均分布,你需要多少比特?这两个数字告诉我们:熵就是"最少要写多少字才能说清楚一件事"的数学答案。


核心概念三 · 微分熵——连续分布的版本(约 2 分钟)

切到连续随机变量,离散求和变积分,得到微分熵 (differential entropy):

\[h(X) = -\int_{-\infty}^{\infty} f(x) \log f(x)\, dx\]

一个特别重要的结论:方差为 \(\sigma^2\) 的高斯分布,微分熵 \(h = \frac{1}{2}\log_2(2\pi e \sigma^2)\) 比特。

更关键的是:在所有方差相同的连续分布里,高斯的微分熵最大。这是高斯在建模中如此常见的一个根本原因——除了给定的均值和方差,它不再多做任何假设,是"最随机"的合法选择。

⚠️ 反例与警告:微分熵可以取负值。比如 Uniform(0, 1/2) 的微分熵是 \(h = -\int_0^{1/2} 2 \log 2\, dx = 1\) 比特;但 Uniform(0, 1) 是 \(h = 0\) 比特;而 Uniform(0, 2) 的 \(h = -1\) 比特——是负的。这是连续版本与离散版本最大的区别:离散熵 \(\ge 0\),但连续熵没这个下界。原因是密度 \(f(x)\) 在某点可以大于 1,\(\log f(x)\) 变成正数,\(-p \log p\) 加起来就可能为负。


核心概念四 · 互信息——知道一个变量能告诉你多少关于另一个的(约 2.5 分钟)

互信息 (mutual information) 衡量:知道一个变量,能减少多少关于另一个变量的不确定性。

\[I(X; Y) = H(X) - H(X|Y) = H(Y) - H(Y|Y)\]

也可以写成对联合分布与边缘分布乘积的"距离":

\[I(X; Y) = \sum_{x,y} p(x,y) \log_2 \frac{p(x,y)}{p(x) p(y)}\]

核心性质:\(X\) 与 \(Y\) 独立时,\(p(x,y) = p(x)p(y)\),对数的分母是 1,\(I = 0\)。两者越相关,互信息越大。

数字例子:天气(晴/雨)和是否带伞(带/不带)高度相关。\(H(\text{天气}) = 1\) 比特(假设五五开),\(H(\text{天气}|\text{带伞}) = 0.1\) 比特(基本锁定),互信息 \(I \approx 0.9\) 比特。看到伞,几乎确定了天气。

跨章预告:互信息是第 06 章决策树信息增益分裂准则的骨架——分裂前后熵的减少量就是互信息。也是特征选择的核心工具:"这个特征能告诉我多少关于目标的信息?"

符号首现(四件套):

\(I(X;Y)\) — 互信息 (mutual information):\(X\) 与 \(Y\) 共享的信息量,\(I(X;Y) = H(X) - H(X|Y) \ge 0\)。例子:天气和带伞 \(I \approx 0.9\) 比特,独立变量 \(I = 0\)。


核心概念五 · 交叉熵——分类损失的灵魂(约 2.5 分钟)

交叉熵 (cross-entropy) 衡量:用为分布 \(q\) 优化好的编码去编码来自真实分布 \(p\) 的事件,平均需要多少比特:

\[H(p, q) = -\sum_{x} p(x) \log_2 q(x)\]

关键性质:如果 \(q\) 完美匹配 \(p\),交叉熵就等于熵 \(H(p, p) = H(p)\)。如果 \(q\) 是个糟糕的近似,交叉熵就更高。多出来的比特,就是"不匹配"的代价。

这是为什么交叉熵成为 ML 分类的标准损失。真实标签定义了 \(p\)(一个 one-hot 分布),模型的预测概率定义了 \(q\)。最小化交叉熵,就是把 \(q\) 推向 \(p\):

\[\mathcal{L} = -\sum_{c} y_c \log \hat{y}_c\]

对单个真实类别为 \(c\) 的样本,上式化简为 \(\mathcal{L} = -\log \hat{y}_c\)。损失就是模型对真实类别所预测概率的自信息。模型给正确类别的概率越高,损失就越低。

数字例子:三分类问题,真实标签是"猫"(one-hot: \((1, 0, 0)\)),模型预测 \((\hat{p}_{\text{猫}}, \hat{p}_{\text{狗}}, \hat{p}_{\text{鸟}})\)。 - 完美预测 \((1, 0, 0)\):\(\mathcal{L} = -\log_2 1 = 0\)。 - 较好预测 \((0.9, 0.05, 0.05)\):\(\mathcal{L} = -\log_2 0.9 \approx 0.152\) 比特。 - 错误预测 \((0.1, 0.8, 0.1)\):\(\mathcal{L} = -\log_2 0.1 \approx 3.322\) 比特——大得吓人,模型对正确类别几乎没信心。

符号首现(四件套):

\(H(p, q)\) — 交叉熵 (cross-entropy):用 \(q\) 编码 \(p\) 的平均比特数,\(H(p, q) = -\sum_x p(x) \log_2 q(x)\)。例子:\(p=(1,0)\),\(q=(0.9, 0.1)\),\(H(p, q) \approx 0.152\) 比特。


核心概念六 · KL 散度——两个分布差多远(约 3 分钟)

KL 散度 (Kullback-Leibler divergence, KL divergence, 又称相对熵) 衡量一个分布与另一个分布相差多远:

\[D_{\text{KL}}(p \| q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)} = H(p, q) - H(p)\]

KL 散度就是用 \(q\) 代替 \(p\) 所付出的"额外代价"。它有两条铁律:

  1. 始终非负:\(D_{\text{KL}}(p \| q) \ge 0\)。
  2. 当且仅当 \(p = q\) 时为零。

这给了一个关键等价关系:因为 \(H(p)\) 对模型来说是常数(真实分布不变),最小化交叉熵 \(H(p, q)\) 等价于最小化 \(D_{\text{KL}}(p \| q)\)。这就是为什么我们用交叉熵损失时,实际上也在同时最小化真实分布与预测分布之间的 KL 散度。

数字例子:\(p = (0.4, 0.3, 0.2, 0.1)\),\(q = (0.35, 0.30, 0.25, 0.10)\)。

\(H(p) = -0.4\log_2 0.4 - 0.3\log_2 0.3 - 0.2\log_2 0.2 - 0.1\log_2 0.1 \approx 1.846\) 比特。

\(H(p, q) = -0.4\log_2 0.35 - 0.3\log_2 0.30 - 0.2\log_2 0.25 - 0.1\log_2 0.10 \approx 1.860\) 比特。

\(D_{\text{KL}}(p \| q) = H(p, q) - H(p) \approx 0.014\) 比特。很接近,代价很小。

如果换成 \(q' = (0.1, 0.1, 0.1, 0.7)\)(错得很离谱),\(D_{\text{KL}}(p \| q') \approx 0.65\) 比特——代价爆涨。

⚠️ 反例与警告:KL 散度不对称——\(D_{\text{KL}}(p \| q) \ne D_{\text{KL}}(q \| p)\)。这非常反直觉。两个数字例子就够说明问题:

  • \(D_{\text{KL}}(p \| q)\) 惩罚 \(q\) 在 \(p\) 高概率处放低概率(因为 \(\log(p/q)\) 在 \(q\) 接近 0 时炸开)。
  • \(D_{\text{KL}}(q \| p)\) 惩罚 \(q\) 在 \(p\) 低概率处放高概率。

这种不对称派生出两种近似风格:

  • 最小化 \(D_{\text{KL}}(p \| q)\):矩匹配 (moment-matching) ——\(q\) 覆盖 \(p\) 的所有模式,但可能过于铺开。
  • 最小化 \(D_{\text{KL}}(q \| p)\):寻模 (mode-seeking) ——\(q\) 集中在 \(p\) 的某个模式上,但可能漏掉其他模式。变分推断用的就是这一种。

符号首现(四件套):

\(D_{\text{KL}}(p \| q)\) — KL 散度 (KL divergence):\(q\) 近似 \(p\) 的额外代价,\(D_{\text{KL}}(p \| q) = H(p, q) - H(p) \ge 0\)。例子:\(p = (0.5, 0.5)\),\(q = (0.9, 0.1)\),\(D_{\text{KL}} \approx 0.369\) 比特。


一个走完全程的例子(约 3 分钟)

把所有概念串一遍。我用一个三分类垃圾邮件过滤器的场景。

背景:我们要给邮件打三档标签——"正常"(概率 0.85)、"促销"(概率 0.10)、"垃圾"(概率 0.05)。真实分布 \(p = (0.85, 0.10, 0.05)\),真实熵:

\[H(p) = -0.85 \log_2 0.85 - 0.10 \log_2 0.10 - 0.05 \log_2 0.05 \approx 0.847 \text{ 比特}\]

Step 1 · 训练初期:模型预测 \(q_1 = (0.6, 0.3, 0.1)\)——"正常"类别信心不够。

交叉熵 \(H(p, q_1) = -0.85\log_2 0.6 - 0.10\log_2 0.3 - 0.05\log_2 0.1 \approx 1.211\) 比特。 KL 散度 \(D_{\text{KL}}(p \| q_1) = H(p, q_1) - H(p) \approx 0.364\) 比特。模型离真实分布还差 0.364 比特。

Step 2 · 训练中期:模型预测 \(q_2 = (0.80, 0.12, 0.08)\)——已经接近。

\(H(p, q_2) \approx 0.870\) 比特,\(D_{\text{KL}}(p \| q_2) \approx 0.023\) 比特。差距缩小到原来的 1/15。

Step 3 · 训练后期:模型几乎完美,\(q_3 = (0.849, 0.100, 0.051)\)。

\(D_{\text{KL}}(p \| q_3) \approx 0.0001\) 比特。几乎对齐。

Step 4 · 验证互信息:模型对"正常"邮件的预测与真实标签的相关性——计算 \(I(\text{预测}; \text{真实}) \approx 0.85\) 比特(接近 \(H(p)\) 上限)。模型对真实标签给出了几乎所有的信息。

Step 5 · 实战:一封新邮件进来,模型给 \(q = (0.92, 0.06, 0.02)\)。我们用 \(H(p, q)\) 作为损失项——为了让 \(q\) 越来越像 \(p\)。在 VAE 这种生成模型里,还会再加一项:潜变量分布 \(r(z)\) 与标准正态 \(\mathcal{N}(0, I)\) 之间的 KL 散度——把潜空间拉向正态分布,保证采样出来的 \(z\) 合理。

这一个例子用到了今天所有概念:熵、交叉熵、KL 散度、互信息。下次你们看到任何分类损失、生成模型、信息瓶颈方法的论文——背后都是这一套组合拳。


易错点回头看(约 90 秒)

三条最常翻车的地方:

坑一 · 很多人以为 "交叉熵就是 KL 散度"。其实交叉熵 \(H(p, q)\) 是绝对比特数,KL 散度是"比 \(H(p)\) 多出来的比特数"。\(D_{\text{KL}} = H(p, q) - H(p)\)。最小化 \(H(p, q)\) 才等价于最小化 \(D_{\text{KL}}\),因为 \(H(p)\) 固定。把"交叉熵"和"KL 散度"两个词混用,写作业时还能过,但你跟同事讨论时会被立刻打脸。

坑二 · 很多人以为 "KL 散度是对称的"。它不对称。\(D_{\text{KL}}(p \| q) \ne D_{\text{KL}}(q \| p)\)。这种不对称不是 bug,是 feature——它派生出两种不同的近似风格(矩匹配 vs 寻模)。变分推断专门挑寻模方向。把它当对称距离用,结果会完全跑偏。

坑三 · 很多人以为 "微分熵和离散熵一样都 ≥ 0"。离散熵 \(\ge 0\),但微分熵可以取负。Uniform(0, 2) 的微分熵是 \(-1\) 比特。原因:连续熵不是"概率量的对数",而是"密度量的对数",密度 \(f(x)\) 在某点可以大于 1,\(\log f(x)\) 取正,\(-p\log p\) 加起来就可能为负。不要拿离散直觉套连续。


与下节的钩子(约 30 秒)

今天我们把信息论的四大件——自信息、熵、互信息、交叉熵、KL 散度——全走了一遍。它们之间的关系是:熵告诉你一个分布内在的不确定性,交叉熵告诉你模型对现实的近似程度,KL 散度告诉你二者之间的差距。这三个量,是现代 ML 优化的骨架。

但还有一个问题没解决——当数据维度更高、分布更复杂时,怎么实际算这些量?蒙特卡洛估计、变分推断、ELBO——这些是下一章 §03 深度学习里 VAE、扩散模型、语言模型 perplexity 的数学骨架。

下次见。