我们可以计算两个数值点之间的距离,也可以计算两个概率分布之间的距离。常见方法有卡方检验(Chi-Square)和KL散度(KL-Divergence)。本文主要介绍KL散度。
先从信息熵说起,假设一篇文章的标题叫做“黑洞到底吃什么”,包含词语分别是{黑洞,到底,吃什么},我们现在要根据一个词语推测这篇文章的类别。哪个词语给予我们的信息最多?很容易就知道是“黑洞”,因为“黑洞”这个词语在所有的文档中出现的概率太低啦,一旦出现,就表明这篇文章很可能是在讲科普知识。而其他两个词语“到底”和“吃什么”出现的概率很高,给予我们的信息反而越少。
如何用一个函数 $h(x)$ 表示词语给予的信息量呢?
- 第一,肯定是与 $p(x)$ 相关,并且是负相关。
- 第二,假设 $x$ 和 $y$ 是独立的(黑洞和宇宙不相互独立,谈到黑洞必然会说宇宙),即 $p(x,y) = p(x)p(y)$, 那么获得的信息也是叠加的,即 $h(x, y) = h(x) + h(y)$。满足这两个条件的函数肯定是负对数形式:
\[h(x)=-\ln p(x)\]
对假设一个发送者要将随机变量 X 产生的一长串随机值传送给接收者, 接受者获得的平均信息量就是求它的数学期望:
\[\begin{array}{*{20}{l}}
{H[x] = - \sum p (x)\ln p(x)}\\
{H[x] = \mathop \smallint \limits^x p(x)\ln p(x)dx}
\end{array}\]
这就是熵的概念。
另外一个重要特点是,熵的大小与字符平均最短编码长度是一样的。设有一个未知的分布 $p(x)$, 而 $q(x)$ 是我们所获得的一个对 $p(x)$ 的近似,按照 $q(x)$ 对该随机变量的各个值进行编码,平均长度比按照真实分布的 $p(x)$ 进行编码要额外长一些,多出来的长度这就是 KL 散度(之所以不说距离,是因为不满足对称性和三角形法则),即:
\[KL(p||q) =H(P,Q)-H(P)= - \int {p(x)\ln q(x)dx -(-\int{p(x)}\ln p(x)dx)}=-\int{p(x)\ln(\frac{q(x)}{p(x)})dx}\]
其中$H(P,Q)$称为$P$和$Q$的交叉熵,$H(p)$是$P$的熵。KL 散度又叫相对熵(relative entropy)。当两个概率分布完全相同时,即$P(x)=Q(X)$,其相对熵为0。
了解机器学习的童鞋应该都知道,在 Softmax 回归(或者 Logistic 回归),最后的输出节点上的值表示这个样本分到该类的概率,这就是一个概率分布。对于一个带有标签的样本,我们期望的概率分布是:分到标签类的概率是 1, 其他类概率是 0。但是理想很丰满,现实很骨感,我们不可能得到完美的概率输出,能做的就是尽量减小总样本的 KL 散度之和(目标函数)。这就是 Softmax 回归或者 Logistic 回归中 Cost function 的优化过程啦。(PS:因为概率和为 1,一般的 logistic 二分类的图只画了一个输出节点,隐藏了另外一个)。
引自:http://www.cnblogs.com/daniel-D/p/3244718.html