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))实践经验
- 数值稳定性:添加小常数避免除零
- 对称化处理:使用 Jensen-Shannon 散度
- 分布归一化:确保输入为有效概率分布
相关度量
| 度量 | 公式 |
|---|---|
| Jensen-Shannon 散度 | |
| Rényi 散度 |