直观解读KL散度的数学概念

本文通过一个太空蠕虫牙齿数量统计的实例,详细介绍了如何利用KL散度来衡量两种概率分布之间的相似度。通过对比均匀分布与二项分布,揭示了在特定场景下,简单分布可能比复杂分布更接近实际情况。

机器学习是当前最重要的技术发展方向之一。

基本概念

分布:

分布可能指代不同的东西,比如数据分布或概率分布。我们这里所涉及的是概率分布,假设你在一张纸上画了两个轴(X,Y),我们可以将一个分布想成是落在这两根轴之间的一条线。其中,X表示你有兴趣获取概率的不同值。Y表示观察X轴上的值所得到的概率。即y=p(x)。下图即使某分布的可视化。

这是一个连续分布。比如,我们可以将X轴看成是人的身高,Y轴是找到对应身高的人的概率。

如果你想知道离散的概率分布,你可以将这条线分成固定长度的片段并以某种方式将这些片段水平化。然后就能分局这条线的每个片段创建边缘互相连接的矩形。这就得到一个离散概率分布。

事件

对于离散概率分布而言,事件是指观测到X取某个值(比如X=1)的情况。我们将时间X=1的概率记为P(X=1)。在连续空间中,你可以将其看做是一个取值范围(比如0.95<X<1.05),注意,事件的定义并不局限于在X轴上取值。后面会考虑这种情况。

回到KL散度

我们要解决的问题:

假设我们是一组正在太空中进行研究的科学家,我们发现了一些太空蠕虫,这些蠕虫的牙齿数量各不相同。现在需要将这些信息发回地球。但从太空向地球发送信息的成本很高,所以我们需要用尽量少的数据表达这些信息。我们又个好方法:不发送单个数值,而是绘制一张图表,其中X轴表示所观察到的不同牙齿数量(0,1,2…),Y 轴是看到太空蠕虫具有x颗牙齿的概率(即具有x颗牙齿的蠕虫数量/蠕虫总数量)。这样就将观察结果转换成了分布。

发送分布比发送每只蠕虫的信息更高效。但我们还能进一步压缩数据大小。我们可以用一个已知的分布来表示这个分布(比如均匀分布、二项分布、正态分布)。举个栗子,假如我们用均匀分布来表示真实分布,我们只需要发送两段数据就能恢复真实数据;均匀概率和蠕虫数量。但我们怎样才能知道那种分布能更好的解释真实分布呢?这就是KL散度的用武之地。

直观解释:KL散度是一种衡量两个分布(比如两条线)之间的匹配程度的方法。

下面对示例进行一点修改

为了能够检查数值的正确性,让我们将概率值修改成对人类更友好的值。假设如下:假设有100只蠕虫,各种牙齿数的蠕虫的数量统计结果如下。

0 颗牙齿:2(概率:p_0 = 0.02)

1 颗牙齿:3(概率:p_1 = 0.03)

2 颗牙齿:5(概率:p_2 = 0.05)

