Math-05.信息论-01.总论

本页为 Math-05 信息论 子系列总论。信息论用对数概率量化「有多不确定」「两个分布差多远」——交叉熵、KL 散度、Perplexity、RLHF 都从这里出发。

段末注释自信息(self-information)$I(x) = -\log p(x)$ 表示事件 $x$ 发生所携带的信息量;(entropy)$H(X)=\mathbb{E}[I(X)]$ 为平均不确定性。

系列入口00.系列规划 | 前置:Math-00/50 分布与 ML 损失


1. 为何 ML 需要信息论(D1)

图 1 概率 → 信息 → 损失

ML 概念 信息论对应
分类交叉熵 $H(P, Q)$,$P$=真实,$Q$=模型
语言模型训练 最小化 $\sum -\log p_\theta(x_t \mid x_{<t})$
KL 正则(RLHF) $D_{\mathrm{KL}}(\pi | \pi_{\mathrm{ref}})$
t-SNE / UMAP 最小化 $D_{\mathrm{KL}}(P | Q)$
决策树分裂 信息增益 = 熵减少
模型蒸馏 匹配 teacher 与 student 分布

Math-00/50分布→NLL;本系列从熵→CE/KL 补全同一链条。


2. 自信息与熵(D2–D3)

图 2 熵与分布形状

离散随机变量 $X$,$p(x) > 0$:

$$
I(x) = -\log p(x), \quad H(X) = -\sum_x p(x) \log p(x) = \mathbb{E}_X[-\log p(X)]
$$

单位:$\log$ 底为 2 → 比特(bit);底为 $e$ → 奈特(nat)。ML 框架通常用自然对数。

性质

  • $H(X) \ge 0$,均匀分布时最大
  • $H(X,Y) \le H(X) + H(Y)$
  • 独立时 $H(X,Y) = H(X) + H(Y)$

3. 联合、条件与互信息(D3)

$$
H(X,Y) = -\sum_{x,y} p(x,y) \log p(x,y)
$$

$$
H(X \mid Y) = -\sum_{x,y} p(x,y) \log p(x \mid y), \quad H(X,Y) = H(Y) + H(X \mid Y)
$$

互信息(mutual information,MI):

$$
I(X;Y) = H(X) - H(X \mid Y) = D_{\mathrm{KL}}(p(x,y) | p(x)p(y))
$$

$I(X;Y) \ge 0$,$=0$ 当且仅当 $X,Y$ 独立。详见 04 互信息


4. 概念关系图(D4–D7)

图 3 信息论概念地图

1
2
3
4
5
6
7
8
概率 p(x)
→ 自信息 I(x) = -log p
→ 熵 H(X) = E[I]
→ 联合/条件熵 H(X,Y), H(X|Y)
→ 互信息 I(X;Y)
→ 交叉熵 H(P,Q) = H(P) + D_KL(P||Q)
→ KL 散度 D_KL(P||Q)
→ ML:CE 损失、RLHF、PPL、蒸馏

交叉熵与 KL03 专篇):

$$
H(P, Q) = -\sum_x p(x) \log q(x) = H(P) + D_{\mathrm{KL}}(P | Q)
$$

训练时 $H(P)$ 常数 → 最小化 CE ≡ 最小化 KL($P$ 固定、$Q$ 变)。


5. 与 Math-00 分布的衔接(D6)

分布 熵(离散) ML
Bernoulli($p$) $H = -p\log p -(1-p)\log(1-p)$ 二分类 CE
均匀 $K$ 类 $H = \log K$ 随机猜 baseline
正态(连续) 微分熵 $H = \frac12\log(2\pi e \sigma^2)$ 微分熵见 02

Softmax 输出 + 交叉熵 ↔ 15.多项分布


6. 局限与注意(D8)

图 4 常见误用

误用 说明
把 CE 当「距离」 CE 非对称,$H(P,Q) \neq H(Q,P)$
忽视 $H(P)$ 基线 高 CE 可能因 $P$ 本身高熵
有限样本估 MI 严重高估,需正则化估计
$\log 0$ 概率为 0 处需 clip 或 smoothing

7. NumPy 示例(D12)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np

def entropy(p):
p = np.asarray(p, dtype=float)
p = p[p > 0]
return -np.sum(p * np.log(p))

# 公平硬币 vs 偏置硬币
print("H(fair):", entropy([0.5, 0.5]))
print("H(biased):", entropy([0.9, 0.1]))

# 联合熵
Pxy = np.array([[0.2, 0.3], [0.1, 0.4]])
print("H(X,Y):", entropy(Pxy.ravel()))

8. 系列导航

篇号 主题
02 熵 离散/连续、不确定性
03 CE/KL 分类损失、RLHF
05 最大熵 Softmax 推导
10 语言模型 PPL
20 RLHF KL 约束

系列导航00 规划 | 03 CE/KL

-------------本文结束感谢您的阅读-------------