Appearance
04 — 信息论与机器学习(Information Theory for ML)
信息论(Information Theory)由 Claude Shannon 于 1948 年创立,最初用于解决通信工程中的信息量化(quantize /ˈkwɒntaɪz/)问题。但它的核(kernel /ˈkɜːrnl/)心工具——熵(entropy /ˈentrəpi/)(Entropy)、KL 散度(KL Divergence)、互信息(Mutual Information)——如今已经成为机器学习中不可或缺的理论基石。本章从"信息量"的直觉出发,推导出熵、KL 散度与交叉熵之间的逻辑链条,最终揭示为什么分类(classification /ˌklæsɪfɪˈkeɪʃən/)问题的损失函数(Cross-Entropy Loss)本质上就是一个信息论问题。
本章的层层递进路线:自信息 → 熵 → KL 散度 → 交叉熵 → ML 损失函数 → 互信息
1. 自信息与熵(Self-Information & Entropy)
1.1 自信息:衡量"惊讶程度"
直觉上,一个小概率事件发生时,我们获得的"信息量"更大——因为它更出乎意料。反之,一个几乎必然发生的事件几乎不传递信息。比如:
- "明天太阳会升起" → 几乎不传递信息(概率 ≈ 1)
- "明天有日食" → 传递了大量信息(概率很小)
Shannon 将自信息(Self-Information) 定义为:
其中
为什么取负对数?
- 单调性:概率越小,信息量越大(
) - 可加性:独立事件的信息量相加:
- 非负性:
,所以
python
import numpy as np
def self_info(p, base=2):
"""计算自信息(Self-Information)"""
return -np.log(p) / np.log(base)
# 例子
print(f"P=0.5 → I = {self_info(0.5):.2f} bit") # 1 bit
print(f"P=0.1 → I = {self_info(0.1):.2f} bit") # 3.32 bit
print(f"P=0.9 → I = {self_info(0.9):.2f} bit") # 0.15 bit详见配套代码
information_demo.py中的demo_self_information()。
1.2 熵:分布的平均不确定性
熵(Entropy) 是自信息的期望值,它衡量一个随机(stochastic /stəˈkæstɪk/)变量
对于连续随机变量,求和变为积分:
直觉:熵越大,分布越"随机";熵越小,分布越"确定"。
| 分布 | 熵大小 | 直觉 |
|---|---|---|
| 确定性分布 | 毫无不确定性 | |
| 均匀分布( | 最大不确定性 | |
| 偏斜分布(接近 0 或 1) | 较小 | 比较确定 |
抛硬币的例子:考虑一枚参数(parameter /pəˈræmɪtər/)为
或 时, —— 结果完全确定 时, bit —— 不确定性最大
python
def entropy_binary(p):
"""二值分布的熵"""
if p == 0 or p == 1:
return 0.0
return -p * np.log2(p) - (1-p) * np.log2(1-p)详见配套代码
information_demo.py中的demo_entropy_coin(),该函数绘制了熵随变化的曲线——呈现漂亮的倒 U 形,在 处取最大值。
2. KL 散度(Kullback–Leibler Divergence)
2.1 定义与直觉
KL 散度,又称相对熵(Relative Entropy),用于衡量两个概率分布
直觉解读:"如果用分布
换成编码的视角:若真实分布是
2.2 重要性质
- 非负性:
,等号成立当且仅当 (Gibbs 不等式) - 不对称性:
—— 所以它不是"距离度量" - 无上界:当
但 时,
非对称性的直观理解:
:以 为"真相",衡量 的近似代价 :以 为"真相",衡量 的近似代价
在机器学习中,我们通常最小化
2.3 两个高斯分布之间的 KL 散度
对于两个
当
即对称的欧氏距离的一半。
详见配套代码
information_demo.py中的demo_kl_gaussian()。
3. 交叉熵(Cross-Entropy)
3.1 定义
交叉熵(Cross-Entropy)
3.2 与熵和 KL 散度的关系——核心推导
这是信息论与 ML 之间最关键的一环:
即:
含义:交叉熵 = 真实分布的熵 + 用
3.3 为什么分类损失函数是交叉熵?
在分类任务中:
= 真实数据分布(one-hot 标签分布, ) = 模型预测分布( 或 )
由于
但更重要的是:最小化交叉熵等价于最小化 KL 散度。
因为
最小化交叉熵 = 最小化 KL 散度 = 让模型分布匹配数据分布
这就是为什么在 PyTorch/TensorFlow 中,分类损失都使用 nn.CrossEntropyLoss —— 它本质上是信息论在 ML 中的直接应用。
对于一个样本
其中
4. 互信息(Mutual Information)
4.1 定义与直觉
互信息(Mutual Information, MI) 衡量两个随机变量
其中
直觉:"知道
当且仅当 和 独立 越大, 和 的关联越强
4.2 等价形式
互信息可以等价地表示为 KL 散度的形式:
即"联合分布与独立分布乘积之间的 KL 散度"。如果
还可以写成对称形式:
4.3 在特征选择中的应用
互信息在 ML 中的一个经典应用是特征选择(Feature Selection)。思路:
- 计算每个特征
与目标标签 的互信息 - 互信息越大的特征越"有用"(包含更多关于标签的信息)
- 选择 Top-k 个互信息最大的特征
对比相关系数:
| 方法 | 能捕捉非线性关系? | 适用范围 |
|---|---|---|
| 皮尔逊相关系数 | ❌ 只能捕捉线性 | 连续变量 |
| 互信息 | ✅ 任意关系 | 任意变量 |
python
from sklearn.feature_selection import mutual_info_classif
# X: 特征矩阵, y: 标签
mi_scores = mutual_info_classif(X, y)
top_features = np.argsort(mi_scores)[-5:] # Top-5 特征详见配套代码
information_demo.py中的demo_mutual_info_selection()。
5. 核心推导链总结
整个章节的逻辑可以概括为一条推导链:
核心结论:机器学习中的分类损失函数(Cross-Entropy Loss)本质上是让模型分布逼近数据分布——这正是信息论中最小化 KL 散度的过程。
6. 关键术语与符号对照
| 符号 | 名称 | 公式 | ML 对应含义 |
|---|---|---|---|
| 自信息 (Self-Information) | 单个预测的"惊讶度" | ||
| 熵 (Entropy) | 数据集的固有不确定性 | ||
| KL 散度 (KL Divergence) | 模型与数据的"距离" | ||
| 交叉熵 (Cross-Entropy) | 分类损失函数 | ||
| 互信息 (Mutual Information) | 特征与标签的关联强度 |
参考文献
- Shannon, C. E. (1948). A Mathematical Theory of Communication. Bell System Technical Journal.
- Cover, T. M. & Thomas, J. A. (2006). Elements of Information Theory (2nd ed.). Wiley-Interscience.
- MacKay, D. J. C. (2003). Information Theory, Inference(/ˈɪnfərəns/), and Learning Algorithms. Cambridge University Press.
- Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.