关于交叉熵,信息熵等推导,已经有很多博客详细讲解了,这里就不再赘述了。本文要理清的是一个很初级的问题:二分类交叉熵和多分类交叉熵有没有统一的形式?
我们常见的二分类交叉熵形式如下:
而多分类的交叉熵为:
绝大多数教程,都是先以二分类作为特例,讲解交叉熵,然后再推到多分类交叉熵。但是,怎么看都觉得两种形式好像差的很远,二分类又是yi、pi,又是(1-yi)、(1-pi)。到了多分类交叉熵的时候,突然就没有了。去死记公式吧,又会很迷茫,特别是后面看到Focal Loss一文的时候,里面针对二分类的交叉熵作为例子,说明了如何对交叉熵损失函数进行逐步修改,得到Focal Loss。文中通过引入记号,分析了二分类情况下的简写形式,但是当自己想把它推广到多分类情况时,这种迷茫感就更深了。
最后,在和朋友讨论之后,得到了比较清晰的理解方式:
我们不要从二分类往多分类推广,而是从多分类向二分类推导。
首先来看多分类的交叉熵形式:
而我们知道,使用神经网络进行多分类的时候,最后输出结果往往进行softmax,也就是说,输出向量为样本属于各个类别的概率,也就是上式中的pic。这是最通用的形式。
使用这种通用的形式,向二分类进行特例化,我们能得到什么呢?
其实就是让上式中的M=2,是不是就没有出现1-pi的形式了,这貌似和二分类的交叉熵长得不同。
为什么会又这种差异呢?实际上我们在进行二分类的时候,网络的最后输出结果,往往是一个值,而不是向多分类那样,是一个长度为类别数的向量。二分类的网络输出结果一般经过sigmoid函数,这样以来,代表网络输出的只是某个类的概率,但是要进行的是二分类呀!因为只有两个类,所以另外一个类的概率就是1-pi了,标签也成为了1-yi,代入到通用的公式中,就得到了二分类交叉熵的形式。
所以这么看来,交叉熵的计算其实还是很统一的嘛,终于不用认为二分类是个特例,要专门去记它的公式了。