机器学习中交叉熵的含义

交叉熵在分类任务中非常常见。

在训练分类模型时,我们常用one-hot编码不同种类,如有三类结果时,A类为[1, 0, 0],B类为[0, 1, 0],C类为[0, 0, 1]。

对于一个样本,我们模型的输出结果假如为为三个数[9, 2, -2],我们想把这三个数转化为三种类别的概率,并且三个概率和为1。不能简单的用a/(a+b+c)作为概率,因为概率不能有负值。通常用Softmax函数将三个数转化为三个概率,咱们先不管Softmax函数是怎么转化的,只需知道他把模型输出的三个数[9, 2, -2]转化成了概率[0.7, 0.2, 0.1] (随便写的概率值),然后可以看出这个样本应该A类。

我们想利用梯度下降法训练模型使得输出的结果转化成概率后更接近[1, 0, 0],有了这个想法后,损失函数就得定义成概率[1, 0, 0]和概率[0.7, 0.2, 0.1]之间的差异,然后通过梯度下降法修改参数使它们的差异逐渐减小。

而交叉熵就是描述[1, 0, 0]、[0.7, 0.2, 0.1]这两组概率之间差异的一个东西。

至于交叉熵是怎么描述两组概率之间的差异的,就需要了解一下交叉熵的公式定义了。

首先得先了解一下什么是熵、相对熵。

熵是用来描述信息量的一个概念,比如我告诉你“明天会下雨”这句话包含了多少信息量。熵的大小与不确定度成正比,“昨天下雨了”这句话对于今天来说是已知的,所以这句话的不确定的为0,那么这句话的信息量也就为0。而“明天会下雨”,这句话就有信息量了,因为我们不知道明天会不会下雨。

对于事件X,有n中可能的结果,则事件X的熵的计算公式为:

$$H(X) =- \sum_{i=1}^{n}p(x_i)log(p(x_i))$$

当事件X的所有情况等概率的时候熵最大,因为这时候X的不确定性最高。

相对熵

相对熵又称 KL 散度,如果对于同一随机变量x,有两种单独的概率分布P(x) 和 Q(x) ,相对熵是描述这两种概率分布差异的量。

你可能会问机器学习中不用相对熵而用交叉熵呢,看完他们的各自公式定义你就明白了。

相对熵计算公式:

$$D_{KL} = \sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})$$

n为事件的所有可能性,相对熵$D_{KL}$ 的值越小,表示q概率分布和p概率分布越接近。

交叉熵

把上面相对熵的公式推导一下:

$$D_{KL} = \sum_{i=1}^{n}p(x_i)log(\frac{p(x_i)}{q(x_i)})$$
$=\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(p\left(x_{i}\right)\right)-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)$

$=-H(p(x))+\left[-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)\right]$

结果的前一部分恰好就是p的熵,是个定值。

所以交叉熵就取后面那部分:

$H(p, q)=-\sum_{i=1}^{n} p\left(x_{i}\right) \log \left(q\left(x_{i}\right)\right)$

所以交叉熵与相对熵意义基本一样,都能评估label和predicts的差异,而交叉熵更简单一点,所以机器学习中用交叉熵作为损失函数而不是相对熵。

参考链接:

https://www.jianshu.com/p/71d7fffcc552