为什么 RNN 倾向于遭受梯度消失/爆炸?

机器算法验证 机器学习 深度学习 循环神经网络
2022-01-18 02:31:43

为什么递归神经网络 (RNN) 倾向于遭受梯度消失/爆炸?

关于什么是消失/爆炸梯度,请参阅 Pascanu 等人。(2013)。关于训练循环神经网络的难度,第 2 节 ( pdf )。

4个回答

TL;博士

主要原因是BPTT的以下特点:

  1. 展开的 RNN 往往是一个非常深的网络。
  2. 在展开的 RNN 中,早期层中的梯度是(也)包含相同术语的许多实例的乘积。

长版

为了训练 RNN,人们通常使用时间反向传播 (BPTT),这意味着您选择多个时间步,然后展开您的网络,使其成为由原始网络的个副本组成的前馈网络,而每个它们代表另一个时间步长的原始网络。NN

展开 RNN
(图片来源:维基百科

所以 BPTT 只是展开你的 RNN,然后使用反向传播来计算梯度(就像训练一个正常的前馈网络一样)。

原因1:展开的网络通常很深

因为我们的前馈网络是通过展开创建的,所以它的深度是原始 RNN因此展开的网络通常很深。N

在深度前馈神经网络中,反向传播有“不稳定的梯度问题”,正如迈克尔尼尔森在为什么深度神经网络难以训练一章中解释的那样。(在他的《神经网络和深度学习》一书中):

[...] 早期层的梯度是所有后面层的项的乘积。当有很多层时,这本质上是一种不稳定的情况。所有层都能以接近相同的速度学习的唯一方法是,如果所有这些术语的乘积接近平衡。

即层越早,积越长,梯度越不稳定。(有关更严格的解释,请参阅此答案。)

原因 2:给出梯度的乘积包含许多相同项的实例

给出梯度的乘积包括后面每一层的权重。
所以在一个正常的前馈神经网络中,这个从到最后一层的乘积可能看起来像: Nielsen 解释说(就绝对值而言)这个乘积往往要么非常大要么非常小(对于大的)。dth

w1α1w2α2  wdαd
d

但是在展开的 RNN 中,这个产品看起来像: 作为展开的网络由同一网络的副本组成。

wα1wα2  wαd

无论我们处理的是数字还是矩阵,相同项次的出现意味着乘积更加不稳定(因为“所有这些项的乘积都接近平衡”的可能性要小得多)。d

因此,乘积(就绝对值而言)往往呈指数级小或指数级大(对于大的)。d

换句话说,展开的 RNN 是由同一网络的副本组成的这一事实,使得展开的网络的“不稳定梯度问题”比正常的深度前馈网络更加严重。

因为RNN是通过时间反向传播训练的,因此展开成多层前馈网络。当梯度通过许多时间步长返回时,它往往会增长或消失,就像它在深度前馈网络中发生的那样

我想指出一点,上面的答案似乎错过了 RNN 中梯度消失的问题。

人们对消失梯度的理解应该与 DNN 中的原始含义不同。但首先我们需要做一些符号。

,Elman 递归神经网络的递归公式为 对于,因为是时间步长的总和。h00

ht=fh(Uhxt+Whht1+bh)y^t=fy(Wyht+by)
1tTT

表示之间的误差,则总损失为由于 RNN 的共享权重性质,找到 wrt 对的偏导数要求您为每个 wrt 每个时间戳找到Etyty^tL=i=1TEtLWhhEtWWi<t

然后,如果您查看论文,我们目前对爆炸/消失梯度的理解大部分基于:

接近的项相比,该项 [ at ] 趋于变得非常小这意味着即使中可能存在允许 a 跳转到另一个(更好的)吸引力盆地的变化,成本相对于的梯度并不能反映这种可能性。EtWiτtWW

这意味着什么时候很小,某些组件的时间戳处的一些偏导数可能会由于它们的时间距离而丢失。导致梯度下降算法过于关注周围(通常是凹凸不平的)损失表面,从长远来看不一定会下降。||W||iEt

所以人们通常所说的RNN中的梯度消失只是指包含RNN距离信息的长分量,而不是整个系统。

本章很好地描述了梯度消失问题的原因。当我们随着时间的推移展开 RNN 时,它也像一个深度神经网络。因此,根据我的理解,它也存在作为深度前馈网络的梯度消失问题。