什么是交叉熵损失
提起损失,我们最熟悉的可能就是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.
Loss=N1∑i=1Nyijlog(pij),j=1,2,...,C.
其中,
N
N
N 表示的是样本的个数,
C
C
C表示的分类的类别个数。
y
i
j
y_{ij}
yij表示第i个样本是否属于第j类,只有两个值,0或者1。而
p
i
j
p_{ij}
pij表示的是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
Loss中的
p
i
j
p_{ij}
pij指的就是softmax函数输出的归一化的概率值,也就是每一个class对应的概率。
one hot向量
对于多分类问题,不需要做one-hot编码,pytorch中会自动做one hot编码,接下来再进行crossentropy的损失的求解。
对于二分类问题,需要做one-hot编码,然后再求损失。