处理 LSTM 过拟合

机器算法验证 神经网络 过拟合 lstm 循环神经网络 模型评估
2022-03-26 20:53:00

我正在执行一个使用 LSTM 预测时间序列数据的项目。我用随机采样的数据(每条大约 920,000 行)尝试了 3 次实验

我已经堆叠了 3 层 LSTM 单元,使用了 l1(0.01) 正则化,使用了 dropout,尝试为每个 epoch 打乱数据集,使用 ADAM 优化器..

但我得到的误差曲线如下,这似乎意味着过度拟合

x轴:时代

y轴:均方误差

蓝线表示测试集,橙色线表示训练集

3个实验

有人可以就我应该尝试什么提出建议吗?也许这是数据集本身的问题?

2个回答

是的,这是过度拟合,因为测试误差远大于训练误差。

三个堆叠的 LSTM 很难训练。尝试一个更简单的网络,然后尝试一个更复杂的网络。请记住,添加 LSTM 层的趋势是增加存储单元的大小。链接的记忆遗忘单元增强了记忆凸性,使训练更深的 LSTM 网络变得更容易。

学习率调整甚至调度也可能有所帮助。

一般来说,拟合神经网络需要大量的实验和改进。寻找最佳网络需要同时调整大量拨号。

您的 NN 不一定是过拟合的。通常,当它过拟合时,验证损失会随着神经网络记住训练集而增加,你的图肯定不会那样做。仅训练和验证损失之间的差异可能仅意味着验证集更难或具有不同的分布(看不见的数据)。另外,我不知道错误是什么意思,但也许 0.15 差别不大,只是缩放问题。

作为建议,您可以尝试一些对我有用的方法:

  1. 为您的 NN 添加一个小的 dropout(例如,从 0.1 开始);
  2. 您可以将 dropout 添加到您的 RNN,但它更棘手,您必须为每个步骤使用相同的掩码,而不是每个步骤的随机掩码;
  3. 您可以尝试 NN 的大小,也许答案不是让它变小,而是实际上更大,这样您的 NN 就可以学习更复杂的功能。要知道它是欠拟合还是过拟合,请尝试绘制预测与真实的图;
  4. 您可以进行功能选择/工程——尝试添加更多功能或删除您可能认为只会增加噪音的功能;
  5. 如果你的 NN 只是输入 -> rnn 层 -> 输出,请尝试在 rNN 之前/之后添加一些全连接层,并使用 MISH 作为激活函数,而不是 ReLU;
  6. 对于优化器,而不是 Adam,请尝试使用 Ranger。
  7. 问题可能是损失函数。也许您的标签非常稀疏(很多零),并且模型学会了预测所有零(开始时突然下降)并且在那之后无法进一步发展。要解决此类情况,您可以尝试不同的度量,例如 BCE 上的 pos_weight、dice loss、focal loss 等。

祝你好运!