来自chatgpt
KL散度(Kullback-Leibler Divergence)
1. 简介
KL散度是用来衡量两个概率分布之间差异的一种方法,描述了用一个分布近似另一个分布时所损失的信息。它在信息论、机器学习、贝叶斯推断、变分推理等领域有广泛应用。
KL散度不是对称的,因此不是严格意义上的“距离”,但可以理解为一种“从一个分布到另一个分布的相对熵”。
2. 数学定义
设 P(x) 和 Q(x) 是定义在同一支持集上的两个概率分布,KL散度定义如下:
离散形式:
DKL(P∥Q)=x∑P(x)logQ(x)P(x)
连续形式:
DKL(P∥Q)=∫P(x)logQ(x)P(x)dx
这里:
- P(x) 是“真实分布”或“目标分布”;
- Q(x) 是“近似分布”或“模型分布”。
3. 信息论视角理解
KL散度可以理解为:
如果用分布 Q 来近似分布 P,那么在信息论意义上,我们每次采样所“浪费”的额外比特数是多少?
换句话说,KL散度是从 P 分布采样时,采用 Q 进行编码所需的冗余信息量。
在信息论中,如果某个事件 x 的真实概率为 P(x),那么最优的编码长度是:
L(x)=−log2P(x)
这个长度代表使用最优编码压缩一个事件时所需的比特数。
我们设想一个抛硬币实验:
严重偏置的硬币的真实分布 P:
- P(H)=0.9
- P(T)=0.1
我们错误地以为这是一个公平硬币近似分布 Q(编码时错误使用):
- Q(H)=0.5
- Q(T)=0.5
🧮 使用 P 的最优编码
用 P 的概率计算编码长度(单位为比特):
- LP(H)=−log2(0.9)≈0.152
- LP(T)=−log2(0.1)≈3.322
期望编码长度为:
Ex∼P[LP(x)]=0.9⋅0.152+0.1⋅3.322≈0.47 bits
📦 错误使用 Q 进行编码
使用 Q 编码(即误判为公平硬币):
- LQ(H)=−log2(0.5)=1
- LQ(T)=−log2(0.5)=1
期望编码长度为:
Ex∼P[LQ(x)]=0.9⋅1+0.1⋅1=1.0 bits
📏 KL散度计算
DKL(P∥Q)=0.9⋅log20.50.9+0.1⋅log20.50.1
计算得:
- log2(0.9/0.5)≈0.847
- log2(0.1/0.5)≈−2.322
因此:
DKL(P∥Q)≈0.9⋅0.847+0.1⋅(−2.322)=0.762−0.232=0.53 bits
✅ 结论
- 最优编码期望长度为:0.47 bits
- 错误编码期望长度为:1.00 bits
- 差值正好为 KL 散度:0.53 bits
KL散度告诉我们:使用 Q 编码 P 的数据时,每个样本平均多浪费 0.53 个比特。
4. 示例:两个高斯分布之间的KL散度
设:
- P=N(μ0,σ02)
- Q=N(μ1,σ12)
那么有解析表达式:
DKL(P∥Q)=logσ0σ1+2σ12σ02+(μ0−μ1)2−21
5. KL散度的性质
-
非负性:
DKL(P∥Q)≥0
等号成立当且仅当 P=Q 几乎处处相等。
-
非对称性:
DKL(P∥Q)=DKL(Q∥P)
所以要注意方向性:从哪个分布到哪个分布。
-
不满足三角不等式:不能作为真正的“距离度量”。
6. 应用场景
- 变分推断(Variational Inference):最小化近似后验 Q(z) 与真实后验 P(z∣x) 之间的KL散度。
- 信息论:衡量编码策略的最优性。
- 生成模型(如VAE):作为正则项,使得潜在变量分布接近先验。
- 强化学习:在策略优化中用于约束策略的更新幅度。
7. 与交叉熵的关系
交叉熵定义为:
H(P,Q)=−x∑P(x)logQ(x)
而熵为:
H(P)=−x∑P(x)logP(x)
KL散度可以表示为:
DKL(P∥Q)=H(P,Q)−H(P)
即:KL散度 = 交叉熵 - 熵。
8. 可视化理解
如果将 P(x) 和 Q(x) 可视化为曲线,则 KL散度大的区域是:
- P(x) 大、而 Q(x) 小的地方(代价高);
- Q(x) 大、而 P(x) 小则“宽容”,因为KL散度不是对称的。
9. 对称替代指标
由于 KL 散度不对称,实际应用中也常使用其对称版本,如:
-
Jensen-Shannon 散度(JS Divergence):
DJS(P,Q)=21DKL(P∥M)+21DKL(Q∥M)
其中 M=21(P+Q)
-
Total Variation Distance、Wasserstein Distance 等也是常见替代。
11. 总结
KL散度是度量两个概率分布之间差异的核心工具,尤其在涉及“近似分布”时尤为重要。需要注意其方向性和非对称性,适用于以一个分布为“目标”的优化问题。