深度学习中的训练损失和验证损失

25
请问您能指导我如何解释以下结果吗? 1)损失值小于验证损失值 2)损失值大于验证损失值
似乎在训练模型时,训练损失值应该始终小于验证损失值。但是,这两种情况都可能发生。

你尝试了什么以达到你想要的结果?关于你的问题,你的研究有何显示?能否提供你尝试过的代码?阅读如何提出好问题期望有多少调查研究工作以及如何创建一个最小完整可验证的示例这些内容可以帮助你改善你的问题。 - Geshode
C2W1L02诊断偏差与方差问题 也许对您有所帮助。 - Hossein Kashiani
6个回答

35

机器学习中真正的基本问题。

If validation loss >> training loss you can call it overfitting.
If validation loss  > training loss you can call it some overfitting.
If validation loss  < training loss you can call it some underfitting.
If validation loss << training loss you can call it underfitting.

您的目标是使验证损失尽可能低。有些过度拟合通常是件好事。最重要的是最终验证损失是否达到了最低点。

当训练损失较低时,这种情况经常发生。

另请查看如何防止过度拟合

输入图像描述


20

在机器学习和深度学习中,基本上有三种情况:

1)欠拟合

这是仅有的一种情况,其中损失值 > 验证损失值,但仅略高于后者。如果损失值远高于验证损失值,请发布您的代码和数据,以便我们查看。

2)过拟合

损失值 << 验证损失值

这意味着您的模型非常适配训练数据,但完全不适配验证数据,换句话说,它不能正确地推广到未见过的数据。

3)完美拟合

损失值 == 验证损失值

如果两个值最终大致相同,并且值正在收敛(随时间绘制损失),那么很有可能您做得很好。


你的编号与 OP 的问题相反。此外,您确定“loss> validation_loss”可以视为欠拟合吗? - pietz

5

1) 在训练数据上,您的模型表现比在未知验证数据上更好。略微过拟合是正常的,但高程度的过拟合需要使用压缩技术来确保泛化。

2) 您的模型在验证数据上表现更好。这可能是因为您在训练数据上使用了增强技术,使得预测与未修改的验证样本相比更难。也可能是因为您的训练损失是在一个epoch内计算的移动平均值,而验证损失是在同一epoch的学习阶段之后计算的。


对于损失小于验证损失的第二种情况,我理解训练数据增强的第一个原因,但需要更多关于移动平均的第二个原因的澄清。有没有避免这种情况的方法? - Mohammed Awney
1
在训练过程中,诸如Keras之类的框架会将当前的训练损失输出到控制台上。该损失是计算所有处理批次的移动平均值,这意味着在早期训练阶段,当损失快速下降时,一个epoch的第一批次的损失会比最后一批次高得多。当epoch结束时,显示的训练损失将不代表epoch结束时的训练损失,而是从epoch开始到结束的平均训练损失。因此,它往往比验证损失高,后者是完全在epoch结束时计算的。 - pietz

1

Aurélien Geron发布了一篇关于这一现象的Twitter帖子。总结如下:

  • 正则化通常仅在训练过程中应用,而不是在验证和测试过程中应用。例如,如果您使用dropout,则模型在训练过程中可用的特征较少。
  • 训练损失在每个批次之后进行测量,而验证损失在每个时期之后进行测量,因此平均而言,训练损失比验证损失提前½个时期进行测量。这意味着验证损失获得了额外的梯度更新。
  • 验证集可能比训练集更容易。例如,数据增强通常会扭曲或遮挡图像的某些部分。如果在采样过程中运气不佳(验证集包含太多易处理的类别或示例),或者验证集太小,或者训练集泄漏到验证集中,也可能发生这种情况。

0
如果您的验证损失小于训练损失,那么您没有正确地拆分训练数据。这表明训练和验证集的分布不同。理想情况下应该是相同的。此外,良好的拟合:在理想情况下,训练和验证损失都会下降并稳定在指定点,表明最佳拟合,即既不过度拟合也不欠拟合的模型。

0

我用this essay的帮助回答了你的问题。

这可能有很多原因。

1:如果你使用正则化,正则化的数学公式会导致将权重加到损失上。因此,训练损失远高于验证损失。然而,在几次迭代后,训练和验证损失之间的差距会缩小。请注意,较低的损失并不一定意味着更高的准确性。

2:训练损失是在每个批次迭代期间每个时代计算的,但验证损失是在每个时代结束时计算的。这可能会使验证损失低于训练损失。但是,在许多迭代之后,验证损失超过训练损失。在这种情况下,较低的损失并不意味着更高的准确性。

3:另一个原因;数据集中存在噪声是不可避免的。有时我们的训练数据集包含比我们的验证数据集更多的异常值。因此,模型可以更容易地预测验证标签。在这种情况下,模型在验证方面既具有较低的损失又具有较高的准确性。

您可以在这里找到更详细的关于您问题的解释。


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