神经网络训练验证损失的解释

Interpretation of train-validation loss of a Neural Network

我已经训练了一个 LSTM 时间序列预测模型。我使用了一种 early stopping 方法,耐心为 150 个 epoch。 我使用了 0.2 的 dropout,这是火车和验证损失的情节:

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

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

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

所以可能原因如您所说,验证数据具有更简单的模式。我该如何解决这个问题?

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

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

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

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

通常情况恰恰相反。但是由于您使用的是 drop out,验证损失通常小于训练 loss.And 就像其他人建议尝试 k 折交叉验证