KL divergence(KL 散度)详解

本文用一种浅显易懂的方式说明KL散度。
参考资料

KL散度本质上是比较两个分布的相似程度。

现在给出2个简单的离散分布,称为分布1和分布2.

分布1有3个样本,
其中A的概率为50%, B的概率为40%,C的概率为10%

分布2也有3个样本:
其中A的概率为50%,B的概率为10%,C的概率为40%。

现在想比较分布1和分布2的相似程度。

直观看上去分布1和分布2中样本A的概率是一样的,仅仅B和C的概率换了一下。
分布应该是相似的,但是如何量化来看呢。

可以这样做,用分布1的各个样本的概率和分布2样本概率做比值,相加再求平均。

现假设分布1的概率分布为P,分布2的概率分布为Q,
那么P(A) = 0.5, P(B)=0.4, P( C) = 0.1
Q(A) = 0.5, Q(B) = 0.1, Q( C) = 0.4,

各样本概率做比值之后为:
P(A)/Q(A) + P(B)/Q(B) + P( C)/Q( C) = 1+4+1/4
再对3个样本取平均: (1+4+1/4) / 3 = 1.75
这就是我们想要的分布1和分布2的相似度。

不过有一个问题,
可以看到P(B)和Q(B), P( C)和Q( C)仅仅概率做了交换,它们的相似度大小应该是一样的(仅仅方向不一样),
也就是说P(B)/Q(B), P( C)/Q( C)的绝对值应该是一样的,符号不一样。
但是现在,哪个分子大哪个结果就大,这是不应该的,

想要这样一个函数来解决这个问题,
f(4) = y
f(1/4) = -y,
这里的4为P(B)/Q(B), 1/4为P( C)/Q( C),
经过f(x)后得到的应该是同样的相似度大小,只是方向不一样,一个是变大的方向,一个是变小的方向,用负号表示方向的不同。

那么什么样的函数能满足f(x)呢,
可以取几个值画一下,你会发现,这个f(x)就是log(x)。

那么现在把刚才的相似度修改一下,
把简单的P(x)/Q(x)换成log(P(x) / Q(x)).
于是变为: ∑ 1 n l o g P ( x ) Q ( x ) / n \sum_{1}^{n} log\frac{P(x)}{Q(x)} / n 1nlogQ(x)P(x)/n

对样本取平均值表示每个样本的weight都是1/n,
不要取这么平均,把weight改为P(x),

那么就得到 ∑ 1 n P ( x ) l o g P ( x ) Q ( x ) \sum_{1}^{n} P(x) log\frac{P(x)}{Q(x)} 1nP(x)logQ(x)P(x)

这就是我们熟悉的KL散度,它比较的是分布P和分布Q的相似度。
“||”右边的Q表示是reference分布。

K L ( P ∣ ∣ Q ) = ∑ 1 n P ( x ) l o g P ( x ) Q ( x ) KL(P||Q) = \sum_{1}^{n} P(x) log\frac{P(x)}{Q(x)} KL(P∣∣Q)=1nP(x)logQ(x)P(x)

