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

时间:2017-09-14 16:52:57

标签: python tensorflow deep-learning keras lstm

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

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

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

我的问题基本上是:

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

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

    我在几个时期之后打印了重量,发现很多重量 为零,其余的基本上都是1 (或非常接近它)。

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

2 个答案:

答案 0 :(得分:10)

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

回答1

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

  1. 本文中描述的方法https://arxiv.org/abs/1502.01852
  2. Xavier初始化
  3. 随机初始化
  4. 对于许多情况,第一种初始化方法效果最好。

    回答2

    您可以尝试不同的优化器,例如

    1. 动量优化器
    2. SGD或Gradient descent
    3. Adam optimizer
    4. 优化器的选择应基于损失函数的选择。例如:对于MSE作为损失函数的逻辑回归问题,基于梯度的优化器不会收敛。

      回答3

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

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

      回答4

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

      我相信这肯定能解决你的问题。

答案 1 :(得分:0)

请考虑减少您的batch_size。 使用batch_size大的情况,可能是您的梯度在某个时候找不到数据的随机性的更多变化,因此它会更早收敛。