让模型训练大量 epoch 有什么缺点吗?

数据挖掘 神经网络 时间序列 过拟合 rnn 数据增强
2022-03-06 11:34:49

我创建了一个模型来解决时间序列预测问题。我可以用来训练模型的时间序列数量有限,因此我决定扩充数据。我使用的数据增强策略非常基本,但已证明可以提高模型的准确性。

我使用 keras 中的 fit_generator 函数编写了自己的 data_generator 来训练我的模型。本质上,它吸收了我拥有的整个训练数据集,对所有时间序列进行了洗牌,并且增强过程专门在每个批次中进行。在每个批次中,我根据批次中的每个时间序列随机选择起点和终点,以便每个批次包含批次内每个系列的不同长度切片。这显然会产生几乎无穷无尽的数据流,但它完全依赖于模型运行的时期数,因为数据集没有预先增加。没有噪声或任何东西应用于数据集,增强纯粹来自改变时间序列的长度以及序列的起点和终点。

我观察到我的损失随着时间的推移继续减少,我尝试了 100、500、1000、5000 和 10,000 个 epoch。一般来说,模型预测的准确性确实会变得更好,但在某些时候收益会递减。很难说什么时候我还在调整模型架构和超参数。

这种增强策略是否会影响我如何解释模型的损失?随着我训练模型的时间越长,它看到的“新”数据就越多,而不是不断地看到相同的数据并对其进行训练。

2个回答

如果您可以确定模型没有重复看到相同的实例,那么很有可能您的模型没有过度拟合,而这正是您可以从验证集中测量的结果,您应该会看到持续下降的损失,最终将趋于平稳在您的模型最终达到的局部最优处,这是给定起始条件的最佳可能解决方案。如果您的模型会过度拟合,那么您应该会看到损失函数开始增加以进行验证。

了解您是否过度拟合的最佳方法是获取您的模型,然后将其应用于全新的数据集并测量性能。如果性能好,那么你很好。

ps 为了克服陷入糟糕的最佳状态,您可以训练多个模型,每个模型都具有不同的模型参数起始条件,然后制作一个集成分类器。

我有一个有点相似的模型,只是出于效率考虑,我限制了训练的 epoch 数。我让模型训练了大约 40 个 epoch,同时我在训练中加入了 drop-out 特征。就我而言,它是一个三层全连接网络。

使用验证集,我从 epoch 中保存模型,这可以改善验证损失,但让它完成完整的 40 个 epoch,因为我相信有时它可以收敛到局部最小值,然后找到更好的最优值,因为有一个 drop-out。

在您的情况下,我认为长度变化也会引入随机化并防止过度拟合(类似于辍学)。但我认为您必须监控验证损失,因为您的模型可能会收敛到具有更好训练损失的点,但验证损失可能不是最优的......