因验证损失或准确性而提前停止?

数据挖掘 机器学习 神经网络 深度学习 分类
2021-09-20 21:31:46

我目前正在训练一个神经网络,我无法决定使用哪个来实现我的 Early Stopping 标准:验证损失或准确度/f1score/auc/验证集上计算的任何指标。

在我的研究中,我发现了捍卫这两种观点的文章。Keras 似乎默认验证损失,但我也遇到了相反方法的令人信服的答案(例如这里)。

任何人都知道何时最好使用验证损失以及何时使用特定指标?

3个回答

TLDR;监控损失而不是准确性

我会回答我自己的问题,因为我认为收到的答案没有抓住重点,有一天可能有人会遇到同样的问题。

首先,让我快速澄清一下,在训练神经网络时使用提前停止是完全正常的(请参阅 Goodfellow 等人的深度学习书籍中的相关部分、大多数 DL 论文以及 keras 的 EarlyStopping 回调的文档)。

现在,关于要监控的数量:更喜欢损失而不是准确性。为什么?损失量化了模型对预测的确定程度(基本上在正确的类中具有接近 1 的值,在其他类中接近 0)。准确性仅说明正确预测的数量。类似地,任何使用硬预测而不是概率的指标都有同样的问题。

显然,无论您最终选择什么指标,都必须在验证集而不是训练集上进行计算(否则,您一开始就完全错过了使用 EarlyStopping 的意义)

在我看来,这是主观的和特定的问题。您应该使用您心中最重要的因素作为驱动指标,因为这可能会使您决定如何更好地改变模型。

大多数可以计算的指标将在许多方面相关/相似:例如,如果您使用 MSE 作为损失,则记录 MAPE(平均百分比误差)或简单L1损失,他们会给你可比的损失曲线。

例如,如果您将在报告中/向您的老板等报告F1 分数(并假设这是他们真正关心的),那么使用该指标可能最有意义。例如,F1 分数将精度召回率考虑在内,即它描述了两个更细粒度的指标之间的关系。

将这些东西放在一起,计算除正常损失之外的分数可能对概述和了解您的最终指标在训练迭代过程中如何优化很有帮助。这种关系也许可以让你更深入地了解问题,

然而,通常最好尝试几个选项,因为对验证损失进行优化可能会使训练运行更长时间,最终也可能产生更好的F1-score精度和召回率可能会在一些局部最小值附近摇摆,产生几乎静态的 F1 分数 - 所以你会停止训练。如果你一直在优化纯损失,你可能已经记录了足够的损失波动,让你可以训练更长时间。

我目前正在训练一个神经网络,我无法决定使用哪个来实现我的 Early Stopping 标准:验证损失或准确度/f1score/auc/验证集上计算的任何指标。

如果你正在训练一个深度网络,我强烈建议你不要使用 early stop。在深度学习中,这不是很习惯。相反,您可以使用其他技术(例如 dropout)来很好地进行泛化。如果您坚持这一点,那么选择标准取决于您的任务。如果您有不平衡的数据,则必须使用F1分数并在交叉验证数据上对其进行评估。如果您有平衡数据,请尝试对交叉验证数据使用准确性。其他技术高度取决于您的任务。

我强烈建议您找到一个非常适合您的数据的模型,然后再使用 dropout。这是人们用于深度模型的最习惯做法。