KL散度改写为一个可用于优化的形式
理解 KL 散度及其公式推导过程
在信息论和概率论中,KL散度(Kullback-Leibler Divergence)是衡量两个概率分布之间差异的重要工具。本文将从 KL 散度的定义入手,详细解析其公式来源以及如何将其改写为一个可用于优化的形式。
1. 什么是 KL 散度?
KL 散度是一个非对称的测度,用来衡量一个概率分布 ( p ( x ) p(x) p(x)) 与另一个近似分布 ( q ( x ) q(x) q(x)) 之间的距离。其数学定义为:
D K L ( p ∣ ∣ q ) = ∫ p ( x ) ln p ( x ) q ( x ) d x D_{KL}(p || q) = \int p(x) \ln \frac{p(x)}{q(x)} dx DKL(p∣∣q)=∫p(x)lnq(x)p(x)dx
各符号含义:
- ( p ( x ) p(x) p(x)):目标分布(通常是数据生成的真实分布)。
- ( q ( x ) q(x) q(x)):近似分布(通常是由模型参数 ( θ \theta θ) 决定的分布)。
- ( D K L ( p ∣ ∣ q ) D_{KL}(p || q) DKL(p∣∣q)):衡量 ( p ( x ) p(x) p(x)) 和 ( q ( x ) q(x) q(x)) 差异的值,越接近零表示两个分布越相似。
KL 散度具有以下性质:
- 非负性:( D K L ( p ∣ ∣ q ) ≥ 0 D_{KL}(p || q) \geq 0 DKL(p∣∣q)≥0),只有当 ( p ( x ) = q ( x ) p(x) = q(x) p(x)=q(x)) 时取等号。
- 非对称性:( 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))。
直观理解:
KL 散度可以理解为在分布 ( q ( x ) q(x) q(x)) 下编码 ( p ( x ) p(x) p(x)) 数据的额外开销。它回答了这样一个问题:“如果我们用 ( q ( x ) q(x) q(x)) 来近似 ( p ( x ) p(x) p(x)),会带来多大的信息损失?”
2. KL 散度的分解形式
我们可以将 KL 散度公式展开为以下形式:
D K L ( p ∣ ∣ q ) = ∫ p ( x ) ln p ( x ) d x − ∫ p ( x ) ln q ( x ) d x D_{KL}(p || q) = \int p(x) \ln p(x) dx - \int p(x) \ln q(x) dx DKL(p∣∣q)=∫p(x)lnp(x)dx−∫p(x)lnq(x)dx
两部分含义:
-
第一项:( ∫ p ( x ) ln p ( x ) d x \int p(x) \ln p(x) dx ∫p(x)lnp(x)dx)
- 表示分布 ( p ( x ) p(x) p(x)) 的熵,是一个与 ( q ( x ) q(x) q(x)) 无关的常数。
- 在优化过程中可以忽略,因为它对参数 ( θ \theta θ) 不产生影响。
-
第二项:( − ∫ p ( x ) ln q ( x ) d x -\int p(x) \ln q(x) dx −∫p(x)lnq(x)dx)
- 这一项描述了分布 ( q ( x ) q(x) q(x)) 对目标分布 ( p ( x ) p(x) p(x)) 的拟合程度,是我们关注的重点。
3. 样本均值近似的引入
在实际问题中,我们通常无法直接获得目标分布 ( p ( x ) p(x) p(x)),而是通过有限的训练样本 ( D = { x 1 , x 2 , … , x N } D = \{x_1, x_2, \ldots, x_N\} D={x1,x2,…,xN}) 来对 ( p ( x ) p(x) p(x)) 进行估计。因此,KL 散度公式中的期望 ( ∫ p ( x ) f ( x ) d x \int p(x) f(x) dx ∫p(x)f(x)dx) 可以通过样本均值进行近似:
∫ p ( x ) ln q ( x ) d x ≈ 1 N ∑ i = 1 N ln q ( x i ∣ θ ) \int p(x) \ln q(x) dx \approx \frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) ∫p(x)lnq(x)dx≈N1i=1∑Nlnq(xi∣θ)
这里:
- ( N N N):训练样本的数量。
- ( { x 1 , x 2 , … , x N } \{x_1, x_2, \ldots, x_N\} {x1,x2,…,xN}):从分布 ( p ( x ) p(x) p(x)) 中采样得到的独立同分布数据。
将上述近似代入 KL 散度公式,得到:
D K L ( p ∣ ∣ q ) ≈ − 1 N ∑ i = 1 N ln q ( x i ∣ θ ) + 常数项 D_{KL}(p || q) \approx -\frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) + \text{常数项} DKL(p∣∣q)≈−N1i=1∑Nlnq(xi∣θ)+常数项
4. 忽略常数项后的优化目标
由于第一项 ( ∫ p ( x ) ln p ( x ) d x \int p(x) \ln p(x) dx ∫p(x)lnp(x)dx) 是与参数 ( θ \theta θ) 无关的常数项,在优化过程中可以忽略。因此,KL 散度的优化目标最终简化为:
优化目标 = − 1 N ∑ i = 1 N ln q ( x i ∣ θ ) \text{优化目标} = -\frac{1}{N} \sum_{i=1}^N \ln q(x_i|\theta) 优化目标=−N1i=1∑Nlnq(xi∣θ)
理解优化目标:
- 这实际上是 负对数似然函数(Negative Log-Likelihood, NLL),即用模型分布 ( q ( x ∣ θ ) q(x|\theta) q(x∣θ)) 拟合训练样本的目标。
为了方便表达,加入一项 ( 1 N ∑ i = 1 N ln p ( x i ) \frac{1}{N} \sum_{i=1}^N \ln p(x_i) N1∑i=1Nlnp(xi)),使得最终结果变为:
D K L ( p ∣ ∣ q ) ≈ 1 N ∑ i = 1 N { − ln q ( x i ∣ θ ) + ln p ( x i ) } D_{KL}(p || q) \approx \frac{1}{N} \sum_{i=1}^N \{-\ln q(x_i|\theta) + \ln p(x_i)\} DKL(p∣∣q)≈N1i=1∑N{−lnq(xi∣θ)+lnp(xi)}
5. 总结与意义
通过以上分析,我们将 KL 散度公式从理论形式逐步推导为一个可以应用于机器学习模型训练的形式。关键步骤包括:
- 利用训练样本的经验分布对积分项进行近似;
- 忽略与参数无关的常数项,聚焦于对分布 ( q ( x ∣ θ q(x|\theta q(x∣θ)) 的优化。
最终的形式表明:最小化 KL 散度实际上等同于最大化模型的对数似然函数(MLE)。
KL 散度的这一性质广泛应用于生成模型(如变分自编码器 VAE)和深度学习优化中,帮助我们更好地逼近目标分布。
6. 代码实现示例
我们还可以通过代码展示如何在实际中实现 KL 散度的计算:
import numpy as np# 假设目标分布 p 和近似分布 q
p = np.array([0.2, 0.5, 0.3]) # 目标分布
q = np.array([0.3, 0.4, 0.3]) # 近似分布# 计算 KL 散度
kl_divergence = np.sum(p * np.log(p / q))
print(f"KL散度: {kl_divergence:.4f}")
运行结果可以帮助我们直观理解 KL 散度的计算和其在概率分布拟合中的重要性。
希望这篇文章对你理解 KL 散度的公式推导过程有所帮助。
后记
2024年11月27日15点32分于上海。