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

NRG*_*NRG 6 python deep-learning lstm keras tensorflow

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

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

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

我的问题基本上是:

  1. 鉴于此问题,如何初始化权重和偏差?
  2. 使用哪种优化器?
  3. 我应该扩展网络的深度(我担心如果我使用非常深的网络,训练时间将无法忍受,模型差异将会增大)
  4. 我应该添加更多培训数据吗?

输入和输出用minmax标准化.

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

我已经在几个时期之后打印了重量,并注意到许多权重为零,其余的基本上具有值1(或非常接近它).

以下是tensorboard的一些情节:在此输入图像描述

Avi*_*Rai 10

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

答案1

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

  1. 本文介绍的方法https://arxiv.org/abs/1502.01852
  2. Xavier初始化
  3. 随机初始化

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

答案2

您可以尝试不同的优化器

  1. 动量优化器
  2. SGD或Gradient血统
  3. 亚当优化器

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

答案3

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

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

答案4

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

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