RNN的消失/爆炸梯度

时间:2016-12-04 02:39:56

标签: python machine-learning neural-network recurrent-neural-network

背景:我目前正在训练一个用于文本情感分析的循环神经网络 数据集是一组句子,二进制分类为正面或负面。

问题:神经网络在较小的句子(少于3-4个单词)下工作正常(即损失随着时间的推移而减少),但对于较大的句子,成本会在整个程序崩溃之前发挥作用。

这会是消失/爆炸梯度问题的一个例子吗? 如果是这样,两者中的哪一个是它,我该如何解决?

我认为,对于简单的RNN来说,消失梯度问题不是一个大问题。通常,如果不使用某种LTSM / GRU架构,RNN可以处理多少时间步骤?

EDIT1:我没有为此网络使用LSTM或GRU架构 编辑2:我认为这可能是一个消失的梯度问题,因为渐变接近零,特别是对于较长的句子 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

1 个答案:

答案 0 :(得分:2)

Re-implementing the RNN with a LSTM architecture solved the problem. Vanishing gradients was the issue.