为什么会有梯度爆炸和梯度消失?

为什么会有梯度爆炸和梯度消失?

读论文不认真的后果……梯度消失/爆炸是激活函数和权重相互作用产生的联合效果,不单单是激活函数的问题,不管你用 sigmoid/tanh 还是 ReLU 都有可能发生梯度消失/爆炸,只是发生的频繁程度不同。

每层神经网络大体是一次矩阵乘法(线性变换)再接一次激活函数,例如这样:

求导以后是这样:

其中第一项是每个元素都小于 1 的对角阵(假设这里用 sigmoid 激活函数,其他激活函数可同理分析),于是特征值也小于 1,会产生压缩的效果;而第二项特征值的大小与 W 本身有关,既可能收缩也可能扩张。

假如 W 的所有特征值都小于 1,那么此时两项相乘也是收缩的效果;反之,两项的乘积有可能(注意不是一定)产生扩张的效果。多层累积以后,就有可能发生梯度消失和梯度爆炸。

举个 RNN 的例子吧:

论文第二节说的很清楚: