信息论基础

信息论(Information Theory)由克劳德·香农于1948年在《通信的数学理论》中奠定基础,是研究信息量化、存储和传输的数学分支。1 在机器学习和深度学习中,信息论提供了理解模型行为、优化训练过程的重要理论框架。

熵(Entropy)

信息量

理解熵之前,先了解信息量(Self-Information)的概念。对于事件 ,其信息量为:

  • 时,单位为 比特(bits)
  • 时,单位为 奈特(nats)

关键洞察:稀有事件携带更多信息。例如:

  • 硬币正面(): bit
  • 连续三次正面(): bits
  • 极稀有事件(): bits

香农熵的定义

香农熵(Shannon Entropy)是对概率分布不确定性的度量:

或等价形式:

熵的性质

性质描述
非负性
对称性
可加性(链式法则)
最大值均匀分布熵最大
极值性确定分布熵为 0

联合熵与条件熵

联合熵

条件熵

熵的链式法则

代码实现

import numpy as np
 
def shannon_entropy(p):
    """计算香农熵(使用自然对数,单位为nats)"""
    p = np.array(p)
    # 过滤掉概率为0的项(0*log(0) = 0)
    mask = (p > 0) & (p < 1)
    return -np.sum(p[mask] * np.log(p[mask]))
 
def joint_entropy(p_xy):
    """计算联合熵"""
    p_xy = np.array(p_xy)
    mask = (p_xy > 0) & (p_xy < 1)
    return -np.sum(p_xy[mask] * np.log(p_xy[mask]))
 
def conditional_entropy(p_y_given_x, p_x):
    """计算条件熵 H(Y|X)"""
    return sum(p_x[i] * shannon_entropy(p_y_given_x[i]) for i in range(len(p_x)))
 
# 示例:二元分类中的类别分布
p_balanced = [0.5, 0.5]  # 平衡数据集
p_imbalanced = [0.9, 0.1]  # 不平衡数据集
 
print(f"平衡数据熵: {shannon_entropy(p_balanced):.4f}")  # ~0.693
print(f"不平衡数据熵: {shannon_entropy(p_imbalanced):.4f}")  # ~0.325

互信息(Mutual Information)

定义

互信息衡量两个随机变量之间的依赖程度:

与熵的关系

互信息可以表示为多种等价形式:

物理意义 表示已知 后对 不确定性的减少量。

维恩图表示

        ┌───────────────────────────┐
        │                           │
        │    H(X, Y)                │
        │   ┌─────────────┐         │
        │   │    H(X|Y)   │    H(Y|X)│
        │   └──────┬──────┘         │
        │          │                │
        │          │ I(X;Y)         │
        │          │                │
        └──────────┴─────────────────┘

性质

性质公式
对称性
非负性
独立性
自信息
数据处理不等式(DPI)

在机器学习中的应用

特征选择

利用互信息选择与目标变量高度相关的特征:

def mutual_information(p_xy, p_x, p_y):
    """计算互信息"""
    return np.sum(p_xy * np.log(p_xy / (np.outer(p_x, p_y) + 1e-10) + 1e-10))

InfoGAN 中的应用

InfoGAN 通过最大化隐变量 与生成图像 之间的互信息来学习解耦表示:


KL 散度(Kullback-Leibler Divergence)

定义

KL 散度衡量两个概率分布之间的差异:

对于连续分布:

关键性质

性质描述
非负性(吉布斯不等式)
非对称性
链式法则
积性

与交叉熵的关系

交叉熵定义为:

三者之间的关系:

因此,当 固定时,最小化交叉熵等价于最小化 KL 散度。

代码实现

import scipy.stats
 
def kl_divergence(p, q):
    """计算 KL 散度 D_KL(P || Q)"""
    p = np.array(p, dtype=np.float64)
    q = np.array(q, dtype=np.float64)
    # 过滤掉 P 中为 0 的项
    mask = (p > 0) & (q > 0)
    return np.sum(p[mask] * np.log(p[mask] / q[mask]))
 
# 使用 scipy 验证
p = np.array([0.3, 0.7])
q = np.array([0.4, 0.6])
print(f"D_KL(P||Q): {scipy.stats.entropy(p, q):.4f}")

交叉熵与损失函数

交叉熵损失函数

在分类任务中,交叉熵损失衡量真实分布 与预测分布 之间的差异:

其中 是 one-hot 编码的真实标签, 是预测概率。

二元交叉熵(Binary Cross-Entropy, BCE)

对于二分类问题:

PyTorch 实现

import torch
import torch.nn as nn
 
# 多分类示例
criterion = nn.CrossEntropyLoss()
logits = torch.randn(32, 10)  # batch_size=32, 10个类别
targets = torch.randint(0, 10, (32,))
loss = criterion(logits, targets)
 
# 二分类示例
criterion_bce = nn.BCEWithLogitsLoss()
logits = torch.randn(32, 1)
targets = torch.randint(0, 2, (32, 1)).float()
loss = criterion_bce(logits, targets)

交叉熵损失的优势

  1. 良好的梯度特性:当预测错误时提供强梯度信号
  2. 概率解释:与最大似然估计(MLE)一致
  3. 与信息论的联系:最小化交叉熵等价于最大化数据似然

标签平滑(Label Smoothing)

标签平滑是一种正则化技术,将硬标签替换为软标签:

其中 是类别数, 是平滑参数(通常取 )。

def label_smoothing(labels, num_classes, epsilon=0.1):
    """标签平滑"""
    return labels * (1 - epsilon) + epsilon / num_classes

最大熵原理(Maximum Entropy Principle)

原理阐述

在只知道部分约束的情况下,应该选择熵最大的概率分布,即不确定性最大的分布。这一原理在统计学和物理学中都有重要应用。

数学形式

给定约束 for ,最大化:

subject to:

拉格朗日求解

引入拉格朗日乘子

求导并令为 0:

解得:

其中 归一化常数(配分函数)。

在机器学习中的应用

逻辑回归

逻辑回归本质上是最大熵分类器在二分类情况下的特例,其输出是满足给定特征期望约束的最大熵分布。

最大熵马尔可夫模型(MEMM)

MEMM 使用最大熵原理进行序列标注,结合了 HMM 的发射概率和最大熵的全局特征建模能力。


信息论在深度学习中的核心应用

注意力机制的信息论视角

注意力机制可以被理解为一种信息路由和选择过程:

从信息论角度:

  • Query :表示需要查询的信息目标
  • Key :代表可用的信息键
  • Value :包含实际的信息内容
  • Softmax 操作计算 Query 与各 Key 之间的互信息近似

对比学习中的 InfoNCE

InfoNCE 是对比学习中常用的损失函数,源自互信息的下界估计:

其中 是相似度函数, 是温度参数。

与互信息的联系:InfoNCE 损失是互信息的下界估计,最小化 InfoNCE 损失等价于最大化正样本对之间的互信息。


核心公式速查表

概念公式
信息量
联合熵
条件熵
互信息
KL散度
交叉熵
关系

参考

Footnotes

  1. Shannon, C.E. (1948). “A Mathematical Theory of Communication”. Bell System Technical Journal, 27(3), 379-423.