为什么梯度消失在传统RNN中相比于CNN更严重?

当神经网络层数非常深时,神经网络优化算法会面临的另外一个难题就是长期依赖问题——由于变深的结构使模型丧失学习先前信息的能力,让优化变得极其困难。

而循环神经网络的设计初衷之一就是为了能够捕获长距离输入之间的依赖关系,深度经网络中的梯度消失会让使用BPTT算法学习到的循环神经网络并不能成功捕获到长距离的依赖关系。

为什么这个问题在RNN中更加凸显呢?
这是因为循环审计宁网络在很长的时间序列的各个时刻重复应用相同操作来构建非常深的计算图,并且模型参数共享,这使得梯度消失的问题更加严重;
下面我们先看看传统RNN的梯度是如何计算的,
为什么梯度消失在传统RNN中相比于CNN更严重?
看一看出nettnet_tnet1net_1的求导将包含n个w连乘的形式,然这些w是相同的,如果这个雅克比矩阵的的最大特征值小于1,那么意味着梯度将会呈指数减小,导致梯度消失,若雅克比矩阵大于1,那么梯度将会呈指数增大,导致梯度爆炸。

而CNN中每层的参数矩阵WW是不同的,并且我们可以初始化时,让它们为独立同分布的,因此可以相互抵消,所以在大多数情况下不会出现梯度消失或者梯度爆炸的出现。

那为什么RNN中的每个时间步上的权重矩阵WW要设计为一样的呢?

如果在每个时间点都有一个单独的参数,不但不能泛化到训练时没有见过的序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。当信息的特定部分会在序列内多个位置出现时,共享参数就显得特别重要。–摘自GoodFellow 的深度学习

如果在每个时间点都有一个单独的参数,不但不能泛化到训练时没有见过的序列长度,也不能在时间上共享不同序列长度和不同位置的统计强度。当信息的特定部分会在序列内多个位置出现时,共享参数就显得特别重要。–摘自GoodFellow 的深度学习

从优化角度来说:参数共享也可以节省内存的使用,比如说RNN在NLP中参数WW一般是100*100,如果参数不同,那么有100个位置,那就有100万个参数。