我现在正在使用 Keras 来训练我的 LSTM 模型来解决时间序列问题。我的激活函数是线性的,优化器是 Rmsprop。然而,我观察到训练损失随着时间的推移缓慢下降并围绕一个小值波动的趋势,而验证损失则以很大的方差上下跳跃。
因此,我提出了两个问题:1、validation loss会影响训练过程吗?如果学习率波动很大,算法会查看验证损失并减慢学习率吗?2. 如何使模型更稳定,以便返回更稳定的验证损失值?
谢谢
我现在正在使用 Keras 来训练我的 LSTM 模型来解决时间序列问题。我的激活函数是线性的,优化器是 Rmsprop。然而,我观察到训练损失随着时间的推移缓慢下降并围绕一个小值波动的趋势,而验证损失则以很大的方差上下跳跃。
因此,我提出了两个问题:1、validation loss会影响训练过程吗?如果学习率波动很大,算法会查看验证损失并减慢学习率吗?2. 如何使模型更稳定,以便返回更稳定的验证损失值?
谢谢
No. The validation loss is just a small sample of data that is excluded from the training process. It is run through the network at the end of an epoch, to test how well training is going, so that you can check if the model is over fitting (i.e. training loss much < validation loss).
This is bit tougher to answer without the network or data. It could just mean that your model isn't converging well to unseen data, meaning that its not seeing a enough similar trends from training data to validation data, and each time the weights are adjusted to better suit the training data, the model becomes less accurate for the validation set. You could possibly turn down the learning rate, but if your training loss is decreasing slowly, the learning rate is probably fine. I think in this situation, you have to ask yourself a few questions. Do I have enough data? Does a true time series trend exist in my data? Have I normalized my data correctly? Is my network to large for the data I have?
我遇到了这个问题——虽然训练损失在减少,但验证损失并没有减少。我在使用 LSTM 时检查并发现:
(-1,1)
我选择不是在范围内缩放,而是(0,1)
将我的验证损失减少了一个数量级与通常发生的训练集相比,您的验证集非常小。权重的一点点变化会使验证损失的波动远大于训练损失。这可能不一定意味着您的模型过拟合。只要验证损失的整体趋势不断下降。
可能您的训练和验证数据来自不同的来源,它们可能具有不同的分布。当您的数据是时间序列并且您按特定时间戳拆分训练/验证数据时,可能会发生这种情况。
不,验证(一次向前传递)和训练(向前和向后)是不同的过程。因此,单次前传不会改变您接下来的训练方式。
不,但我想你可以实现自己的方法来做到这一点。但是,应该注意的一点是,该模型正在尝试学习仅由训练数据提供的成本函数的最佳解决方案,因此通过观察验证损失来更改此学习率并没有太大意义。
原因在上面已经说明。如果是第一种情况,扩大验证集会让你的损失看起来更稳定,但这并不意味着它更适合。我的建议是,只要您确定您的模型没有过度拟合(训练损失和验证损失之间的差距不是太大),您就可以保存提供最低验证损失的模型。
如果是第二种情况,可以根据您的情况来完成。您可以尝试排除训练集中与您的验证集不“相似”的样本,或者如果您有足够的数据,则可以扩大模型的容量。或者也许添加更多指标来监控培训的效果。