Python RNN的消失/爆炸梯度

Python RNN的消失/爆炸梯度,python,machine-learning,neural-network,recurrent-neural-network,Python,Machine Learning,Neural Network,Recurrent Neural Network,背景:我目前正在训练一个用于文本情感分析的递归神经网络。 数据集是一组句子的集合,这些句子分为正反两类 问题:对于较小的句子(少于3-4个单词),神经网络工作良好(即损失随着时间的推移而减少),但对于较大的句子,成本会急剧上升,直到整个程序崩溃。 这是消失/爆炸梯度问题的一个例子吗? 如果是,这两个选项中的哪一个?我如何修复它? 我认为,对于简单的RNN,消失梯度问题不是一个大问题。通常,在不使用某种LTSM/GRU体系结构的情况下,RNN可以很好地处理多少时间步长 EDIT1:我没有为此网络使

背景:我目前正在训练一个用于文本情感分析的递归神经网络。
数据集是一组句子的集合,这些句子分为正反两类

问题:对于较小的句子(少于3-4个单词),神经网络工作良好(即损失随着时间的推移而减少),但对于较大的句子,成本会急剧上升,直到整个程序崩溃。

这是消失/爆炸梯度问题的一个例子吗?
如果是,这两个选项中的哪一个?我如何修复它?

我认为,对于简单的RNN,消失梯度问题不是一个大问题。通常,在不使用某种LTSM/GRU体系结构的情况下,RNN可以很好地处理多少时间步长

EDIT1:我没有为此网络使用LSTM或GRU体系结构。
EDIT2:我认为这可能是一个逐渐消失的梯度问题,因为梯度接近于零,特别是对于较长的句子。
EDIT3:我注意到,当我执行梯度检查时,反向传播梯度和数值计算的梯度之间的差异是不一致的
有时它们非常相似:

Estimated gradient: -0.03798713081426541
Actual gradient: -0.03798713058052253

Estimated gradient: 0.09233359214502745
Actual gradient: 0.09233359179904115

Estimated gradient: 0.0769223445411249
Actual gradient: 0.07692234419615167

Estimated gradient: 0.12397360958732451
Actual gradient: 0.12397360903699521
*这些不是相邻检查-只是手工挑选的良好渐变检查示例。
其他时候,它们非常不同:

Estimated gradient: -4.0245362598057e-07
Actual gradient: 3.4145999078185475e-12
Gradient Check ERROR
Relative error: 1.0

Estimated gradient: -4.241412776551101e-08
Actual gradient: -2.1161111156415113e-16
Gradient Check ERROR
Relative error: 0.9999999900216686

Estimated gradient: 0.0
Actual gradient: -4.450453565269026e-32
Gradient Check ERROR
Relative error: 1.0

用LSTM体系结构重新实现RNN解决了这个问题。渐变消失是个问题。

您使用的是LSTM还是GRU体系结构?也许可以添加一些关于你的超参数的额外信息。如果它必须是两个参数中的一个,而不是消失的话,如果我不是这方面的专家,我会打赌爆炸梯度。我认为逐渐消失的梯度只会让你的训练停滞不前,而爆炸则会让训练发散。爆炸梯度通常通过应用剪切阈值来处理。通常,剪切梯度可以使事情变得更好。此外,有时学习率过高也会导致成本飞涨。