首先需要先了解信息熵的概念,这里只做简单回顾,具体参见本博客另一博文。

对于变量 $x$ 的分布 $P(X)$ 来说,其熵为: $$ H(P) = -\int_xp(x)\log{p(x)} $$ 它表示了该分布的信息量。

交叉熵

对于测度相同事件的真实概率分布 $P$、非真实概率分布 $Q$,我们可以基于 $Q$ 对 $P$ 进行编码,从而得到 基于 $Q$ 的分布来编码服从 $P$ 分布的样本所需的平均比特数: $$ H(P,Q) = -\int_xp(x)\log{q(x)} $$ 即为 $P$ 相对于 $Q$ 的 交叉熵,它是 两个概率分布之间的差异的度量(非对称性),往往被用做深度学习中的损失函数(如分类任务、GAN 生成任务)。

相对熵(KL 散度)

相对熵(Relative Entropy)同样是 两个概率分布之间的差异的度量(非对称性),与 交叉熵 相比,它同样是基于 $Q$ 的分布来编码服从 $P$ 分布的样本,但是 交叉熵 计算的是该编码需要的平均比特数,而 相对熵 计算的是 额外需要的平均比特数: $$ \begin{aligned} D_{\text{KL}}(P||Q) &= H(P,Q)-H(P) \\ &= \int_xp(x)(\log{p(x)}-\log{q(x)}) \\ &= \int_xp(x)(\log\frac{p(x)}{q(x)}) \end{aligned} $$

根据式子我们可以看出相对熵的范围是 非负数,即 $D_{\text{KL}}(P||Q) \ge 0$,当且仅当 $P=Q$ 时,$D_{\text{KL}}(P||Q) = 0$。

相对熵是它在信息论中的名字,由于它是 Kullback、Leibler 两人提出,它同时也被叫做 KL 散度(Kullback-Leibler Divergence,KLD)。

JS 散度

尽管 KL 散度 可以衡量两个概率分布之间的差异,但是我们必须注意到,KL 散度 不是对称的,也就是说 $D_{\text{KL}}(P||Q) \ne D_{\text{KL}}(Q||P)$,这不是一个好的性质,因为理论上两个对象之间的差异应该是对称的。因此人们又进一步提出了 JS 散度(Jensen–Shannon Divergence,JSD),这次它终于是 两个概率分布之间的差异的对称性的度量: $$ \begin{aligned} D_{\text{JS}}(P||Q) = \frac{1}{2}D_{\text{KL}}(P||\frac{P+Q}{2}) + \frac{1}{2}D_{\text{KL}}(Q||\frac{P+Q}{2}) \end{aligned} $$

JS 散度 的范围是 $0 < D_{\text{JS}}(P||Q) < \log 2$。