Skip to content

信息论基础 (Information Theory)

一句话定义:信息论是研究信息量化、存储和传输的数学分支。由香农 (Claude Shannon) 在 1948 年创立。在 AI 中,它是理解 Cross-Entropy LossKL 散度 的关键。

  • 信息量 (Information): 一个事件的”惊讶程度”。越罕见的事件,信息量越大。
  • 熵 (Entropy): 随机变量的平均信息量,衡量不确定性。
  • 交叉熵 (Cross-Entropy): 用一个分布描述另一个分布时的平均信息量。
  • KL 散度 (KL Divergence): 两个分布之间的”距离”(不对称)。

调整真实分布 P 和预测分布 Q,观察熵、交叉熵和 KL 散度如何变化。

📊信息论可视化

📊 概率分布对比

P (真实)Q (预测)A0.700.50B0.200.30C0.100.20

📐 信息论指标

熵 H(P)1.157 bits
衡量 P 的不确定性。均匀分布时最大 (log₂3 ≈ 1.58)
交叉熵 H(P,Q)1.280 bits
用 Q 编码 P 的平均比特数。当 Q=P 时等于熵
KL 散度 D(P||Q)0.123 bits
P 和 Q 的"距离"。= 交叉熵 - 熵。越小越相似
真实分布 P
P(A)0.70
P(B)0.20
P(C) = 0.10
预测分布 Q
Q(A)0.50
Q(B)0.30
Q(C) = 0.20
H(P) = -Σ P·log₂P
交叉熵
H(P,Q) = -Σ P·log₂Q
KL 散度
D = H(P,Q) - H(P)

  • “太阳从东边升起”:信息量 ≈ 0。每天都发生,完全不惊讶。
  • “北京下雪了”:信息量中等。冬天正常,但夏天就是大新闻。
  • “外星人访问地球”:信息量爆表。极其罕见,非常惊讶。

就像是一本杂志的”惊讶总量”。如果每篇文章都是”太阳升起”,熵很低(无聊)。如果有各种稀奇古怪的新闻,熵很高(精彩)。



在分类任务中,模型输出的是概率分布 p^\hat{p},而真实标签是one-hot 分布 pp

我们需要一种方式来衡量”模型预测”和”真实答案”有多接近。

Cross-Entropy Loss 正是用信息论的方式来做这件事:

  • 如果模型预测的概率分布接近真实分布 → Loss 小
  • 如果模型预测完全错误 → Loss 趋向无穷大

这比简单的 MSE 更适合分类问题,因为它能惩罚”自信但错误”的预测。


一个事件发生的信息量,与其概率成反比:

信息量定义
I(x)=log2p(x)I(x) = -\log_2 p(x)
  • p(x)=1p(x) = 1 (必然发生) → I(x)=0I(x) = 0 (不惊讶)
  • p(x)=0.5p(x) = 0.5 (抛硬币) → I(x)=1I(x) = 1 bit
  • p(x)0p(x) \to 0 (极罕见) → I(x)I(x) \to \infty (超级惊讶)

随机变量的平均信息量

熵的定义
H(X)=xp(x)logp(x)H(X) = -\sum_{x} p(x) \log p(x)
  • 衡量分布的不确定性/混乱程度
  • 均匀分布 → 熵最大
  • 确定性分布 (one-hot) → 熵 = 0
  • 单位:bit (以 2 为底) 或 nat (以 e 为底)

用分布 qq 编码来自分布 pp 的数据时的平均码长:

交叉熵定义
H(p,q)=xp(x)logq(x)H(p, q) = -\sum_{x} p(x) \log q(x)
  • pp: 真实分布 (标签)
  • qq: 模型预测分布
  • q=pq = p 时,H(p,q)=H(p)H(p,q) = H(p)(最小值)
  • 分类 Loss: L=iyilog(y^i)L = -\sum_i y_i \log(\hat{y}_i)

4. KL 散度 (Kullback-Leibler Divergence)

Section titled “4. KL 散度 (Kullback-Leibler Divergence)”

两个分布的”差异”:

KL 散度
DKL(pq)=xp(x)logp(x)q(x)=H(p,q)H(p)D_{KL}(p \| q) = \sum_{x} p(x) \log \frac{p(x)}{q(x)} = H(p,q) - H(p)
  • DKL0D_{KL} \geq 0(总是非负)
  • DKL(pq)DKL(qp)D_{KL}(p \| q) \neq D_{KL}(q \| p)(不对称!)
  • p=qp = q 时,DKL=0D_{KL} = 0
  • AI 应用: VAE, 知识蒸馏, 策略优化

import torch
import torch.nn.functional as F
# 真实标签 (one-hot): 类别 2
y_true = torch.tensor([0, 0, 1, 0], dtype=torch.float32)
# 模型预测 (softmax 后的概率)
y_pred = torch.tensor([0.1, 0.2, 0.6, 0.1])
# ===== 手动计算交叉熵 =====
# H(p, q) = -Σ p(x) * log(q(x))
cross_entropy_manual = -torch.sum(y_true * torch.log(y_pred + 1e-9))
print(f"手动计算 Cross-Entropy: {cross_entropy_manual.item():.4f}")
# 输出: 0.5108
# ===== PyTorch 内置 (推荐) =====
# 注意: F.cross_entropy 接受 logits (未经 softmax)
logits = torch.log(y_pred) # 转回 logits (近似)
target = torch.tensor(2) # 类别索引
loss = F.cross_entropy(logits.unsqueeze(0), target.unsqueeze(0))
print(f"PyTorch Cross-Entropy: {loss.item():.4f}")
# ===== KL 散度 =====
p = y_true / y_true.sum() # 确保是概率分布
q = y_pred
kl_div = F.kl_div(torch.log(q), p, reduction='sum')
print(f"KL 散度: {kl_div.item():.4f}")



Visual Information Theory

Chris Olah 的信息论可视化

阅读

Stanford CS229 Notes

机器学习中的信息论

阅读

Elements of Information Theory

经典教材 (Cover & Thomas)

访问