在哪些情况下分类交叉熵优于均方误差?

人工智能 机器学习 比较 目标函数 均方误差 分类交叉熵
2021-10-26 15:20:45

在我的代码中,我通常使用均方误差 (MSE),但 TensorFlow 教程总是使用分类交叉熵 (CCE)。CCE损失函数是否优于MSE?还是仅在某些情况下更好?

3个回答

根据经验,均方误差 (MSE)更适合回归问题,即输出为数值(即浮点数或通常为实数)的问题。但是,原则上,您也可以将 MSE 用于分类问题(尽管这可能不是一个好主意)。MSE 前面可以是sigmoid 函数,它输出一个数字p[0,1],可以解释为输入属于某一类的概率,因此输入属于另一类的概率为1p.

类似地,交叉熵(CE)主要用于分类问题,即输出可以属于一组离散类的问题。CE 损失函数通常针对分类和分类问题分别实现。在第一种情况下,它被称为二元交叉熵(BCE),在第二种情况下,它被称为分类交叉熵(CCE)。CE 要求其输入是分布,因此 CCE 之前通常有一个softmax 函数(这样得到的向量代表一个概率分布),而 BCE 之前通常有一个 sigmoid。

另请参阅为什么均方误差是经验分布和高斯模型之间的交叉熵?有关 MSE 和交叉熵之间关系的更多详细信息。如果您使用 TensorFlow (TF) 或 Keras,另请参阅如何在 TensorFlow 中选择交叉熵损失?,它为您提供了一些关于如何为您的(分类)问题选择交叉熵函数的适当 TF 实现的指南。另请参阅我应该对二元预测使用分类交叉熵还是二元交叉熵损失?在回归的背景下,交叉熵成本是否有意义?.

在分类问题中,当我们预测标签错误时,最好得到更高的误差和更高的误差斜率。

正如您在图中看到的那样,通过使用交叉熵,当算法预测标签错误时会出现高误差,而当预测标签足够接近时,会出现小误差,因此它有助于我们更好地分离预测的类。

在此处输入图像描述

我们有时会看到二元交叉熵 (BCE) 损失用于回归问题。这篇文章是我对使用 BCE 解决回归问题的看法。

下图是BCE的地块,tlog(x)(1t)log(1x), 对于几个目标值t=0.0,0.1,...,0.5. (图为t>0.5是那些的镜像t<0.5,所以我省略了它们。)

如您所见,当目标值t更接近介质(t=0.5),BCE 在其最小值附近更平坦(xt)。这意味着当目标值是中间值时,BCE 的“焦点”较少。

因此,当边缘值 (t=0t=1) 对您来说特别重要,但中间值之间的差异 (t=0.4t=0.5,例如)对你来说不是很重要。

另一方面,当 target 的任何值对您同样重要时,BCE 将不是一个好的选择。另一个损失函数,例如 MSE,更适合您。几个目标值的二元交叉熵

补充说明:如果你使用 BCE 处理回归问题,最好减去xlog(x)(1x)log(1x)从原始 BCE 表达式,使得当预测值与目标值重合时损失为零,x=t. 这对于反向传播无关紧要,但可以方便地监控该值。

补充说明:在我提交这篇文章后,我开始认为我们可以调整损失函数在其最小值附近的“焦点”程度,只需将目标值的任意因子相乘即可。例如,我们可以调整 BCE 损失LBCE(x,t)通过使它f(t)LBCE(x,t)在哪里f(t)是你想要的任何因素。这个因素调整损失在每个目标值的最小值附近的焦点t.