首页 文章

Python Keras LSTM学习在高损耗时收敛得太快

提问于
浏览
6

这更像是一个深度学习概念问题,如果这不是正确的平台,我会把它带到其他地方 .

我正在尝试使用Keras LSTM序列模型来学习文本序列并将它们映射到数值(回归问题) .

问题是,学习总是在高损失(训练和测试)上收敛得太快 . 我已经尝试了所有可能的超参数,我感觉这是一个局部最小问题导致模型的高偏差 .

我的问题基本上是:

  • 如何在这个问题上初始化权重和偏差?

  • 使用哪种优化器?

  • 我应该扩展网络的深度(我担心如果我使用非常深的网络,训练时间将无法忍受,模型差异将会增大)

  • 我应该添加更多培训数据吗?

输入和输出用minmax标准化 .

我正在使用具有动量的SGD,目前有3个LSTM层(126,256,128)和2个密集层(200和1个输出神经元)

我在几个时期之后打印了重量,并注意到 many weights are zero and the rest are basically have the value of 1 (或非常接近它) .

以下是tensorboard的一些情节:
enter image description here

2 回答

  • 9

    更快的收敛和非常高的损失可能意味着您正面临爆炸性的梯度问题 . 尝试使用低得多的学习率,如1e-5或1e-6 . 您还可以尝试渐变剪裁等技术,以便在学习率较高的情况下限制渐变 .

    Answer 1

    另一个原因可能是权重初始化,请尝试以下3种方法:

    对于许多情况,第一种初始化方法效果最好 .

    Answer 2

    您可以尝试不同的优化器

    • 动量优化器

    • SGD或Gradient下降

    • 亚当优化器

    优化器的选择应基于损失函数的选择 . 例如:对于MSE作为损失函数的逻辑回归问题,基于梯度的优化器不会收敛 .

    Answer 3

    您的网络的深度或宽度应该再次完全取决于您使用的网络类型以及问题所在 .

    正如您所说,您正在使用LSTM的顺序模型,以学习文本序列 . 毫无疑问,你选择的模型对这个问题有好处,你也可以试试4-5 LSTM .

    Answer 4

    如果您的渐变为0或无限,它被称为消失渐变或它只是意味着早期收敛,尝试使用适当的学习率和第一个权重初始化技术的渐变剪辑 .

    我相信这肯定会解决你的问题 .

  • 0

    考虑减少batch_size . 对于大型batch_size,可能是您的渐变在某些时候无法找到数据随机性的任何变化,因此它更早收敛 .

相关问题