不同背景下不同交叉熵公式的异和同

交叉熵公式的几个问题

本小白在学习过程中在很多地方都遇到过交叉熵公式,一般我们遇到的是这样的:
C 1 = 1 n x [ y ln a + ( 1 y ) ln ( 1 a ) ] C1 = -\frac{1}{n}\sum_{x}[y\ln a+(1-y)\ln (1-a)]

然而在学习cs231线性分类(softmax)那一节的时候也遇到了交叉熵,包括一些博客和资料中,它们形式是这样的:
C 2 = x p ( x ) log q ( x ) C2 = -\sum_xp(x)\log q(x)

作为小白的我瞬间懵逼了,之前看了Michael Nielsen的《神经网络与深度学习》,其中讲softmax那一层的时候,用的是对数似然(log-likelihood)代价函数。用x表示训练输出,y表示对应目标输出,则对数似然代价函数为:
C 3 = ln a y L C3 = -\ln a^L_y

a y L a^L_y 为第L层第y个输出值。我们暂且为上述三个代价函数命名为C1、C2和C3,便于后边讨论。懵不懵!C1和C2交叉熵什么关系,C2和C3又有点异曲同工之妙。

对上述问题的几点结论

这里先给出结论。查阅了一些资料和blog,得出了几点结论
注意二分类的交叉熵和多分类问题的交叉熵形式不一样。

  • 二分类交叉熵形式如下:
    C 1 = 1 n x [ y ln a + ( 1 y ) ln ( 1 a ) ] C1 = -\frac{1}{n}\sum_{x}[y\ln a+(1-y)\ln (1-a)]

  • 多分类交叉熵形式如下:
    C 2 = x p ( x ) log q ( x ) C2 = -\sum_xp(x)\log q(x)

  • 归纳问题中公式出现的场景,当交叉熵前接的是 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 ) p(x) q ( x ) q(x) ,其相对熵为:
K L ( p q ) = p ( x ) ln q ( x ) d x ( p ( x ) ln p ( x ) d x ) KL(p||q)=- \int p(x)\ln q(x)dx -(- \int p(x)\ln p(x)dx)

p(x)为真实分布,即我们所讲的标签y的分布,为已知,所以 p ( x ) ln p ( x ) d x -\int p(x)\ln p(x)dx 为已知,而 p ( x ) ln q ( x ) d x - \int p(x)\ln q(x)dx 未知,就是我们需要关心的交叉熵。交叉熵公式已经知道啦,即:
p ( x ) ln q ( x ) d x -\int p(x)\ln q(x)dx

现在我们进行二分类的讨论,二分类下 p ( x ) p(x) 为二项分布,因而分类器输出第 i 个神经元交叉熵为:
p ( x ) ln q ( x ) d x = p 1 ( x ) ln q 1 ( x ) p 2 ( x ) ln q 2 ( x ) = p 1 ( x ) ln ( q 1 ( x ) ) ( 1 p 1 ( x ) ) ln ( 1 q 1 ( x ) ) \int p(x)\ln q(x)dx = -p_1(x)\ln q_1(x)-p_2(x)\ln q_2(x)=-p1(x)\ln (q1(x))-(1-p1(x))\ln(1-q1(x))

即上述C1的公式。再来看看多分类情况。这里 p(x) 是标签值(one-hot),比如三个分类,某个样本属于第一个分类,标签值为1 0 0。代入上述的交叉熵公式,即得:
p i ln ( y i ) -p_i\ln (y_i)

其中,p_i是输出正确分类的标签值,其为1。因而又可以写为:
ln ( y i ) -\ln (y_i)

该式和C3对数似然代价函数一致。这也就解释了C1和C2在搭配softmax时,即多分类情况下公式是一样的。
另外,前文已述二分类和多分类情况下交叉熵推导结果不一,因此也有人建议采用 Kears 中的命名方法,对于二分类的交叉熵损失函数称之为 “二分类交叉熵损失函数”,对于多分类的交叉熵损失函数称之为"多类别交叉熵损失函数"。至于我们平时使用,清楚怎么回事就行啦
以上
参考:
[1]: https://juejin.im/post/5b38971be51d4558b10aad26
[2]: https://www.zhihu.com/question/41252833

发布了26 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_39704651/article/details/97392322
今日推荐