简单谈谈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 个元素的softmax输出就是:
为了举一个具体例子,特意盗了一张图,如下:[关于Softmax更简单明白的原理阐述,特意负责任地推荐我这篇博客]
注:在TensorFlow中使用Cross Entropy Loss时,主要是使用tf.nn.softmax_cross_entropy_with_logits这类函数,但这类函数需要输入的是未经过Softmax的Logits。而所谓的unscaled logits就可以粗略理解为没有经过Softmax的变量。这一点要与数学上的logits ( 一个事件发生与该事件不发生的比值的对数) 进行区分。
进入主题
简单复习了Softmax,开始进入主题:损失函数为什么要用Cross Entropy Loss。
出于直觉,人们会觉得可以使用classification error来做损失函数:
classification−error=count−of−error−itemscount−of−all−items 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:
classification−error=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: classification−error=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):=−∑iy′ilog(yi) H y ‘ ( y ) := − ∑ i y i ′ l o g ( y i ) 其中 yi y i 是预测结果, y′i 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.3−0)2+(0.3−0)2+(0.4−1)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