交叉熵损失

  • Post author:
  • Post category:其他




什么是交叉熵损失

提起损失,我们最熟悉的可能就是MSE,最小均方误差损失了。MSE通俗理解,就是预测值与真实值之间取个差,再求平方。交叉熵损失也是一种衡量预测值与真实值之间的差异的方式。两者的定义不同,适用的范围也不同。通常来说,交叉熵损失用于分类问题的损失计算,其表达式为:




L

o

s

s

=

1

N

i

=

1

N

y

i

j

l

o

g

(

p

i

j

)

,

j

=

1

,

2

,

.

.

.

,

C

.

Loss = \frac{1}{N}\sum_{i=1}^Ny_{ij}log(p_{ij}),j=1,2,…,C.






L


o


s


s




=




















N
















1




































i


=


1









N





















y











i


j



















l


o


g


(



p











i


j



















)


,




j




=








1


,




2


,




.


.


.


,




C


.






其中,



N

N






N





表示的是样本的个数,



C

C






C





表示的分类的类别个数。



y

i

j

y_{ij}







y











i


j






















表示第i个样本是否属于第j类,只有两个值,0或者1。而



p

i

j

p_{ij}







p











i


j






















表示的是i样本预测为第j类的概率值,取值范围是[0,1]。

交叉熵损失可以适用于二分类,多分类问题,它可以捕捉预测概率相对大小的差异,进一步可以更加细致的衡量不同分类器的性能。而MSE也可以捕捉这种信息,那为什么在分类问题中几乎不适用MSE损失函数呢?因为使用MSE+sigmoid配合的话,前期地学习速率非常地缓慢,因此大家就不怎么用它了。

神经网络最后一层一般是softmax函数,经过softmax函数以后变成归一化的概率值,logits指的就是未归一化的概率值,logit,对it求log,logits = log(P/1-P),P就是未归一化的概率值。上述



L

o

s

s

Loss






L


o


s


s





中的



p

i

j

p_{ij}







p











i


j






















指的就是softmax函数输出的归一化的概率值,也就是每一个class对应的概率。



one hot向量

对于多分类问题,不需要做one-hot编码,pytorch中会自动做one hot编码,接下来再进行crossentropy的损失的求解。

对于二分类问题,需要做one-hot编码,然后再求损失。



版权声明:本文为LuminCynthia_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。