1.长期依赖问题
RNN面临的最大挑战就是无法解决长期依赖问题。例如对下面两句话:
最后的was与were如何选择是和前面的单复数有关系的,但对于简单的RNN来说,两个词相隔比较远,如何判断是单数还是复数就很关键。长期依赖的根本问题是,经过许多阶段传播后的梯度倾向于消失(大部分情况)或爆炸(很少,但对优化过程影响很大)。对于梯度爆炸是很好解决的,可以使用梯度修剪(Gradient Clipping),即当梯度向量大于某个阈值,缩放梯度向量。但对于梯度消失是很难解决的。
2.简单的数学推导
如何从数学的角度来理解梯度消失或者爆炸问题呢,我们将以一个简单的、缺少非线性激活函数和输入x的循环神经网络为例。我们可以认为,循环联系为:
可以简化为: