交叉熵公式的几个问题
本小白在学习过程中在很多地方都遇到过交叉熵公式,一般我们遇到的是这样的:
然而在学习cs231线性分类(softmax)那一节的时候也遇到了交叉熵,包括一些博客和资料中,它们形式是这样的:
作为小白的我瞬间懵逼了,之前看了Michael Nielsen的《神经网络与深度学习》,其中讲softmax那一层的时候,用的是对数似然(log-likelihood)代价函数。用x表示训练输出,y表示对应目标输出,则对数似然代价函数为:
为第L层第y个输出值。我们暂且为上述三个代价函数命名为C1、C2和C3,便于后边讨论。懵不懵!C1和C2交叉熵什么关系,C2和C3又有点异曲同工之妙。
对上述问题的几点结论
这里先给出结论。查阅了一些资料和blog,得出了几点结论
注意二分类的交叉熵和多分类问题的交叉熵形式不一样。
-
二分类交叉熵形式如下:
-
多分类交叉熵形式如下:
-
归纳问题中公式出现的场景,当交叉熵前接的是 sigmoid 层的时候,交叉熵形式用 C1,当前面接的是 softmax 层的时候,交叉熵形式用 C2。因为 sigmoid 是二分类的分类器,softmax 是归一化多分类的分类器,这也侧面印证了上面的两个结论。
-
C3 的log似然函数也接在 softmax 层后边,那它和 C2 背景是一样的。对于多分类问题,每个样本只有一个标签,因而 C2 的累加项中只有一项不为0,其余p(x)均为0,因而 C2 经过化简即可得到 C3,注意深度学习中 log 和 ln 代表一个意思,很多教程都是混合是使用,都作为 ln 来看。
对于结论的一些解答
首先我们需要区分 二分类、多分类、多标签和多输出问题的基本概念:
二分类问题:表示分类任务中有两个类别,输出用0或1表示,二分类的每个样本都有一个标签0或者1;
多分类问题:分类任务有多个类别,其每个样本也只有一个标签,输出一般用概率表示;
多标签分类:一个样本可以有多个标签,比如水果盘里有苹果和梨子,那么标签中代表苹果梨子都有;
多输出分类:多个多分类或多标签的组合分类。如一个网络同时预测服饰款式类型和颜色类型。
这里我们讨论二分类问题和多分类问题,这一默认对于一个样本只有一个标签,即是苹果就是苹果,大枣就是大枣,梨子就是梨子,不带水果拼盘这样玩的。
我们再很多地方都看到由相对熵(KL散度)推导出交叉熵的,对于两个概率分布
和
,其相对熵为:
p(x)为真实分布,即我们所讲的标签y的分布,为已知,所以
为已知,而
未知,就是我们需要关心的交叉熵。交叉熵公式已经知道啦,即:
现在我们进行二分类的讨论,二分类下
为二项分布,因而分类器输出第 i 个神经元交叉熵为:
即上述C1的公式。再来看看多分类情况。这里 p(x) 是标签值(one-hot),比如三个分类,某个样本属于第一个分类,标签值为1 0 0。代入上述的交叉熵公式,即得:
其中,p_i是输出正确分类的标签值,其为1。因而又可以写为:
该式和C3对数似然代价函数一致。这也就解释了C1和C2在搭配softmax时,即多分类情况下公式是一样的。
另外,前文已述二分类和多分类情况下交叉熵推导结果不一,因此也有人建议采用 Kears 中的命名方法,对于二分类的交叉熵损失函数称之为 “二分类交叉熵损失函数”,对于多分类的交叉熵损失函数称之为"多类别交叉熵损失函数"。至于我们平时使用,清楚怎么回事就行啦
以上
参考:
[1]: https://juejin.im/post/5b38971be51d4558b10aad26
[2]: https://www.zhihu.com/question/41252833