3 颗牙齿:14(概率:p_3 = 0.14

4 颗牙齿:16(概率:p_4 = 0.16)

5 颗牙齿:15(概率:p_5 = 0.15)

6 颗牙齿:12(概率:p_6 = 0.12)

7 颗牙齿:8(概率:p_7 = 0.08)

8 颗牙齿:10(概率:p_8 = 0.1)

9 颗牙齿:8(概率:p_9 = 0.08)

10 颗牙齿:7(概率:p_10 = 0.07)

 快速做一次完整性检查,确保蠕虫总数为100,且概率总和为1.0.

  • 蠕虫总数 = 2+3+5+14+16+15+12+8+10+8+7 = 100

  • 概率总和 = 0.02+0.03+0.05+0.14+0.16+0.15+0.12+0.08+0.1+0.08+0.07 = 1.0

可视化结果为:

尝试1:使用均匀分布模型

我们首先使用均匀分布来建模该分布。均匀分布只有一个参数:均匀概率;即给定事件发生的概率。

均匀分布和我们的真实分布对比:

先不讨论这个结果,我们再用另一种分布来建模真实分布。

尝试2:使用二项分布建模

你可能计算过抛硬币正面或背面向上的概率,这就是一种二项分布概率。我们可以将同样的概念延展到我们的问题上。对于有两个可能输出的硬币,我们假设硬币正面向上的概率为p,并且进行了n次尝试,那么其中成功k次的概率为:

公式解读:这里说明一下,二项分布中每一项的含义。第一项是p^k。我们想成功 k 次,其中单次成功的概率为p;那么成功k的概率为p^k。另外要记住我们进行了n次尝试。因此,其中失败的次数为n-k,对应失败的概率为 (1-p)。所以成功k次的概率即为联合概率。在n次尝试中,k次成功会有不同的排列方式。在数量为n的空间中k个元素的不同排列数量为将所有这些项相乘就得到了成功k次的二项分布。

二项分布的均值和方差

我们还可以定义二项分布的均值和方差

均值= np

方差= np(1-p)

均值是指进行n次尝试时的期望(平均)成功次数。如果每次尝试成功的概率为p,那么可以说n次尝试的成功次数为np。

方差假设n=1,那么等式就成了「方差= p(1-p)」。那么当p=0.5时(正面和背面向上的概率一样),方差最大;当p=1或p=0时(智能得到正面或背面中的一种),方差最小。

回来继续建模

现在我们已经理解了二项分布,接下来回到我们之前的问题。首先让我们计算蠕虫的牙齿的期望数量:

0.02*0+1*0.03+2*0.05+3*0.14+4*0.16+5*0.15+6*0.12+7*0.08+8*0.1+9*0.08+10*0.07=5.44

有了均值,我们可以计算 p 的值:

均值 = np

5.44 = 10p

p = 0.544

注意,这里的n是指在蠕虫中观察到的最大牙齿数。你可能会问我么为什么不把蠕虫总数或事件数设为n。我们很快就将看到原因。有了而这些数据,可以按照如下方式定义任意牙齿数的概率。

鉴于牙齿数的取值最大为10,那么看见k颗牙齿的概率是多少(这里看见一颗牙齿即为一次成功尝试)?

从抛硬币的角度来看,这就类似于:

假设我抛10次硬币,观察到k次正面朝上的概率是多少?

从形式上将,我们可以计算所有不同k值的概率。其中k是我们希望观测到的牙齿数量。是第k个牙齿数量位置(即 0 颗牙齿、1 颗牙齿……)的二项概率。所以,计算结果如下:

我们的真实分布和二项分布的比较如下:

总结已有情况

现在回头看看我们已经完成的工作。首先,我们理解了我们想要解决的问题。我们的问题是将待定类型的太空蠕虫的牙齿数据统计用尽量小的数据发回地球。为此,我们想到用某给已知分布来表示真实的蠕虫统计数据,这样我们就可以只发送该分布的参数,而无需发送真实统计数据。我们检查了两种类型的分布,得到了以下结果。

  • 均匀分布——概率为 0.0909

  • 二项分布——n=10、p=0.544,k 取值在 0 到 10 之间。

让我们在同一个地方可视化这三个分布

我们如何定量地确定那份分布更好?

经过这些计算之后我们小一种衡量每个近似分布与真实分布之间匹配程度的方法。这很重要,这样当我们发送信息时,我们才无需担忧「我是否选择对了?」毕竟太空蠕虫关乎我们每个人的生命。

这就是KL散度的用武之地。KL散度在形式上定义如下:

其中q(x)是近似分布,p(x)是我们想要用q(x)匹配的真实分布。直观的说,这衡量的是给定任意分布偏离真实分布的程度。如果两个分布完全匹配,那么,否则它的取值因该是0到无穷大(inf)之间。KL散度越小,真实分布与近似分布之间的匹配就越好。

KL 散度的直观解释

让我们看看KL散度各个部分的含义。首先看看项。如果 q(x_i) 大于 p(x_i) 会怎样呢?此时这个项的值为负,因为小于1的值的对数为负。另一方面,如果 q(x_i) 总是小于 p(x_i),那么这个项的值为正。如果p(x_i)=q(x_i) 则该项的值为0。然后,为了使这个值为期望值,你要用 p(x_i)来给这个对数项目加权。也即是说, p(x_i)有更高概率的匹配区域比低 p(x_i) 概率的匹配区域更加重要。

直直观而言,优先正确匹配近似分布中真正高可能性的事件是有实际价值的。从数学上讲,这能让你自动忽略落在真实分布的支集(支集(support)是指分布使用的 X 轴的全长度)之外的分布区域。另外,这还能避免计算 log(0) 的情况——如果你试图计算落在真实分布的支集之外的任意区域的这个对数项,就可能出现这种情况。

计算 KL 散度

我们计算一下上面两个近似分布与真实分布之间的 KL 散度。首先来看均匀分布:

再看看二项分布:

玩一玩 KL 散度

现在,我们来玩一玩 KL 散度。首先我们会先看看当二元分布的成功概率变化时 KL 散度的变化情况。不幸的是,我们不能使用均匀分布做同样的事,因为 n 固定时均匀分布的概率不会变化。

可以看到,当我们远离我们的选择(红点)时,KL 散度会快速增大。实际上,如果你显示输出我们的选择周围小 Δ 数量的 KL 散度值,你会看到我们选择的成功概率的 KL 散度最小。

现在让我们看看的行为方式。如下图所示:

看起来有一个区域中的之间有最小的距离。让我们绘出两条线之间的差异(虚线),并且放大我们的概率选择所在的区域。

看起来我们的概率选择也位于非常接近有最低差异的区域(但并不是最低差异的区域)。但这仍然是一个很有意思的发现。我不确定出现这种情况的原因是什么。如果有人知道,欢迎讨论。

结论

现在我们有些可靠的结果了。尽管均匀分布看起来很简单且信息不多而二项分布带有更有差别的信息,但实际上均匀分布与真实分布之间的匹配程度比二项分布的匹配程度更高。说老实话,这个结果实际上让我有点惊讶。因为我之前预计二项分布能更好地建模这个真实分布。因此,这个实验也能告诉我们:不要只相信自己的直觉!

 

 

<think>嗯,用户现在问的是KL的通俗讲解。之前他们问过PPO和DPO的比较,里面提到PPO用了KL作为约束。所以可能用户在学习强化学习或者相关领域,遇到了这个概念,需要更基础的解释。 首先,我需要回忆KL的定义。KL全称是Kullback-Leibler Divergence,用来衡量两个概率分布的差异。但用户需要的是通俗的解释,不能太数学化。应该用类比或者生活中的例子来说明。 用户可能已经了解了一些机器学习的基础,比如概率分布,但不确定他们的深。需要避免复杂的公式,但可能还是需要提到公式的结构,用中文解释每个部分的意义。比如,P和Q两个分布,KL计算的是P相对于Q的差异,用期望值表示。 要注意的是,KL不是对称的,也就是说KL(P||Q)不等于KL(Q||P),这点需要强调。可以用实际的例子,比如两个不同的分布情况,说明这种不对称性的影响。 另外,应用场景也很重要。用户之前接触的是强化学习中的PPO,所以可以联系到那里,比如KL如何防止策略更新过大,保持稳定性。同时,也可以提到其他应用,比如生成模型中的VAE,或者信息论中的压缩编码,这样用户能理解其广泛性。 需要避免常见的误区,比如KL不是距离,因为它不满足对称性和三角不等式。这点需要澄清,防止用户之后混淆。 可能用户还会想知道如何计算KL,但因为是通俗讲解,可能不需要具体的计算步骤,而是概念性的理解。比如,如果P和Q越相似,KL越小,反之越大。或者用信息量的角解释,KL可以看作是使用Q来近似P时的额外信息损失。 还要考虑用户可能的疑问,比如为什么在机器学习中要用KL而不是其他量,这时候可以说明它的性质,比如凸性,便于优化,或者在某些问题中的自然出现(比如最大似然估计)。 最后,检查是否有需要补充的例子,比如抛硬币的概率分布,或者更直观的图形表示,帮助用户形成直观印象。比如,两个高斯分布之间的KL,或者简单的离分布例子。 总结下来,结构应该是:定义,直观解释,不对称性,应用例子,常见误区,最后总结重要性。需要用口语化的中文,避免术语堆砌,同时确保准确性。</think>### **KL的通俗讲解** --- #### **一句话理解** KL(Kullback-Leibler Divergence)是一个衡量两个概率分布“差异程”的工具。 **通俗比喻**:假设你手上有两本食谱(分布P和Q),KL就像在问:“如果用食谱Q来做饭,结果和用食谱P的预期味道差了多少?” --- #### **核心概念拆解** 1. **概率分布**:描述事件发生的可能性。 - 例如:抛硬币,P是“真实硬币”(正反概率各50%),Q是“魔术硬币”(正面70%,反面30%)。 2. **差异衡量**: - KL计算的是“用分布Q近似分布P时,信息量的额外损失”。 - 公式:$$ KL(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} $$ - **通俗解释**: - 分子$P(x)$:真实情况发生的概率。 - 分母$Q(x)$:近似情况下的概率。 - $\log$比值:衡量“惊讶程”(如果Q对某事件的预测与P相差很大,你会很“惊讶”,导致KL值大)。 --- #### **关键特性** 1. **不对称性**: - $$ KL(P \parallel Q) \neq KL(Q \parallel P) $$ - **例子**: - 如果P是“猫狗分布”,Q是“模糊的动物分布”: - $KL(P \parallel Q)$:强调“漏掉猫狗细节”的损失。 - $KL(Q \parallel P)$:强调“强行用猫狗解释模糊动物”的损失。 2. **非负性**: - KL值≥0,且当且仅当P=Q时等于0。 3. **不是距离**: - 因为不对称,不满足距离的对称性和三角不等式。 --- #### **直观例子** 假设天气预报: - **真实分布P**:明天70%下雨,30%晴天。 - **预测分布Q**:预报员说50%下雨,50%晴天。 计算KL: $$ KL(P \parallel Q) = 0.7 \log \frac{0.7}{0.5} + 0.3 \log \frac{0.3}{0.5} \approx 0.7 \times 0.36 + 0.3 \times (-0.51) \approx 0.15 $$ **解读**:预报员用Q预测P时,平均每个事件的信息误差是0.15(数值越大,预测越不靠谱)。 --- #### **实际应用场景** 1. **强化学习(如PPO算法)**: - 限制新旧策略的差异(防止更新过快导致崩溃)。 2. **生成模型(如VAE)**: - 让生成的数据分布逼近真实分布。 3. **信息压缩**: - 设计最优编码时,KL衡量编码效率损失。 4. **自然语言处理**: - 对比模型输出的文本分布与人类语言分布。 --- #### **常见误区** - ❌ “KL越小,两个分布越接近” → ✅ 正确。 - ❌ “KL是对称的” → ✅ 错误,交换P和Q结果可能不同。 - ❌ “KL是距离” → ✅ 错误,它不满足距离的定义。 --- #### **总结** - **KL的本质**:衡量“用Q代替P”的信息损失,是机器学习中的“差异尺”。 - **核心用途**:优化目标对齐、分布匹配、策略约束。 - **记住口诀**: > “P真Q近似,差异看KL;不对称非距离,优化要靠它。”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值