背景:我目前正在训练一个用于文本情感分析的循环神经网络。
数据集是一组被二元分类为正面或负面的句子集合。
问题:神经网络在处理较短的句子(少于3-4个词)时运行正常(即损失随时间减少),但对于较长的句子,成本会迅速上升,直到整个程序崩溃。
这是否是梯度消失/爆炸问题的例子?
如果是,哪一种问题,并且我该如何解决?
我认为,对于简单的RNN,梯度消失问题不是一个大问题。通常情况下,RNN在不使用LTSM/GRU架构的情况下能够处理多少时间步?
编辑1:我在这个网络中没有使用LSTM或GRU架构。
编辑2:我认为这可能是梯度消失问题,因为梯度在较长的句子中接近于零。
编辑3:我注意到,当我进行梯度检查时,反向传播梯度和数值计算梯度之间的差异是不一致的。
有时它们非常相似:
Estimated gradient: -0.03798713081426541Actual gradient: -0.03798713058052253Estimated gradient: 0.09233359214502745Actual gradient: 0.09233359179904115Estimated gradient: 0.0769223445411249Actual gradient: 0.07692234419615167Estimated gradient: 0.12397360958732451Actual gradient: 0.12397360903699521
*这些不是相邻的检查 – 只是手动挑选的良好梯度检查的例子。
其他时候,它们差异很大:
Estimated gradient: -4.0245362598057e-07Actual gradient: 3.4145999078185475e-12Gradient Check ERRORRelative error: 1.0Estimated gradient: -4.241412776551101e-08Actual gradient: -2.1161111156415113e-16Gradient Check ERRORRelative error: 0.9999999900216686Estimated gradient: 0.0Actual gradient: -4.450453565269026e-32Gradient Check ERRORRelative error: 1.0
回答:
重新实现RNN并采用LSTM架构解决了这个问题。梯度消失是问题的根源。