KL散度(Kullback-Leibler Divergence),又称相对熵,是信息论中的一个重要概念,用来衡量两个概率分布之间的差异。它通常用于描述一个分布 P P P 相对于另一个分布 Q Q Q 的信息损失。
KL散度的数学定义
对于离散概率分布
P
P
P 和
Q
Q
Q,KL散度定义为:
D
K
L
(
P
∣
∣
Q
)
=
∑
x
∈
X
P
(
x
)
log
P
(
x
)
Q
(
x
)
D_{KL}(P || Q) = \sum_{x \in X} P(x) \log\frac{P(x)}{Q(x)}
DKL(P∣∣Q)=x∈X∑P(x)logQ(x)P(x)
对于连续概率分布,则表示为积分形式:
D
K
L
(
P
∣
∣
Q
)
=
∫
−
∞
∞
P
(
x
)
log
P
(
x
)
Q
(
x
)
d
x
D_{KL}(P || Q) = \int_{-\infty}^{\infty} P(x) \log\frac{P(x)}{Q(x)} dx
DKL(P∣∣Q)=∫−∞∞P(x)logQ(x)P(x)dx
其中:
- P ( x ) P(x) P(x) 是真实分布(或目标分布)。
- Q ( x ) Q(x) Q(x) 是近似分布(或假设分布)。
- log P ( x ) Q ( x ) \log\frac{P(x)}{Q(x)} logQ(x)P(x) 是信息增益(信息量的差异)。
KL散度的单位取决于对数的底,例如以 e e e 为底时单位是nat,以 2 为底时单位是bit。
KL散度的直观理解
-
不对称性: D K L ( P ∣ ∣ Q ) ≠ D K L ( Q ∣ ∣ P ) D_{KL}(P || Q) \neq D_{KL}(Q || P) DKL(P∣∣Q)=DKL(Q∣∣P),因为它是从 P P P 的角度来测量 Q Q Q 的逼近程度。即, P P P 是参考分布, Q Q Q 是被评估的分布。
-
非负性:KL散度始终满足 D K L ( P ∣ ∣ Q ) ≥ 0 D_{KL}(P || Q) \geq 0 DKL(P∣∣Q)≥0,当且仅当 P = Q P = Q P=Q 时取等号。这可以通过Jensen不等式证明。
-
信息损失:KL散度描述了如果使用 Q Q Q 来替代 P P P,我们在信息上损失了多少。例如,在数据压缩中, P P P 是实际分布,而 Q Q Q 是我们假定的模型分布,KL散度告诉我们编码器因使用错误分布 Q Q Q 所造成的额外开销。
KL散度的推导依据
KL散度源自信息论中的交叉熵,交叉熵可以写为:
H
(
P
,
Q
)
=
−
∑
x
∈
X
P
(
x
)
log
Q
(
x
)
H(P, Q) = - \sum_{x \in X} P(x) \log Q(x)
H(P,Q)=−x∈X∑P(x)logQ(x)
交叉熵表示用
Q
Q
Q 来编码
P
P
P 的期望编码长度。真实分布
P
P
P 的熵为:
H
(
P
)
=
−
∑
x
∈
X
P
(
x
)
log
P
(
x
)
H(P) = - \sum_{x \in X} P(x) \log P(x)
H(P)=−x∈X∑P(x)logP(x)
两者的差值就是KL散度:
D
K
L
(
P
∣
∣
Q
)
=
H
(
P
,
Q
)
−
H
(
P
)
D_{KL}(P || Q) = H(P, Q) - H(P)
DKL(P∣∣Q)=H(P,Q)−H(P)
这个公式表示,KL散度是用分布 Q Q Q 替代真实分布 P P P 时的额外信息开销。
举例说明
假设我们有一个真实分布 P P P 和一个假设分布 Q Q Q:
- 真实分布
P
P
P:
- P ( x 1 ) = 0.8 , P ( x 2 ) = 0.2 P(x_1) = 0.8, P(x_2) = 0.2 P(x1)=0.8,P(x2)=0.2
- 假设分布
Q
Q
Q:
- Q ( x 1 ) = 0.5 , Q ( x 2 ) = 0.5 Q(x_1) = 0.5, Q(x_2) = 0.5 Q(x1)=0.5,Q(x2)=0.5
KL散度计算如下:
D
K
L
(
P
∣
∣
Q
)
=
∑
x
∈
{
x
1
,
x
2
}
P
(
x
)
log
P
(
x
)
Q
(
x
)
D_{KL}(P || Q) = \sum_{x \in \{x_1, x_2\}} P(x) \log\frac{P(x)}{Q(x)}
DKL(P∣∣Q)=x∈{x1,x2}∑P(x)logQ(x)P(x)
逐项计算:
D
K
L
(
P
∣
∣
Q
)
=
0.8
log
0.8
0.5
+
0.2
log
0.2
0.5
D_{KL}(P || Q) = 0.8 \log\frac{0.8}{0.5} + 0.2 \log\frac{0.2}{0.5}
DKL(P∣∣Q)=0.8log0.50.8+0.2log0.50.2
使用自然对数(底为
e
e
e):
D
K
L
(
P
∣
∣
Q
)
=
0.8
log
(
1.6
)
+
0.2
log
(
0.4
)
D_{KL}(P || Q) = 0.8 \log(1.6) + 0.2 \log(0.4)
DKL(P∣∣Q)=0.8log(1.6)+0.2log(0.4)
D
K
L
(
P
∣
∣
Q
)
≈
0.8
⋅
0.470
+
0.2
⋅
(
−
0.916
)
≈
0.376
D_{KL}(P || Q) \approx 0.8 \cdot 0.470 + 0.2 \cdot (-0.916) \approx 0.376
DKL(P∣∣Q)≈0.8⋅0.470+0.2⋅(−0.916)≈0.376
这表示在 P P P 和 Q Q Q 之间有约 0.376 nats 的信息差异。
实际应用
-
机器学习模型评估:
KL散度在神经网络和生成模型(如变分自编码器,VAE)中用于衡量模型分布与真实数据分布的差异。 -
概率分布近似:
在贝叶斯统计中,KL散度用于评估后验分布和近似分布之间的距离。 -
自然语言处理:
KL散度用于衡量语言模型的性能,特别是在文本生成或预测任务中。
结论
KL散度是概率分布比较的重要工具,它可以直观地衡量信息损失的大小,同时在许多机器学习和统计问题中有广泛应用。通过上述公式和例子,可以看到KL散度既具有严密的数学依据,也具有实际的应用意义。