理解损失和准确度曲线

数据挖掘 深度学习 分类 训练 损失函数 准确性
2021-09-28 05:30:13

这是我一遍又一遍遇到的问题。没有意义的损失(在这种情况下为交叉熵)和准确度图。这是一个示例: 训练和验证损失和准确度图 在这里,我正在 CIFAR10 上训练 ReNet18。优化器是 SGD,学习率为 0.1,Nesterov 动量为 0.9,权重衰减为 1e-4。在 epoch 60、120、160 时,学习率降低到 1/5。

  • 最初的曲线都很漂亮,花花公子;这意味着训练和验证损失正在减少,准确性正在提高。
  • 在 epoch 65~70 左右,你会看到过度拟合的迹象;作为 val。损失开始增加和 val。准确性开始下降(红色框)。这里仍然没有什么奇怪的。

现在有两件事对我来说没有意义:

  1. 在 epoch 120 之后(LR 减小)val。损失和准确性在几个时期(绿色框)开始提高。为什么降低学习率会突然提高已经过拟合的模型的验证性能?!我预计 LR 的下降实际上会加速过度拟合。

  2. 在 epoch ~125(蓝色框)之后,损失开始上升,但准确性不断提高。我知道在准确性保持不变的情况下,损失可能会增加(通过模型对其错误预测更有信心或对其正确预测的信心降低)。但我不明白在损失增加的情况下如何提高准确性。

2个回答

仅以下几点

  • 红框:严格来说,当模型在训练中的表现优于验证集时,就会发生过拟合。因此,我会在这里说它比红色表示的更早开始,它可能确实与模型找到仅适用于训练集的更好参数有关。值得注意的是,列车损失没有显着减少。
  • 绿框:在训练中,损失显着下降。发现明显更好的最小值意味着它也可能适用于验证集,并且实际上反映在 val 损失曲线中。尽管如此,损失并不比红框开头的检查点好。
  • 蓝框:损失和准确性不是相互依赖的指标。准确度是对正确猜测数量(多少)的度量,而损失是对给定数据点与正确猜测的距离(离多远)的度量。

通常,较小的 LR 意味着模型在特征空间中跳得很远的“自由度”较小。因此,看到显着和快速损失减少的机会更少。正如您所建议的,您的 val 损失有轻微的向上过度拟合趋势,但与较小的 LR 在训练中允许的一样显着或快速。

另外,请注意,对于大量训练(约 55 个 epoch),您的 train loss 高于 val loss。您可能想要调查您的模型是如何进行正则化的,因为这可能会影响您的学习曲线,从而帮助您更好地推断诊断。例如,在 PyTorch 中,模型状态(model.train() 和 model.eval())之间的训练损失显着不同。

损失是基于您的训练和验证数据集的错误总和,而准确度是使用验证数据集获得的良好结果的百分比。

所以,如果你的损失在减少并且你的准确率在增加,这意味着它在你的训练数据集中有更差的结果,但在你的验证数据集中有更好的结果。

可能有一种方法可以定义学习标准,更多地关注损失或准确性,但我不知道它是如何工作的。