KL散度的推导
KL散度(Kullback-Leibler Divergence)是信息论和机器学习中一个非常核心的概念,用来衡量一个概率分布与另一个参考概率分布之间的差异。
我们一步步从直觉到公式来推导它。
1. 从“信息量”出发
首先,我们考虑一个事件 $ x $ 发生时所包含的信息量。一个事件发生的概率 $ P(x) $ 越小,当它发生时带来的惊讶程度和信息量就越大。
信息量 $ h(x) $ 的定义为:
\(
h(x) = -\log P(x)
\)
这里对数底通常取2(单位比特)或e(单位奈特),我们后续用自然对数 \(\ln\)。
2. 引入“熵”:编码一个分布所需的最短平均长度
如果我们有一个概率分布 $ P(x) $,我们要用最优的编码方式(基于概率分配)来编码来自这个分布的事件,平均每个事件需要的最短编码长度就是信息熵 $ H(P) $:
\(
H(P) = \mathbb{E}_{x \sim P}[-\log P(x)] = -\sum_x P(x) \log P(x)
\)
(对连续变量则把求和换成积分)
熵是编码来自 $ P $ 的数据时,理论上能达到的最小平均码长。
3. 如果用错误的分布去编码
现在关键点来了:如果我们错误地认为数据服从分布 $ Q(x) $,并基于 $ Q $ 来设计编码(即每个事件的码长设为 $ -\log Q(x) $),但实际上数据是从真实分布 $ P(x) $ 中生成的。
那么,真实数据(来自 $ P $)在此编码下的平均码长就是交叉熵 $ H(P, Q) $:
\( H(P, Q) = \mathbb{E}_{x \sim P}[-\log Q(x)] = -\sum_x P(x) \log Q(x) \)
4. 额外付出的代价——这就是KL散度
由于 $ Q $ 不是最优的编码,用 $ Q $ 编码的平均长度 $ H(P, Q) $ 一定大于或等于用真实分布 $ P $ 编码的最优长度 $ H(P) $。
这个额外多出来的平均编码长度,就定义为KL散度:
\( D_{KL}(P \parallel Q) = H(P, Q) - H(P) \)
代入前面的公式:
\( D_{KL}(P \parallel Q) = \left[-\sum_x P(x) \log Q(x)\right] - \left[-\sum_x P(x) \log P(x)\right] \)
化简,得到最终形式:
\( \boxed{D_{KL}(P \parallel Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}} \)
或者对于连续分布:
\( D_{KL}(P \parallel Q) = \int p(x) \log \frac{p(x)}{q(x)} dx \)
5. 关键性质(由推导自然得出)
- 非负性:由吉布斯不等式可知,$ D_{KL} \ge 0 $,等号当且仅当 $ P = Q $ 几乎处处成立。这从“额外码长不可能为负”也很好理解。
- 不对称性:注意 $ D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P) $。因为它是用 $ Q $ 编码 $ P $ 的额外损失,方向很重要(在机器学习中,这决定了是用 $ Q $ 去逼近 $ P $,还是反过来)。
6. 一个直观小例子
假设一个公平硬币(\(P(正)=0.5, P(反)=0.5\)),但你误以为是不公平硬币(\(Q(正)=0.8, Q(反)=0.2\))。
- 最优平均码长(熵):$ H(P) = -0.5\log0.5 - 0.5\log0.5 = 1 $ 比特
- 用错误分布编码的平均长度(交叉熵):$ H(P,Q) = -0.5\log0.8 - 0.5\log0.2 \approx 1.16 $ 比特
- KL散度:$ 1.16 - 1 = 0.16 $ 比特,这就是你因误判而浪费的平均编码长度。

浙公网安备 33010602011771号