JS散度

前面我们介绍了相对熵(KL散度)的概念,知道了它可以用来表示两个概率分布之间的差异,但有个不大好的地方是它并不是对称的,因此有时用它来训练神经网络会有顺序不同造成不一样的训练结果的情况(其实个人觉得也就是训练时间差异罢了,也没那么严重)。为了克服这个问题,有人就提出了一个新的衡量公式,叫做 J S JS JS散度,式子如下:
J S ( P 1 ∥ P 2 ) = 1 2 K L ( P 1 ∥ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∥ P 1 + P 2 2 ) J S \left( P _ { 1 } \| P _ { 2 } \right) = \frac { 1 } { 2 } K L \left( P _ { 1 } \| \frac { P _ { 1 } + P _ { 2 } } { 2 } \right) + \frac { 1 } { 2 } K L \left( P _ { 2 } \| \frac { P _ { 1 } + P _ { 2 } } { 2 } \right) JS(P1P2)=21KL(P12P1+P2)+21KL(P22P1+P2)
如果有一点数学功底的人可以轻易看出这个公式对于 P 1 P _ { 1 } P1 P 2 P _ { 2 } P2是对称的,而且因为是两个 K L KL KL的叠加,由相对熵的文章我们知道 K L KL KL的值一定是大于等于0的,因此这个公式也一定大于等于0。

现在只剩下一个关键问题,就是什么时候等于0的问题了。同样参考相对熵的文章我们知道当两个分布相同的时候等于0,那么换到这里,也就是:
P 1 = P 1 + P 2 2   且 P 2 = P 1 + P 2 2 P _ { 1 }=\frac { P _ { 1 } + P _ { 2 } }{ 2 }\ \qquad 且 \qquad P _ { 2 }=\frac { P _ { 1 } + P _ { 2 } } { 2 } P1=2P1+P2 P2=2P1+P2
的时候。可以轻易看出来, J S JS JS散度等于0的时候跟 K L KL KL散度一样,就是 P 1 P _ { 1 } P1 P 2 P _ { 2 } P2完全一样的时候。那么推到这里,用 J S JS JS散度来表达两个概率分布的差异就问题不大了。

其实本人在看相对熵和 J S JS JS散度的时候一直有疑问,就是当两个概率分布不一样的时候,它们的值是不是会随着距离的变大而变大,也就是说这两个公式跟概率分布的距离到底是不是一个单调的关系,但我没有看到别人在说这件事情。我自己想了半天之后得出的结论是不一定,可能随着概率分布的表达式不一样而有所变化。

当然因为没有人讲这件事我至今也不知道这样想是不是对的,因此有老哥想明白了麻烦留个言告诉我。

<think>好的,我现在需要帮助用户了解JS的概念和实现。首先,我需要回顾一下用户提供的引用内容,确保信息准确。根据引用[1]和[4],JS是基于KL的对称版本,用于衡量两个概率分布的差异。用户可能已经知道KL,但需要解释JS如何解决其不对称性的问题。 用户的问题提到了“JavaScript ”,这可能是一个拼写错误,应该是指Jensen-Shannon,即JS。我需要明确这一点,避免混淆。接下来,用户可能想知道如何计算JS以及如何用代码实现。需要分步骤解释公式,并提供一个代码示例,比如用Python实现,因为引用中的代码示例是Python的。 另外,用户可能对JS的应用场景感兴趣,比如在GAN中的应用,如引用[1]提到的。需要说明JS在GAN中的角色,以及它的局限性,比如当两个分布不重叠时的问题。 还需要注意回答的结构,确保符合用户的要求:结构清晰,分步骤解释,正确使用LaTeX格式,生成相关问题。要检查公式是否正确,例如JS的公式是否正确引用了用户提供的引用内容,特别是引用[4]中的公式。同时,要确保所有数学表达式用$...$或$$...$$格式,如$D_{JS}(P \parallel Q)$。 最后,生成的相关问题需要与JS相关,可能涉及与其他的比较、应用实例或优化方法。需要确保问题有针对性,能够帮助用户进一步学习。</think>### JS介绍与实现 #### 1. JS基本概念 JS(Jensen-Shannon Divergence)是一种对称的概率分布差异量方法,由KL(Kullback-Leibler Divergence)改进而来。其核心思想是通过对两个分布的均值分布进行KL计算,最终取平均值,从而解决KL的**非对称性**问题[^4]。 公式定义如下: $$ D_{JS}(P \parallel Q) = \frac{1}{2} D_{KL}(P \parallel M) + \frac{1}{2} D_{KL}(Q \parallel M) $$ 其中,$M = \frac{P + Q}{2}$是$P$和$Q$的均值分布,$D_{KL}$表示KL: $$ D_{KL}(P \parallel Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)} $$ #### 2. JS的性质 - **对称性**:$D_{JS}(P \parallel Q) = D_{JS}(Q \parallel P)$,而KL不具备这一性质。 - **取值范围**:JS的值在$[0, \log 2]$之间。当$P$和$Q$完全相同时,$D_{JS}=0$;当$P$和$Q$完全不重叠时,$D_{JS}=\log 2$[^1]。 - **稳定性**:相比KLJS对分布的重叠更敏感,适合需要对称性的场景(如GAN中的分布对齐)[^3]。 #### 3. JS的实现 以下是Python代码实现示例(假设输入为概率分布向量): ```python import numpy as np def kl_divergence(p, q): return np.sum(p * np.log(p / q)) def js_divergence(p, q): m = 0.5 * (p + q) return 0.5 * kl_divergence(p, m) + 0.5 * kl_divergence(q, m) # 示例:两个离分布 p = np.array([0.4, 0.6]) q = np.array([0.5, 0.5]) print("JS结果:", js_divergence(p, q)) # 输出约为0.0056 ``` #### 4. JS的应用与局限性 - **应用场景**: - GAN(生成对抗网络)中用于衡量生成分布与真实分布的差异[^1] - 文本相似计算、图像生成质量评估等对称性需求高的任务 - **局限性**: - 当$P$和$Q$完全不重叠时,JS恒为$\log 2$,导致梯消失(如早期GAN训练失败的原因之一) - 对分布支撑集的敏感性较高,可能影响实际优化效果 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值