现在位置: 首页 > AI 数学基础 > 正文

信息量与熵 -- 量化不确定性

信息论为 AI 提供了量化「信息」和「不确定性」的数学工具。

越不可能发生的事件,一旦发生后携带的信息量越大。


概念解析

信息论要回答一个基本问题:如何量化一条消息中包含的「信息」有多少?

关键洞察:信息量与事件的发生概率成反比——越不可能发生的事,一旦发生后,它告诉你的信息越多。

为什么信息量定义为 -log P(x)?

这个定义包含了三条最自然的直觉:

  • 反比关系:P(x) 越小(越意外),I(x) 应该越大。负号保证了这一点
  • 可加性:两个独立事件同时发生的信息量 = 各自信息量之和。log 把概率的乘积变成信息量的加法:\( -\log(p_1 \cdot p_2) = -\log p_1 + (-\log p_2) \)
  • 确定性事件为零:必然事件 P=1 时,\( -\log 1 = 0 \)——已知的事不带来任何信息

信息量(自信息)

\[ I(x) = -\log P(x) \]

底数 2 → 单位比特,底数 e → 单位纳特。AI 中通常用自然对数(求导方便)。

熵:信息量的期望值

\[ H(X) = -\sum_x P(x) \log P(x) \]

熵衡量整个概率分布的不确定性。

  • 确定事件(P=1):H = 0(毫无不确定性)
  • 均匀分布:H 取最大值(最不确定)

熵越高 = 越难预测。这为决策树分裂标准(信息增益)和强化学习的探索策略提供了理论基础。


生活例子

新闻价值

「明天太阳会升起」→ 信息量 ≈ 0(你早就知道)。

「明天有 8 级地震」→ 信息量极大(极其罕见的事件发生了)。

新闻越意外,信息量越大——这就是 I(x) = -log P(x) 的直觉。


Python 动手实践

实例

import numpy as np

def entropy(probs):
    probs = np.array(probs)
    probs = probs[probs > 0]
    return -np.sum(probs * np.log(probs))

print("确定分布 [1,0,0]:", entropy([1,0,0]))         # 0
print("2类均匀 [0.5,0.5]:", entropy([0.5,0.5]))     # 0.693
print("10类均匀:", entropy([0.1]*10))                # 2.303
print("有偏 [0.9,0.05,0.05]:", entropy([0.9,0.05,0.05]))  # 0.394

运行输出:

确定分布 [1,0,0]: 0.0
2类均匀 [0.5,0.5]: 0.6931471805599453
10类均匀: 2.302585092994046
有偏 [0.9,0.05,0.05]: 0.3944479480436973

二分类熵曲线


AI 中的应用场景

决策树的分裂标准:信息增益

决策树在选择分裂特征时,计算分裂前后熵的差值——信息增益 = H(分裂前) - H(分裂后)。选择信息增益最大的特征和分裂点。C4.5 和 ID3 算法都基于此原理。

交叉熵损失 = 最小化预测分布与真实分布的差异

分类任务中,真实分布 p(one-hot 标签)的熵 H(p)=0,交叉熵 H(p,q) 就等于 KL(p||q)。最小化交叉熵 = 让预测分布 q 尽可能接近真实分布 p。下一章会详细展开。

强化学习中的熵正则化

SAC(Soft Actor-Critic)算法在优化目标中加入了策略熵项:最大化 奖励 + \( \alpha \cdot H(\pi) \)。这鼓励策略保持一定的随机性(不要太确定),促进探索、防止过早收敛到次优策略。\(\alpha\) 是熵正则化系数,控制探索与利用的平衡。

模型校准中的熵

一个好的分类器不仅准确率高,预测分布的熵还应该反映真实的不确定性。当模型遇到分布外(OOD)样本时,理想情况下 Softmax 输出的熵应该很高(接近均匀分布),表示「我不确定」。如果熵很低却预测错了,说明模型过于自信(overconfident)。