交叉熵的直观理解

信息论基础

信息论(information theory)涉及编码、解码、发送以及尽可能简洁地处理信息或数据。

信息论的核心思想是量化数据中的信息内容。
在信息论中,该数值被称为分布PP(entropy)。可以通过以下方程得到:

H[P]=jP(j)logP(j).H[P] = \sum_j - P(j) \log P(j).

信息论的基本定理之一指出,为了对从分布pp中随机抽取的数据进行编码,
我们至少需要H[P]H[P]"纳特(nat)"对其进行编码。
"纳特"相当于比特(bit),但是对数底为ee而不是2。因此,一个纳特是1log(2)1.44\frac{1}{\log(2)} \approx 1.44比特。

信息量

压缩与预测有什么关系呢?
想象一下,我们有一个要压缩的数据流。
如果我们很容易预测下一个数据,那么这个数据就很容易压缩。
举一个极端的例子,假如数据流中的每个数据完全相同,这会是一个非常无聊的数据流。
由于它们总是相同的,我们总是知道下一个数据是什么。
所以,为了传递数据流的内容,我们不必传输任何信息。也就是说,"下一个数据是xx"这个事件毫无信息量。

但是,如果我们不能完全预测每一个事件,那么我们有时可能会感到"惊异"。
克劳德·香农决定用信息量log1P(j)=logP(j)\log \frac{1}{P(j)} = -\log P(j)来量化这种惊异程度。

在观察一个事件jj时,并赋予它(主观)概率P(j)P(j)
当我们赋予一个事件较低的概率时,我们的惊异会更大,该事件的信息量也就越大。

熵,是当分配的概率真正匹配数据生成过程时的信息量的期望

重新审视交叉熵

如果把熵H(P)H(P)想象为"知道真实概率的人所经历的惊异程度",那么什么是交叉熵?
交叉熵PPQQ,记为H(P,Q)H(P, Q)
我们可以把交叉熵想象为"主观概率为QQ的观察者在看到根据概率PP生成的数据时的预期惊异"。
P=QP=Q时,交叉熵达到最低。在这种情况下,从PPQQ的交叉熵是H(P,P)=H(P)H(P, P)= H(P)

简而言之,我们可以从两方面来考虑交叉熵分类目标:
(i)最大化观测数据的似然;(ii)最小化传达标签所需的惊异。


小结

  • softmax运算获取一个向量并将其映射为概率。
  • softmax回归适用于分类问题,它使用了softmax运算中输出类别的概率分布。
  • 交叉熵是一个衡量两个概率分布之间差异的很好的度量,它测量给定模型编码数据所需的比特数。

数值稳定性:Softmax 的实现技巧

在前面计算模型的输出时,我们将输出送入交叉熵损失。从数学上讲,这是一件完全合理的事情。然而,从计算角度来看,指数可能会造成数值稳定性问题

上溢问题

softmax函数y^j=exp(oj)kexp(ok)\hat y_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)},其中y^j\hat y_j是预测的概率分布。
如果oko_k中的一些数值非常大,那么exp(ok)\exp(o_k)可能大于数据类型容许的最大数字,即上溢(overflow)。
这将使分母或分子变为inf(无穷大),最后得到的是0、infnan(不是数字)的y^j\hat y_j

解决方案:减去最大值

解决这个问题的一个技巧是:在继续softmax计算之前,先从所有oko_k中减去max(ok)\max(o_k)

y^j=exp(ojmax(ok))kexp(okmax(ok))\hat y_j = \frac{\exp(o_j - \max(o_k))}{\sum_k \exp(o_k - \max(o_k))}

下溢问题与 LogSumExp 技巧

在减法和规范化步骤之后,可能有些ojmax(ok)o_j - \max(o_k)具有较大的负值。由于精度受限,exp(ojmax(ok))\exp(o_j - \max(o_k))将有接近零的值,即下溢(underflow)。

通过将softmax和交叉熵结合在一起,可以避免反向传播过程中可能会困扰我们的数值稳定性问题:

log(y^j)=ojmax(ok)log(kexp(okmax(ok)))\log{(\hat y_j)} = o_j - \max(o_k) -\log{\left( \sum_k \exp(o_k - \max(o_k)) \right)}

这,就是著名的 LogSumExp 技巧


参考资源