<think>好的,用户想了解KL的概念、计算方法和应用。首先,我需要回忆KL的基本定义。KL是信息论中的一个概念,用来衡量两个概率分布之间的差异。记得它的公式是$D_{KL}(P || Q) = \sum P(x) \log \frac{P(x)}{Q(x)}$,或者对于连续分布是积分形式。 接下来要解释清楚KL的非对称性,也就是$D_{KL}(P||Q) \neq D_{KL}(Q||P)$,这一点很重要,用户可能会混淆。需要举例说明,比如用两个不同的正态分布来计算,结果不同。 然后是计算方法,可能需要分离和连续两种情况来说明。例如,对于离分布,可以举一个简单的例子,比如两个概率分布P和Q的具体数值,一步步计算KL。对于连续的情况,可能需要提到积分,但实际应用中可能用数值方法或者蒙特卡洛积分来近似。 应用方面,用户提到了知识蒸馏,所以得结合引用[4]的内容,说明在大型语言模型的知识蒸馏中,KL如何用来衡量教师模型和学生模型输出的分布差异。此外,其他应用比如变分自编码器(VAE)、生成对抗网络(GAN)、模型选择等也需要提及,这样回答会更全面。 还要注意用户提供的参考文献,特别是引用[1]、[2]、[3]、[4],在适当的地方加入引用标识。比如在定义时引用[2][3],在知识蒸馏部分引用[4],在不等式部分引用[1]提到的Jensen不等式。 需要检查公式的LaTeX格式是否正确,所有行内公式用$...$,独立公式用$$...$$,并且单独成段。例如,定义KL的公式应该用独立公式块。 用户可能还会关心KL的性质,比如非负性,当且仅当两个分布相同时为零。这部分需要结合Jensen不等式来说明,引用[1]提到的Jensen不等式在这里适用。 最后,生成的相关问题需要围绕KL的扩展,比如与其他的对比、实际应用的代码示例、在深学习中的具体使用以及非对称性的影响等。这样可以帮助用户进一步深入学习。 需要确保整个回答结构清晰,先讲概念,再讲计算,接着应用,最后相关问题。语言要简洁明了,用中文,避免术语堆砌,适当举例说明。</think>### Kullback-LeiblerKL详解 #### 1. **概念与定义** KL(Kullback-Leibler Divergence)是衡量两个概率分布$P$和$Q$差异的非对称性指标[^2][^3]。其定义为: $$D_{KL}(P \parallel Q) = \sum_{x \in \mathcal{X}} P(x) \log \frac{P(x)}{Q(x)} \quad (\text{离分布})$$ 或 $$D_{KL}(P \parallel Q) = \int_{-\infty}^{\infty} P(x) \log \frac{P(x)}{Q(x)} dx \quad (\text{连续分布})$$ **关键性质**: - **非对称性**:$D_{KL}(P \parallel Q) \neq D_{KL}(Q \parallel P)$。 - **非负性**:$D_{KL}(P \parallel Q) \geq 0$,当且仅当$P=Q$时等号成立(由Jensen不等式推导)[^1][^2]。 --- #### 2. **计算方法** **离分布示例**: 假设分布$P$和$Q$如下: $$P = [0.2, 0.5, 0.3], \quad Q = [0.3, 0.4, 0.3]$$ 计算$D_{KL}(P \parallel Q)$: $$ \begin{align*} D_{KL}(P \parallel Q) &= 0.2 \log \frac{0.2}{0.3} + 0.5 \log \frac{0.5}{0.4} + 0.3 \log \frac{0.3}{0.3} \\ &= 0.2 \cdot (-0.405) + 0.5 \cdot 0.223 + 0.3 \cdot 0 \approx 0.0109 \end{align*} $$ **连续分布示例**: 若$P \sim \mathcal{N}(\mu_1, \sigma^2)$和$Q \sim \mathcal{N}(\mu_2, \sigma^2)$,则: $$D_{KL}(P \parallel Q) = \frac{(\mu_1 - \mu_2)^2}{2\sigma^2}$$ --- #### 3. **应用场景** 1. **知识蒸馏**: 在大型语言模型(LLM)中,KL用于衡量教师模型与学生模型输出分布的差异,从而优化学生模型的训练[^4]。 2. **变分推断**: 在变分自编码器(VAE)中,KL作为正则项,约束隐变量分布接近先验分布。 3. **模型选择**: 通过比较模型预测分布与真实分布的KL,评估模型拟合质量。 4. **信息检索**: 衡量文档与查询的相关性时,使用KL优化排序算法。 --- #### 4. **与其他指标对比** | 指标 | 对称性 | 适用范围 | 计算复杂 | |---------------|--------|------------------|------------| | KL | 否 | 概率分布差异 | 低 | | JS | 是 | 分布相似性 | 中等 | | Wasserstein距离| 是 | 支持集不重叠分布 | 高 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值