JS 散度是什么?对称且有界的分布差异度量
JS 散度(Jensen-Shannon Divergence)是一种衡量两个概率分布之间差异程度的指标。它以丹麦数学家约翰·延森和信息论之父克劳德·香农的名字命名,由 Jianhua Lin 在 1991 年系统地提出和研究。它是在 KL 散度的基础上改进而来的,克服了 KL 散度的一些缺点。
从 KL 散度说起
KL 散度,也叫相对熵,是衡量两个概率分布差异最常用的指标。但它有几个不便之处。不对称:从分布 P 到分布 Q 的 KL 散度,一般不等于从 Q 到 P 的 KL 散度,所以它不是一个真正意义上的“距离”。可能无穷大:如果在某些地方,P 的概率大于零而 Q 的概率等于零,KL 散度就会变成无穷大。这在实际计算中常常带来麻烦。
JS 散度的定义
JS 散度的做法很巧妙:先构造两个分布的平均分布 M,也就是 P 和 Q 各占一半混合起来的分布;然后分别计算 P 到 M 的 KL 散度,以及 Q 到 M 的 KL 散度,再取这两者的平均值,就得到了 JS 散度。由于平均分布 M 在 P 或 Q 有概率的地方都有概率,上面所说的“除以零”的问题就不会出现。
它的性质
对称:P 和 Q 交换位置,JS 散度不变。非负:JS 散度总是大于等于零,只有当两个分布完全相同时才等于零。有界:它的值有一个上限,当对数以 2 为底时,JS 散度的取值范围在 0 到 1 之间;当两个分布完全不重叠时,取到最大值。这让它便于比较和解释。接近一个真正的距离:JS 散度本身不满足三角不等式,但它的平方根满足,因此 JS 散度的平方根可以作为一个真正的度量,被称为 JS 距离。JS 散度还有一个信息论的解释:它等于从混合分布中抽取一个样本时,这个样本来自 P 还是来自 Q 这件事与样本本身之间的互信息。
在生成对抗网络中的作用
JS 散度在深度学习中最著名的出现,是在生成对抗网络中。Ian Goodfellow 等人在 2014 年的论文中证明:当判别器达到最优时,原始生成对抗网络中生成器的训练目标,等价于最小化真实数据分布与生成数据分布之间的 JS 散度。这为生成对抗网络提供了一个理论上的解释。
但这也揭示了原始生成对抗网络训练困难的一个原因。Martin Arjovsky 等人在 2017 年指出:在高维空间中,真实数据和生成数据通常都集中在低维的流形上,在训练初期,两个分布几乎没有重叠。而当两个分布不重叠时,无论它们离得近还是远,JS 散度都等于同一个常数,梯度几乎为零,生成器得不到有用的学习信号,不知道应该往哪个方向改进。为此,他们提出了 Wasserstein 生成对抗网络(WGAN),改用 Wasserstein 距离,也叫推土机距离,即使两个分布不重叠,它也能平滑地反映两者之间的远近,提供有意义的梯度。
其他应用
JS 散度还被用于比较文本的主题分布和词频分布,衡量文档之间的相似性;在生物信息学中比较 DNA 序列和基因表达谱;在机器学习中监测数据分布的漂移,比较训练数据与线上数据的特征分布是否发生了变化;以及在聚类和信息检索等领域中衡量分布之间的差异。