我应该使用损失函数还是准确率作为早停策略的度量指标?

13

我正在学习和尝试神经网络,希望从更有经验的人那里获得以下问题的意见:

当我在Keras中训练一个自编码器(使用'mean_squared_error'损失函数和SGD优化器)时,验证损失逐渐下降,而验证准确率上升。到目前为止都很好。

然而,一段时间后,损失仍在持续下降,但准确率突然回到了一个更低的水平。

  • 准确率快速上升并保持高水平然后突然下降是"正常"或者预期行为吗?
  • 如果验证损失仍在下降,我应该在达到最大准确率时停止训练吗?换句话说,使用val_acc或val_loss作为监控早期停止的度量标准?

请参见以下图片:

Loss: (绿色 = 验证,蓝色 = 训练] 输入图像描述

Accuracy: (绿色 = 验证,蓝色 = 训练] 输入图像描述

更新: 下面的评论指引我走向正确方向,我现在认为我理解得更好了。如果有人能确认以下内容是否正确,那就太好了:

  • 准确率指标测量y_pred == Y_true的%数,因此仅对分类有意义。

  • 我的数据是实际和二进制特征的组合。准确度图形上升非常迅速,然后再回落,而损失持续降低的原因是,在大约第5000个周期左右,网络可能正确预测了约50%的二进制特征。当训练继续时,在12000个周期左右,实际和二进制特征的预测一起改善,因此损失继续下降,但仅针对二进制特征的预测略微不正确,导致准确性下降,而损失下降。


你在分类任务中使用MSE吗? - Marcin Możejko
这是一个有趣的情节。虽然我没有自编码器的经验,但我想知道这是否只是过度拟合的一种极端情况。您是否尝试降低网络复杂性(更小或更多的正则化)(也许还要检查增加的验证子集?)我可以想象它会看起来不同。 - sascha
@MarcinMożejko:我正在使用mse,但它是自动编码器,而不是分类器。 - Mark
1
取决于计算的损失是什么(我不知道它们是否总是相同的;MSE和准确度听起来不同)。而且还有规范化的差异(验证会停用辍学和L1/L2规则,我想)。如果计算上不太重,我会尝试这些更改。通常情况下:在调试此类事物时,您可以使用较小的数据集。 - sascha
你说得没错@sascha,但在这里,训练和验证损失“同步移动”。验证损失低于训练损失。 重新阐述我的问题:比较第10K个时期和第15K个时期,损失更低,因此网络在第15K个时期预测出更好的结果。 但是从准确性来看,在第15K个时期,准确性要低得多,因此其预测不太准确。 这不是矛盾吗? - Mark
显示剩余4条评论
1个回答

1
如果预测是实时的或数据是连续的而不是离散的,则使用MSE(均方误差),因为这些值是实时的。
但是,在离散值的情况下(即分类或聚类),请使用准确性,因为给定的值只有0或1。因此,在这里,MSE的概念不适用,而应该使用准确性=错误值的数量/总值*100。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接