【问题标题】:Interpretation of train-validation loss of a Neural Network解释神经网络的训练验证损失
【发布时间】:2018-10-01 03:34:11
【问题描述】:

我已经为时间序列预测训练了一个 LSTM 模型。我使用了一种提前停止的方法,有 150 个 epoch 的耐心。 我使用了 0.2 的 dropout,这是训练和验证损失的图:

提前停止方法在 650 个 epoch 后停止训练,并在 460 个 epoch 左右保存最佳权重,其中验证损失最好。

我的问题是: 火车损失总是高于验证损失是否正常? 我知道如果相反(火车上方的验证损失),那将是过度拟合的迹象。 但是这个案子呢?

编辑: 我的数据集是具有每小时时间频率的时间序列。它由 35000 个实例组成。我已将数据分成 80% 的训练和 20% 的验证,但按时间顺序排列。因此,例如,培训将包含 2017 年初的数据,并验证从 2017 年到年底的数据。 我通过平均 15 天的数据创建了这个图,结果如下:

所以也许原因是正如你所说,验证数据有一个更简单的模式。我该如何解决这个问题?

【问题讨论】:

  • 你在做k-fold交叉验证吗?您的训练集和验证集的大小是多少?
  • 我想知道您是如何拆分数据的。这是时间序列预测。你在做移动窗口、随机分割、K-fold CV 等吗?我刚刚想到的一个场景是您的验证数据的输入周期比训练数据长。或者可能训练数据比验证集更老,因此验证集具有更好的数据质量。
  • 数据集的总大小为 35000 个实例。我将其中的 80% 用于训练,20% 用于验证。我没有做k fold CV,因为训练时间已经很长了。随机拆分是什么意思?就我而言,我的数据是时间序列,所以我不做任何随机拆分
  • 也看看我编辑的帖子

标签: python neural-network keras lstm loss


【解决方案1】:

在大多数情况下,验证损失应该高于训练损失,因为模型可以访问训练集中的标签。事实上,训练新网络的一个好习惯是使用一小部分数据,看看训练损失是否可以收敛到 0(完全过拟合训练集)。如果不是,这意味着这个模型在某种程度上无法记忆数据。

让我们回到你的问题。我认为验证损失小于训练损失的观察发生了。 但这可能不是因为您的模型,而是您如何拆分数据。请考虑数据集中有两种类型的模式(A 和 B)。如果你以训练集同时包含模式 A 和模式 B 的方式进行拆分,而小验证集只包含模式 B。在这种情况下,如果 B 更容易被识别,那么你可能会得到更高的训练损失。

在一个更极端的例子中,模式 A 几乎无法识别,但数据集中只有 1%。并且模型可以识别所有的模式B。如果验证集恰好只有模式B,那么验证损失会更小。

正如 alex 所提到的,使用 K-fold 是一个很好的解决方案,可以确保每个样本都用作验证数据和训练数据。此外,打印出混淆矩阵以确保所有标签都相对平衡是另一种尝试的方法。

【讨论】:

  • 好的,我明白了。试着看看我编辑的帖子。
【解决方案2】:

通常情况正好相反。但是由于您使用的是 drop out,因此验证损失小于训练损失是很常见的。就像其他人建议尝试 k 折交叉验证一样

【讨论】:

  • 是的,你是对的。在这种情况下,这只是由于辍学。如果我删除它,我的验证错误高于训练错误
猜你喜欢
  • 2017-06-14
  • 2021-12-12
  • 2020-10-17
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多