验证准确度总是接近训练准确度

数据挖掘 lstm 交叉验证 训练 准确性 超参数调整
2022-02-12 13:24:34

我正在尝试调整 LSTM 的超参数,我必须进行时间序列预测。我注意到我的验证准确度总是非常接近我的训练准确度。我不确定这是好是坏,或者它一般意味着什么?

目前,我将所有超参数保持不变,仅将 LSTM 层中的单元数量从 [1, 5, 26] 改变。

我希望 26 个单元能给我带来好结果,并且后来添加了单元 1 和 5 来帮助我进行调查。我还期望看到我的验证准确度比我的训练准确度差,但事实似乎并非如此。我的验证准确度很好地跟踪了训练准确度。这有什么需要担心的吗?

下图显示了平均损失、平均训练和验证准确度。训练验证比较

从图中可以看出,每个单元的训练和验证准确度都非常接近。为什么是这样?这是否意味着总的来说我的模型应该很好地概括看不见的数据,因为没有太大的差异?

显然,模型的准确度总体上还不是很好,它需要一些调整,但为了进行调整过程,我更希望看到训练数据和验证数据之间的一些差异,而不是它们会在很大程度上保持相似。

编辑:

根据要求提供更多信息。用于每个模型的超参数可以在图表的图例中看到。这是一个更新的图,它显示了随着神经元数量和批量大小的变化而产生的更大的准确度变化:

训练验证准确度

从图中可以看出,模型精度似乎在批量大小为 1 和 39 个神经元时收敛最快。然而,训练和验证准确度相互密切跟踪是一个特点。我没想到独立改变两个超参数会导致这样的一致结果。

在我正在处理的这个问题中,模型是为一个时间序列提供预测。我将它用作“玩具”问题,以尝试了解哪种模型适合我的特定问题。

我总共有 315 个时间序列数据点。我将最后 52 个作为暂存测试集排除在外,到目前为止我还没有看过。52 分,因为我正在做每周预测。然后我留下最后 52 个点作为验证集。由于时间依赖性,我无法使用 KFold 交叉验证等验证方法。因此,我使用了一种称为滚动原点分析的方法,这里对此进行了很好的解释(请参阅预测性能)。这很好地模拟了模型在实践中的使用方式,我的准确度是使用修改后的 sMAPE 公式进行多步预测的测量值。

本质上,这意味着我训练(在这种情况下)27 个单独的模型。我的预测范围是 26,所以我要做的是获取我的训练数据并获取验证集的前 26 个点。

我在训练数据(即 131 个样本)上训练了我的第一个模型,并针对 1 个样本进行了验证。

我训练下一个模型,它使用相同的训练数据,只是它被移动了一个,所以训练集的第一个点被删除,验证集的第一个点被附加到训练集的末尾。然后验证集也被移动了一个。举个简单的例子(数字代表时间序列的索引):

Model1 train: [1, 2, 3, 4, 5], val: [6, 7, 8]

Model2 火车:[2, 3, 4, 5, 6],val:[7, 8, 9]

因此,图中显示的平均准确度是每个模型针对其自己的验证集计算的准确度的平均值。

因此,每个模型都在相同数量的数据上进行训练,并且每个模型都完全重新拟合,即 Model1 不与 Model2 共享任何信息。

以这种方式计算准确性是因为我没有太多数据,这是我发现的最好的方法,它允许我获得两个以上的验证集和两个以上的测试集。

2个回答

训练准确度和验证准确度接近这一事实无需担心。正如您所提到的,这意味着您的模型可以很好地泛化。

需要担心的是训练精度低。似乎您的模型对数据的拟合不足,但方差很小。这是具有高偏差和低方差的模型的典型场景。

偏差是训练数据中的误差(无论你测量这个误差)。它会告诉您模型对可见数据的预测效果如何。高偏差意味着性能差(拟合不足)。方差是训练数据和验证数据之间的性能差异。如果差异很大(训练中的性能远优于验证中的性能),则模型具有高方差(过度拟合)。

通常,减少偏差意味着增加方差(偏差-方差权衡),然后,当您在训练中获得更好的结果时,验证准确度可能会降低。但是,如果模型设计得很好,您最终可能会得到低偏差和低方差。

1

在我看来,您的数据点非常少......您正在使用深度学习,这是一种数据密集型技术,315 个点是一个非常小的数据集......

2

这是一个玩具示例,您的数据来自哪里?如果您创建了它(例如,正弦),问题可能很容易......我希望您不会试图预测随机游走:在时间序列中,仅查看 MAE 并不总是最好的主意。在随机游走中,您可能正在预测一个与前一个值相同的样本,但误差仍然变小......尝试绘制真实曲线和预测曲线......

3

对于第一个 epoch,验证准确度高于训练中的准确度。这很奇怪......如果您的模型使用 dropout 并且您没有在验证阶段禁用它,则可能会发生这种情况。

4

再一次,在训练集和测试集中具有相同的准确性并不是一个坏症状。你必须根据你的数据、你的模型、你的训练技术等等来评估你的结果……

评论:

大多数时候,我遇到深度学习模型的问题来自于糟糕的数据处理过程(数据收集、数据清理、数据拆分、数据处理等)以及对结果的误导性解释,而不是来自模型本身。请不要误会,我并不是说你的情况有必要......