简单谈谈Cross Entropy Loss

Posted 时光杂货店

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单谈谈Cross Entropy Loss相关的知识,希望对你有一定的参考价值。

写在前面

分类问题和回归问题是监督学习的两大种类:分类问题的目标变量是离散的;回归问题的目标变量是连续的数值。
神经网络模型的效果及优化的目标是通过损失函数来定义的。

回归问题解决的是对具体数值的预测。比如房价预测、销量预测等都是回归问题。这些问题需要预测的不是一个事先定义好的类别,而是一个任意实数。解决回顾问题的神经网络一般只有一个输出节点,这个节点的输出值就是预测值。对于回归问题,常用的损失函数是均方误差( MSE,mean squared error )。

分类问题常用的损失函数为交叉熵( Cross Entropy Loss)。

这篇博客我们简单谈谈交叉熵损失函数。


交叉熵描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近。[关于交叉熵的原理,我这有一篇简单明白的博客]

尽管交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布。为此我们常常用Softmax回归将神经网络前向传播得到的结果变成概率分布。

softmax常用于多分类过程中,它将多个神经元的输出,归一化到( 0, 1) 区间内,因此Softmax的输出可以看成概率,从而来进行多分类。

假设我们有一个包含k个元素的数组V, i i 表示V中的第i个元素,那么这 i i 个元素的softmax输出就是:Si=eij=1kej

为了举一个具体例子,特意盗了一张图,如下:[关于Softmax更简单明白的原理阐述,特意负责任地推荐我这篇博客]

:在TensorFlow中使用Cross Entropy Loss时,主要是使用tf.nn.softmax_cross_entropy_with_logits这类函数,但这类函数需要输入的是未经过Softmax的Logits。而所谓的unscaled logits就可以粗略理解为没有经过Softmax的变量。这一点要与数学上的logits ( 一个事件发生与该事件不发生的比值的对数) 进行区分。

进入主题

简单复习了Softmax,开始进入主题:损失函数为什么要用Cross Entropy Loss。

出于直觉,人们会觉得可以使用classification error来做损失函数:

classificationerror=countoferroritemscountofallitems c l a s s i f i c a t i o n − e r r o r = c o u n t − o f − e r r o r − i t e m s c o u n t − o f − a l l − i t e m s

我们不置可否,先来看两个模型:

以上两个模型,computed 是预测结果,targets 是预期结果。 二者的数字,都可以理解为概率。 correct 一栏表示预测是否正确。

模型 1 中,item 1 和 2 以非常微弱的优势判断正确,item 3 则彻底错误,计算其classification error:

classificationerror=1/3=0.33 c l a s s i f i c a t i o n − e r r o r = 1 / 3 = 0.33
模型 2 中,item 1 和 2 的判断非常精准,item 3 判错,但比较轻,计算其classification error: classificationerror=1/3=0.33 c l a s s i f i c a t i o n − e r r o r = 1 / 3 = 0.33

如果仅仅从2 个模型的 classification error 来判断,那这两个模型性能相同,但实际情况是:模型 2 要明显优于模型 1。所以说,classification error 很难精确描述模型与理想模型之间的距离。

如果使用 ACE ( average cross-entropy error )?

首先,我们给出Cross Entropy Loss的公式:

Hy(y):=iyilog(yi) H y ‘ ( y ) := − ∑ i y i ′ l o g ( y i ) 其中 yi y i 是预测结果, yi y i ′ 是ground truth。

那么根据公式, 模型中 1 第一项的 cross-entropy 是:

((ln(0.3)0)+(ln(0.3)0)+(ln(0.4)1))=ln(0.4) − ( ( l n ( 0.3 ) ∗ 0 ) + ( l n ( 0.3 ) ∗ 0 ) + ( l n ( 0.4 ) ∗ 1 ) ) = − l n ( 0.4 )
以此类推,模型1的 ACE ( average cross-entropy error ) 是: (ln(0.4)+ln(0.4)+ln(0.1))/3=1.38 − ( l n ( 0.4 ) + l n ( 0.4 ) + l n ( 0.1 ) ) / 3 = 1.38

模型 2 的 ACE 是:

(ln(0.7)+ln(0.7)+ln(0.3))/3=0.64 − ( l n ( 0.7 ) + l n ( 0.7 ) + l n ( 0.3 ) ) / 3 = 0.64

这样一来ACE的结果准确的体现了模型 2 要优于模型 1的事实,所以说 Cross-Entropy Loss 更清晰的描述了模型与理想模型的距离。

为何不用 Mean Squared Error (平方和)

如果使用 MSE(mean squared error),则模型 1 第1项的 loss 是:

(0.30)2+(0.30)2+(0.41)2=0.09+0.09+0.36=0.54 ( 0.3 − 0 ) 2 + ( 0.3 − 0 ) 2 + ( 0.4 − 1 ) 2 = 0.09 + 0.09 + 0.36 = 0.54

模型 1 的 loss 是:

(0.54+0.54+1.34)/3=0.81卷积神经网络系列之softmax,softmax loss和cross entropy的讲解

常见LOSS函数之Cross Entropy(交叉熵)

TensorFlowtf.nn.softmax_cross_entropy_with_logits的用法

tf.nn.softmax_cross_entropy_with_logits的用法

tensorflow--tf.nn.softmax_cross_entropy_with_logits的用法

sklearn基于make_scorer函数为Logistic模型构建自定义损失函数+代码实战(二元交叉熵损失 binary cross-entropy loss)