一句话定义:JS 散度(Jensen-Shannon divergence)是把 KL 散度"对称化"之后得到的分布差异度量——先造一个两边的混合分布,再让双方各自去量到它的距离,取平均。
它是怎么算的
设两个概率分布 P 和 Q,先取它们的平均值 M = (P + Q) / 2,然后:
```
JSD(P || Q) = ½ · KL(P || M) + ½ · KL(Q || M)
```
打个比方。KL 散度像是"从 A 城开车到 B 城要烧多少油"——方向反了,油耗不一样;如果 B 城根本没有路通往 A 城的某个区(Q 在某点概率为 0,P 不为 0),这段路程直接算无穷大。JS 散度则改成:双方先各自开到两城之间的中点会合,再分别量路程取平均。因为中点对两边都"有路"(混合分布给了每个人非零概率),所以永远不会出现无穷大,而且谁出发谁到达,算出来一样。
几个关键性质
- 对称:JSD(P||Q) = JSD(Q||P),KL 不满足。
- 有界:以 2 为底时取值范围是 [0, 1];两个分布完全一样得 0,完全不重叠得 1。开平方后叫 JS 距离,还满足三角不等式。
- 它仍然是散度,不是严格意义上的距离函数(未开方时不满足三角不等式)。
和 KL 的对比
| KL 散度 | JS 散度 | |
|---|---|---|
| 对称性 | 不对称,方向有讲究 | 对称 |
| 取值范围 | [0, +∞),可能无穷 | [0, 1](底为 2) |
| 支撑不重叠时 | 可能无穷大或未定义 | 恒为常数 log2 |
| 典型用法 | 交叉熵损失、变分推断 | 分布比较、GAN 原目标 |
差别常被忽略的地方在于:KL 的不对称不是"小瑕疵",它是信息论意义上的单向成本;而 JS 的有界也不全是优点——当两个分布几乎不重叠时,JS 值卡在常数上,梯度接近于 0。
和 GAN 的关系
原始 GAN 的推导里有一个著名结论:当判别器训练到最优时,生成器要最小化的目标等价于最小化真实分布与生成分布之间的 JS 散度(相差常数项)。这解释了 GAN 早期训练不稳定的一个根源:训练初期生成样本和真实样本几乎不重叠,JS 是常数,判别器再强也传不回有效梯度。后来 Wasserstein 距离等替代方案,主要动机就是绕开这一点。
实际意义
对从业者:需要对称、有界、好向非技术同事解释的分布差异指标时,JS 是默认选项;而需要严格单向信息成本的场景(交叉熵损失、变分推断),该用 KL 还是 KL。别把"有界"直接等同于"好优化",梯度消失就是它的代价。对普通人:你不必手算它,但看到"两个分布差多远""模型输出偏离真实数据多少"这类说法时,背后常常是它或它的变体;具体实现细节以所用库的官方文档为准。
