问题描述
在训练我的 LSTM(使用 Python 中的 Keras 库)时,验证损失不断增加,尽管它最终确实获得了更高的验证准确度。这让我有两个问题:
- 它如何/为什么以(显着)更高的验证损失获得(显着)更高的验证准确度?
- 验证损失增加是否有问题? (因为它最终确实获得了良好的验证准确性)
这是我的 LSTM 的示例历史日志,适用于此:
比较 epoch 0 和 epoch ~430 时可见:
1.1 val 损失时 52% val 准确度对比 1.8 val 损失时 61% val 准确度
对于损失函数,我使用的是 tf.keras.losses.CategoricalCrossentropy,并且我正在以 50-60% 的高学习率使用 SGD 优化器(因为它获得了最好的验证准确性)。>
最初我认为它可能是过度拟合的,但后来我不明白验证准确性如何最终以几乎两倍于验证损失的方式变得更高。
任何见解将不胜感激。
编辑:另一个不同运行的例子,验证准确度波动较小,但随着验证损失的增加,验证准确度仍然显着提高:
在这次运行中,我使用了低丢失而不是高丢失。
解决方法
正如您所说,“在 50-60% 的高学习率下”,这可能是图形振荡的原因。降低学习率或增加正则化应该可以解决振荡问题。
更一般地说,
交叉熵损失不是有界损失,因此异常值非常严重会使它爆炸。
- 准确度可以更高,这意味着您的模型能够学习除异常值之外的其余数据集。
- 验证集异常值过多,导致损失值波动。
要确定是否过度拟合,您应该检查验证集是否存在异常值。