谈一谈交叉熵损失函数

关于损失函数的概念以及种类特点,可参看博主的博客:常见的损失函数总结,谈到交叉熵,就不得不提信息熵的概念,同样可参看博主之前的博客:决策树之基 —— ID3 算法,博文中提到了信息熵的相关知识。有了上述两篇博文作为基础,此文不再赘述相关概念。

交叉熵的离散函数形式

交叉熵(cross entropy)是用来评估当前训练得到的概率分布与真实分布的差异情况,减少交叉熵损失就是在提高模型的预测准确率。其离散函数形式为:

H ( p , q ) = p ( x ) l o g q ( x )

这里, p ( x ) 是真实分布, q ( x ) 是通过数据计算的估计概率。

需要说明的是,交叉熵的值越大,这种差异程度也就越大。

在二分类模型中,由于目标的可能性有两种,因此需要分别计算预测为正例和负例概率下的交叉熵,公式为:

[ y l o g 1 y y l o g 1 1 ] + [ ( 1 y ) l o g 1 1 y ( 1 y ) l o g 1 1 0 ]

= [ y l o g y + ( 1 y ) l o g ( 1 y ) ]

其中 y l o g y 是正例的交叉熵, ( 1 y ) l o g ( 1 y ) 则是负例的交叉熵,它们之和便构成了二分类模型的交叉熵损失函数。

两种交叉熵损失函数的比较

下面来比较两种交叉熵损失函数的异同。在机器学习中,会看到两个不一样的交叉熵损失函数,分别为:

1 t j l o g ( y j ) t j j

2 t i l o g ( y i ) + ( 1 t i ) l o g ( 1 y i )

该博文一开头讲到了交叉熵损失函数的离散形式,实质上,交叉熵是用来描述两个分布的距离的,神经网络训练的目的就是使 g ( x ) 逼近 p ( x )

现在来看 softmax 作为最后一层的情况。 g ( x ) 就是最后一层的输出 y 。 p ( x ) 就是我们的 one-hot 标签。我们带入交叉熵的定义中算一下,就会得到第一个式子。

再来看 sigmoid 作为最后一层的情况。sigmoid 作为最后一层输出的话,应该将最后一层的每个神经元看作一个分布,对应的 target 属于二项分布(target的值代表是这个类的概率),那么第 i 个神经元交叉熵为:

t i l o g y i + ( 1 t i ) l o g ( 1 y i )

所以,最后一层总的交叉熵损失函数就是上述所说的第二个式子。

对这两种交叉熵损失函数的总结:这两个交叉熵损失函数对应不同的最后一层的输出。第一个对应的最后一层是 softmax,第二个对应的最后一层是 sigmoid。

交叉熵的优势

最后来讲讲交叉熵的优势。在模型中有时候会使用均方差作为损失函数,但是当激活函数为 sigmoid 时,由于其在上边界和下边界的斜率下降十分之快。事实上,一般 sigmoid 函数的斜率最大值也只有0.25。因此,当训练结果接近真实值时会因为梯度算子极小,使得模型的收敛速度变得非常慢。而由于交叉熵损失函数为对数函数,在接近上边界的时候,其仍然可以保持在高梯度状态,因此模型的收敛速度不会受到影响

该博文主要参考资料:
[1] 理解交叉熵损失函数
[2] 两种交叉熵损失函数的异同
[3] 如何直观理解交叉熵及其优势?
[4] 常见的损失函数总结

发布了225 篇原创文章 · 获赞 648 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/huangfei711/article/details/80407666