【问题标题】:Why we use the loss to update our model but use the metrics to choose the model we need? [closed]为什么我们使用损失来更新我们的模型,但使用指标来选择我们需要的模型? [关闭]
【发布时间】:2020-01-05 11:05:08
【问题描述】:

首先,我很困惑为什么我们使用损失来更新 模型,但使用指标来选择我们需要的模型。

也许不是所有的代码,但我见过的大部分代码都是这样,他们使用 EarlyStopping 监控验证数据上的指标以查找 最佳时期(损失和指标不同)。

既然选择了使用损失来更新模型,为什么不使用 选择模型的损失?毕竟,损失和指标是 不完全相同。它给我的印象是你在做某事 为了这个目的,然后你用另一个指标来评估它, 这让我觉得很奇怪。把回归问题当作一个 例如,当有人使用“mse”作为损失时,他们为什么定义 metrics=['mae'] 并对此进行监控以尽早停止或减少学习 率,我只是无法理解,我想知道有什么优势 这样做?

其次,当您的训练数据是不平衡数据并且问题是 一个分类问题,一些教程会告诉你使用 F1 或 AUC 作为您的指标,他们说这会改善问题 由不平衡数据引起的。我不知道为什么这些指标可以提高 数据不平衡导致的问题。

第三,当有人发送多个指标到 函数compile 中的参数metrics。我不明白 为什么是多个,为什么不是一个。定义多个有什么好处 指标超过一个?

我似乎有太多的问题,他们一直困扰着我 很久了。

感谢您的友好回答。


上面的内容是我之前编辑的。有些人认为我的问题过于宽泛,所以我想重新组织我的语言。

现在假设有一个二分类问题,数据不平衡。正负类的比例为 500:1.

我选择DNN 作为我的分类模型。我选择了cross entropy 作为我的loss。 现在的问题是我应该选择cross entropy 作为我的metric,还是应该选择别的,为什么?

我想说说我从别人的回答中得到的信息,就是当问题是回归问题的时候,一般的metric和loss是可微的,所以其实选择同一个metrice和loss,或者不同的,完全取决于你自己对问题的理解。但是如果问题是分类,我们想要的metric是不可微的,所以我们会选择不同的loss和metric,比如F1AUC,都是不可微的。为什么不直接选择cross entropy作为度量呢?

【问题讨论】:

  • 你的问题太宽泛了,所有这些做法都取决于所学的问题,没有一般性的建议。
  • 不好意思问了一个没有具体场景的问题,好像有点难以回答。但是因为看到某段代码后没有看到这个问题,而是看到了一些不同的问题和一些代码,我突然发现这个问题我看不懂。一般来说,人们使用不同的指标而不是损失并监控它以提前停止以防止过度拟合。仅这一点对我来说一直有点难以理解。
  • 是的,我想告诉您的是,人们使用不同的损失/指标,因为问题不同。例如,对于对象检测,您使用自定义损失和指标,而对于图像分类,您使用交叉熵和准确性。还要考虑到有些人会犯错误,比如监控指标而不是 EarlyStopping 的损失
  • 你的意思是正确的做法是检测损失而不是指标?

标签: python machine-learning keras imbalanced-data


【解决方案1】:

对于 SO 来说,问题可能过于宽泛;不过,这里有几件事希望对您有所帮助...

既然选择了使用损失来更新模型,那为什么不使用损失来选择模型呢?

因为,从数学的角度来看,损失是我们必须优化的数量,而从商业的角度来看,我们需要优化的数量是度量;换句话说,归根结底,作为模型的用户,我们对指标感兴趣,而不是损失(至少对于这两个数量默认不同的设置,例如分类问题)。

也就是说,基于loss来选择模型也是一个完全有效的策略;和往常一样,有一些subjectivity,这取决于具体的问题。

以回归问题为例,当有人使用'mse'作为损失时,他们为什么定义metrics=['mae']

这不是常态,也远非标准;通常,对于回归问题,使用损失作为度量也是非常自然的。我同意你的观点,你提到的那种选择似乎不自然,而且总的来说似乎没有多大意义。请记住,因为有人在博客或某事中使用它并不一定使其“正确”(或一个好主意),但如果不考虑具体案例的可能论点,一般很难争论。

我不知道为什么这些指标 [F1 或 AUC] 可以改善由不平衡数据引起的问题。

它们不会“改进”任何东西 - 它们只是更合适而不是准确性,在严重不平衡的数据集(考虑 99% 多数类)中,一种天真的方法将只是分类一切都作为多数类,这将在模型没有学到任何东西的情况下提供 99% 的准确率。

当有人向函数compile 中的参数指标发送多个指标时,我感到困惑。我不明白为什么是多个,为什么不是一个。定义多个指标优于一个指标有什么好处?

同样,一般来说,没有优势,这也不是常态;但一切都取决于可能的细节。


更新(评论后):将讨论限制在分类设置(因为在回归中,损失和度量可能是同一件事),类似的问题经常出现,我猜是因为损失和各种可用指标(准确度、精确度、召回率、F1 分数等)之间的细微差异尚不清楚;考虑例如你的问题的反面:

Optimizing for accuracy instead of loss in Keras model

以及其中的链接。引用我自己的一位linked answers

损失和准确性是不同的东西;粗略地说,准确度是我们从商业角度真正感兴趣的,而损失是学习算法(优化器)试图从数学角度最小化的目标函数em> 观点。更粗略地说,您可以将损失视为业务目标(准确性)到数学领域的“转换”,这是分类问题中所必需的转换(在回归问题中,通常损失和业务目标是相同,或者至少原则上可以相同,例如 RMSE)...

您也可能会发现Cost function training target versus accuracy desired goal 中的讨论很有帮助。

【讨论】:

  • 你说的其实是我们在考虑度量,但是由于一般要考虑的度量是不可微的,所以我们选择可微的损失函数来更新模型。因此,损失函数是什么并不重要,只要它是可微的,并使模型更好地拟合数据即可。
猜你喜欢
  • 1970-01-01
  • 2014-02-08
  • 2021-02-06
  • 2011-07-12
  • 2017-05-01
  • 2020-12-28
  • 2011-05-27
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多