Answers:
TLDR;监控损失而不是准确性
我将回答我自己的问题,因为我认为收到的答案没有抓住重点,并且某天某人可能遇到相同的问题。
首先,让我快速澄清一下,在训练神经网络时使用早期停止是完全正常的(请参阅Goodfellow等人的《深度学习》一书中的相关章节,大多数DL论文以及keras的EarlyStopping回调文档)。
现在,关于要监视的数量:宁愿损失多于准确性。为什么?损失量化了模型对预测的确定性(在正确的类别中基本上具有接近1的值,在其他类别中具有接近0的值)。准确性仅说明正确预测的数量。同样,使用硬性预测而不是概率的任何度量都有相同的问题。
显然,无论最终选择什么指标,都必须在验证集而不是训练集上进行计算(否则,您完全会失去首先使用EarlyStopping的意义)
我认为,这是主观的且针对特定问题的。您应该将头脑中最重要的因素用作驱动指标,因为这可能使您决定如何更好地关注模型。
人们可以计算出的大多数指标在许多方面都是相关/相似的:例如,如果您使用MSE进行损失,然后记录MAPE(平均平均百分比误差)或简单的损失,它们将为您提供可比较的损失曲线。
例如,如果您要在报告中/向老板等报告F1分数(并假设这是他们真正关心的),则使用该指标最有意义。例如,F1分数考虑到精度和召回率,即它描述了两个更细粒度的指标之间的关系。
综合考虑这些因素,除了正常损失外,计算分数可能对概述很有帮助,并且可以查看在训练迭代过程中如何优化最终指标。这种关系也许可以让您更深入地了解问题,
通常最好尝试几种选择,但是,针对验证损失进行优化可能会使训练运行更长的时间,最终可能还会产生更好的F1得分。精确度和召回率可能会在一些局部最小值附近摇摆,从而产生几乎静态的F1得分-因此您将停止训练。如果您已经针对纯损失进行了优化,则可能记录了足够的损失波动,从而可以进行更长的训练。
我目前正在训练神经网络,我无法决定使用哪种方法来实现我的“早期停止”标准:验证损失或在验证集上计算出的诸如准确性/ f1score / auc /之类的指标。
如果您正在训练深层网络,强烈建议您不要使用提前停止。在深度学习中,这不是很习惯。取而代之的是,您可以采用其他技术(例如辍学)来很好地概括。如果您坚持这样做,则选择标准取决于您的任务。如果数据不平衡,则必须使用F1
分数并在交叉验证数据中对其进行评估。如果您有平衡的数据,请尝试对交叉验证数据使用准确性。其他技术在很大程度上取决于您的任务。
我强烈建议您找到一个非常适合您数据的模型,然后再采用辍学方法。这是人们用于深度模型的最习惯的事情。
cross_entropy
损耗比MSE
或更好MAE
。请查看本文的总结部分,以及有关stats的这篇文章。