来自chatgpt

KL散度(Kullback-Leibler Divergence)

1. 简介

KL散度是用来衡量两个概率分布之间差异的一种方法,描述了用一个分布近似另一个分布时所损失的信息。它在信息论、机器学习、贝叶斯推断、变分推理等领域有广泛应用。

KL散度不是对称的,因此不是严格意义上的“距离”,但可以理解为一种“从一个分布到另一个分布的相对熵”。


2. 数学定义

P(x)P(x)Q(x)Q(x) 是定义在同一支持集上的两个概率分布,KL散度定义如下:

离散形式:

DKL(PQ)=xP(x)logP(x)Q(x)D_{\text{KL}}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}

连续形式:

DKL(PQ)=P(x)logP(x)Q(x)dxD_{\text{KL}}(P \parallel Q) = \int P(x) \log \frac{P(x)}{Q(x)} \, dx

这里:

  • P(x)P(x) 是“真实分布”或“目标分布”;
  • Q(x)Q(x) 是“近似分布”或“模型分布”。

3. 信息论视角理解

KL散度可以理解为:

如果用分布 QQ 来近似分布 PP,那么在信息论意义上,我们每次采样所“浪费”的额外比特数是多少?

换句话说,KL散度是从 PP 分布采样时,采用 QQ 进行编码所需的冗余信息量。

在信息论中,如果某个事件 xx 的真实概率为 P(x)P(x),那么最优的编码长度是:

L(x)=log2P(x)L(x) = -\log_2 P(x)

这个长度代表使用最优编码压缩一个事件时所需的比特数。

我们设想一个抛硬币实验:

严重偏置的硬币的真实分布 PP

  • P(H)=0.9P(H) = 0.9
  • P(T)=0.1P(T) = 0.1

我们错误地以为这是一个公平硬币近似分布 QQ(编码时错误使用):

  • Q(H)=0.5Q(H) = 0.5
  • Q(T)=0.5Q(T) = 0.5

🧮 使用 PP 的最优编码

PP 的概率计算编码长度(单位为比特):

  • LP(H)=log2(0.9)0.152L_P(H) = -\log_2(0.9) \approx 0.152
  • LP(T)=log2(0.1)3.322L_P(T) = -\log_2(0.1) \approx 3.322

期望编码长度为:

ExP[LP(x)]=0.90.152+0.13.3220.47 bits\mathbb{E}_{x \sim P}[L_P(x)] = 0.9 \cdot 0.152 + 0.1 \cdot 3.322 \approx 0.47 \text{ bits}

📦 错误使用 QQ 进行编码

使用 QQ 编码(即误判为公平硬币):

  • LQ(H)=log2(0.5)=1L_Q(H) = -\log_2(0.5) = 1
  • LQ(T)=log2(0.5)=1L_Q(T) = -\log_2(0.5) = 1

期望编码长度为:

ExP[LQ(x)]=0.91+0.11=1.0 bits\mathbb{E}_{x \sim P}[L_Q(x)] = 0.9 \cdot 1 + 0.1 \cdot 1 = 1.0 \text{ bits}

📏 KL散度计算

DKL(PQ)=0.9log20.90.5+0.1log20.10.5D_{\text{KL}}(P \parallel Q) = 0.9 \cdot \log_2 \frac{0.9}{0.5} + 0.1 \cdot \log_2 \frac{0.1}{0.5}

计算得:

  • log2(0.9/0.5)0.847\log_2(0.9/0.5) \approx 0.847
  • log2(0.1/0.5)2.322\log_2(0.1/0.5) \approx -2.322

因此:

DKL(PQ)0.90.847+0.1(2.322)=0.7620.232=0.53 bitsD_{\text{KL}}(P \parallel Q) \approx 0.9 \cdot 0.847 + 0.1 \cdot (-2.322) = 0.762 - 0.232 = 0.53 \text{ bits}

✅ 结论

  • 最优编码期望长度为:0.47 bits
  • 错误编码期望长度为:1.00 bits
  • 差值正好为 KL 散度:0.53 bits

KL散度告诉我们:使用 QQ 编码 PP 的数据时,每个样本平均多浪费 0.53 个比特。

4. 示例:两个高斯分布之间的KL散度

设:

  • P=N(μ0,σ02)P = \mathcal{N}(\mu_0, \sigma_0^2)
  • Q=N(μ1,σ12)Q = \mathcal{N}(\mu_1, \sigma_1^2)

那么有解析表达式:

DKL(PQ)=logσ1σ0+σ02+(μ0μ1)22σ1212D_{\text{KL}}(P \parallel Q) = \log \frac{\sigma_1}{\sigma_0} + \frac{\sigma_0^2 + (\mu_0 - \mu_1)^2}{2\sigma_1^2} - \frac{1}{2}

5. KL散度的性质

  • 非负性:

    DKL(PQ)0D_{\text{KL}}(P \parallel Q) \geq 0

    等号成立当且仅当 P=QP = Q 几乎处处相等。

  • 非对称性:

    DKL(PQ)DKL(QP)D_{\text{KL}}(P \parallel Q) \ne D_{\text{KL}}(Q \parallel P)

    所以要注意方向性:从哪个分布到哪个分布。

  • 不满足三角不等式:不能作为真正的“距离度量”。

6. 应用场景

  • 变分推断(Variational Inference):最小化近似后验 Q(z)Q(z) 与真实后验 P(zx)P(z|x) 之间的KL散度。
  • 信息论:衡量编码策略的最优性。
  • 生成模型(如VAE):作为正则项,使得潜在变量分布接近先验。
  • 强化学习:在策略优化中用于约束策略的更新幅度。

7. 与交叉熵的关系

交叉熵定义为:

H(P,Q)=xP(x)logQ(x)H(P, Q) = - \sum_x P(x) \log Q(x)

而熵为:

H(P)=xP(x)logP(x)H(P) = - \sum_x P(x) \log P(x)

KL散度可以表示为:

DKL(PQ)=H(P,Q)H(P)D_{\text{KL}}(P \parallel Q) = H(P, Q) - H(P)

即:KL散度 = 交叉熵 - 熵。

8. 可视化理解

如果将 P(x)P(x)Q(x)Q(x) 可视化为曲线,则 KL散度大的区域是:

  • P(x)P(x) 大、而 Q(x)Q(x) 小的地方(代价高);
  • Q(x)Q(x) 大、而 P(x)P(x) 小则“宽容”,因为KL散度不是对称的。

9. 对称替代指标

由于 KL 散度不对称,实际应用中也常使用其对称版本,如:

  • Jensen-Shannon 散度(JS Divergence)

    DJS(P,Q)=12DKL(PM)+12DKL(QM)D_{\text{JS}}(P, Q) = \frac{1}{2} D_{\text{KL}}(P \parallel M) + \frac{1}{2} D_{\text{KL}}(Q \parallel M)

    其中 M=12(P+Q)M = \frac{1}{2}(P + Q)

  • Total Variation DistanceWasserstein Distance 等也是常见替代。

11. 总结

KL散度是度量两个概率分布之间差异的核心工具,尤其在涉及“近似分布”时尤为重要。需要注意其方向性和非对称性,适用于以一个分布为“目标”的优化问题。