Softmax
在多分类任务中,神经网络最后一层计算的输出是每个类别的预测分数,为了让使模型输出每个类的概率,Softmax操作子对预测分数求指数,然后归一化。
交叉熵损失与KL散度
交叉熵损失是分类任务中的一种损失函数,用来衡量预测值和真实值这两个分布之间的差异程度。我们先来看几个概念,再来理解交叉熵损失。
假设向量 p 是Softmax之后的预测分布,向量 y 是真实分布,其中 pi,yi 分别是第i个类别的预测分数和真实分数,则:
- 熵: H ( y ) = − ∑ i y i l o g ( y i ) H(y)=-\sum_iy_ilog(y_i) H(y)=−∑iyilog(yi)
- 交叉熵: H ( y , p ) = − ∑ i y i l o g ( p i ) H(y,p)=-\sum_iy_ilog(p_i) H(y,p)=−∑iyilog(pi)
- 相对熵: K L ( y ∣ ∣ p ) = − ∑ i y i l o g p i y i KL(y||p)=-\sum_iy_ilog\frac{p_i}{y_i} KL(y∣∣p)=−∑iyilogyipi,又叫KL散度,度量两个分布之间的不相似性,由于不具有交换性,所以不能叫距离
经过公式推导不难得出三者之间有这样的关系: H ( y , p ) = H ( y ) + K L ( y ∣ ∣ p ) H(y,p)=H(y)+KL(y||p) H(y,p)=H(y)+KL(y∣∣p)。由于分类任务中,真实分布为one-hot形式,即向量y为类似[0,0,1,0,0]T的样子,因此我们能得到以下两点:
(1)H(y)=0,所以 H ( y , p ) = K L ( y ∣ ∣ p ) H(y,p)=KL(y||p) H(y,p)=KL(y∣∣p)
(2) H ( y , p ) = − l o g ( p i ) H(y,p)=-log(p_i) H(y,p)=−log(pi),其中i为真实类别
衡量预测值和真实值之间的距离本质上应该使用相对熵,但是由于上面我们已经证明,在y为one-hot形式下,相对熵等于交叉熵,所以我们就直接用更简单的交叉熵作为损失函数,即公式(2)。当真实分布y不是one-hot形式时,就不能使用交叉熵损失。
交叉熵损失 vs 多类支撑向量机损失
多类支撑向量机损失要求预测结果中,正确类别的分数比其它类别的分数都高于1,则损失为0。而交叉熵损失,计算的是真实类别的预测概率的负对数,它要求预测对的概率尽可能大,而不是简单地比较分数。所以理论上交叉熵损失能够使预测结果更准确。