指标函数(Metrics Function)和损失函数(Loss Function)的区别是什么?
指标(metrics)和损失函数(loss function)在深度学习和机器学习里面非常常见,很多时候他们的公式都似乎是一样的,在编写程序的时候,二者的区别好像也不是很大。那为什么还会有这两种不同的概念出现呢?本文将简单介绍一下二者的区别和应用。
一、简介
在深度学习或者机器学习领域中,评分函数(scoring function)主要有三个目的:
性能评估(Performance evaluation):简单说就是我们的模型做得怎么样?也就是需要一个指标来比较不同的模型的效果;
模型优化:也就是通过什么方法可以提升模型的效果,优化模型的性能;
这两个东西既互相联系,也有一定的区别。也于我们说的这两个函数(指标函数与损失函数)之间有很大的关系。而我们上面所述的两个函数也就是评分函数下两个类别。
二、性能评估(Performance evaluation)
一个性能指标告诉我们,我们的模型做得如何。性能评估的目标是让一个人(你、我、不管是谁)读到这个分数并掌握一些关于我们模型的信息。
衡量标准应该设计得对人有意义,并有效地传达信息。
这里的指标函数就是用来描述模型性能的东西。例如,均方根误差(Mean squared error,MSE)就是一个非常有名的指标函数(metrics),通过这个指标,我们可以清楚看到我们预测的结果与实际值之间的偏差。因此,指标函数(metrics)就是用来度量模型性能的函数。
三、模型优化(Model optimization)
模型优化是我们另一个关注的重点内容。也是评分函数的另一个应用。这里需要用到的就是损失函数(loss function)了。
当你通过数据拟合一个模型时,你基本上是在微调一些参数,这些参数决定了模型的预测能力,以便它尽可能地接近你的数据。
损失函数就是用来描述你模型预测性能变化的东西。当我们的模型在某一个时刻有了一个预测能力的时候,损失函数会告诉模型参数应该朝哪个方向变化。因此,需要注意的是,损失函数需要能够指导我们的优化算法对模型进行优化。以最常用的梯度下降(gradient descent)为例,在这种优化器下,损失函数必须是可微分的(differentiable)。显然,并不是所有的metrics都是可微的。因此,虽然metrics能够度量模型的性能,但是如果它不能帮助我们指导模型优化方向,那就不是损失函数。当然,我们目前常见的大多数指标函数都可以当损失函数使用。
经过这种分析,我们还可以看到,大部分时候我们可以根据我们的需要自定义一个指标函数来度量模型的性能,但是却不能任意用一个损失函数来作为模型优化的参数。因为度量函数只需要符合我们的目标,可以评估模型好坏即可,但是损失函数的设计会影响的模型优化的效果,例如损失函数是否平滑等对于优化器来说都十分重要。因此,损失函数的设计必须易于优化且与优化的目标一致。
参考1:https://towardsdatascience.com/whats-the-difference-between-a-metric-and-a-loss-function-38cac955f46d
参考2:https://stackoverflow.com/questions/48280873/what-is-the-difference-between-loss-function-and-metric-in-keras
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
