KL 散度(Kullback-Leibler Divergence)衡量两个概率分布差异,是信息论和机器学习的核心概念。

数学定义

离散分布

连续分布

核心性质

性质说明
非负性,当且仅当 时等于 0
不对称性
信息解释 近似 时损失的信息量

原理推导

其中 是熵, 是交叉熵。

应用场景

领域应用
变分推断变分下界目标函数
生成模型GAN、VAE 评估生成分布与真实分布差异
强化学习策略优化中限制更新幅度

代码实现

import numpy as np
 
def kl_divergence(p, q):
    p = np.asarray(p, dtype=np.float64)
    q = np.asarray(q, dtype=np.float64)
    return np.sum(np.where(p != 0, p * np.log(p / q), 0))
 
P = [0.1, 0.4, 0.5]
Q = [0.2, 0.3, 0.5]
print(kl_divergence(P, Q))

实践经验

  1. 数值稳定性:添加小常数避免除零
  2. 对称化处理:使用 Jensen-Shannon 散度
  3. 分布归一化:确保输入为有效概率分布

相关度量

度量公式
Jensen-Shannon 散度
Rényi 散度