![深度学习视频理解](https://wfqqreader-1252317822.image.myqcloud.com/cover/920/43737920/b_43737920.jpg)
2.2.2 梯度爆炸与梯度消失
虽然理论上 RNN 可以捕获长距离依赖,但实际应用中,RNN 将会面临两个挑战:梯度爆炸(Gradient Explosion)和梯度消失(Vanishing Gradient),这使得 RNN 实际学习长距离依赖很难(Bengio et al.,1994)。
我们考虑一种简单情况,即激活函数是恒等(Identity)变换,此时
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_295.jpg?sign=1738792497-ynC4exzH4gnSKpdekUBsiXEWUBNuMemi-0-a9592098f517895948c8f9f6729ee9e6)
(2.17)
在进行误差反向传播(Error Backpropagation)时,当我们已知损失函数对
时刻隐状态向量
的偏导数
时,利用链式法则,我们计算损失函数
对初始时刻隐状态向量
的偏导数:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_302.jpg?sign=1738792497-cghYr92OYopvbrPDSCTdB0QoVDau1wO6-0-5726b135581ab850a9c6668367bd3503)
(2.18)
我们可以利用RNN的依赖关系,沿时间维度展开,来计算:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_304.jpg?sign=1738792497-2A00bSmhXUq5ytyIGJAI9FobW5lxFswm-0-2215ed58e677a9d72f264e2cb26b47c8)
(2.19)
其中,表示矩阵
次幂,注意不是矩阵的转置。从式(2.19)可以看出,在误差反向传播时,我们需要反复乘以参数矩阵
。
由于矩阵通常是由随机初始化训练得到的,所以
的特征向量(Eigenvector)通常是独立的。因此,可以对矩阵
进行对角化:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_311.jpg?sign=1738792497-1dY0zlGRb7Urxbkl6STtMakGjSpxgSFt-0-87f5c2a93d5bd6346df23c75f6919762)
(2.20)
其中
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_312.jpg?sign=1738792497-9dcVoaXiG4ICNmYa0EGHSqWa0a79V1l2-0-890f259a32cb9e094b20fed95ea41a00)
(2.21)
表示对角矩阵,令
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_314.jpg?sign=1738792497-s5e9O0KSSIu3mmADaGrRYhi6auLItgIC-0-36d9a0a685c03633a50195b7300ea552)
(2.22)
因此,
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_315.jpg?sign=1738792497-nKeSn8FTkMMVkxU5ddOffab6wjweG4JG-0-b8034a9edcabc59a9cc903a8028057a9)
(2.23)
那么最后要计算的目标为
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_316.jpg?sign=1738792497-7AKiq4cIqQlTZnmo5odqEMeiOVTkm9t7-0-0c391faa9e609b92a60cdcc0f19869bb)
(2.24)
当很大时,该偏导数取决于矩阵
对应的对角矩阵的最大值
是大于1 还是小于1,要么结果太大,要么结果太小:
(1)梯度爆炸。当时,
,那么
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_322.jpg?sign=1738792497-RAtvuubjDkpRIRUKtTt1t0nTucxA9Fl0-0-398cd845d73d86ff4609938248812bca)
(2.25)
此时偏导数将会变得非常大,在实际训练时将会遇到NaN错误,会影响训练的收敛,甚至导致网络不收敛。这好比要把本国的产品卖到别的国家,结果被层层加了关税,等到了别国市场的时候,价格已经变得非常高,老百姓根本买不起。在RNN中,梯度(偏导数)就是价格,随着向前推移,梯度越来越大。这种现象称为梯度爆炸。
梯度爆炸相对比较好处理,可以用梯度裁剪(Gradient Clipping)(Goodfellow et al.,2016)来解决。当梯度的范数(Norm)大于某个阈值时,我们人为地给梯度乘以一个缩放系数,使得梯度的范数在我们希望的阈值内。这好比是不管前面的关税怎么加,设置一个最高市场价格,通过这个最高市场价格保证老百姓是买得起的。在RNN中,不管梯度回传的时候梯度范数大到什么程度,设置一个梯度的范数的阈值,梯度的范数最多是这么大。
(2)梯度消失。当时,
,那么
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_326.jpg?sign=1738792497-STw0O2l8dWFDkcCh7LJRnQMpAyQp1YGS-0-d2ca0303cc7d72b663ac1770ad00e216)
(2.26)
此时偏导数将会变得十分接近 0,从而使得参数在梯度更新前后没有什么区别,这会使得网络捕获长距离依赖的能力下降。这好比打仗的时候往前线送粮食,送粮食的队伍自己也得吃粮食。当补给点离前线太远时,还没等送到,粮食在半路上就已经被吃完了。在RNN中,梯度(偏导数)就是粮食,随着向前推移,梯度逐渐被消耗殆尽。这种现象称为梯度消失。
梯度消失现象解决起来要比梯度爆炸困难很多,如何缓解梯度消失是RNN 及几乎其他所有深度学习方法研究的关键所在。LSTM和GRU通过门控(Gate)机制控制 RNN中的信息流动,用来缓解梯度消失问题。其核心思想是有选择性地处理输入。比如我们看到一个商品的评论:
Amazing!This box of cereal gave me a perfectly balanced breakfast,as all things should be.In only ate half of it but will definitely be buying again!
我们会重点关注其中的一些词,对它们进行处理:
Amazing!This box of cereal gave me a perfectly balanced breakfast,as all things should be.In only ate half of it but will definitely be buying again!
LSTM和GRU的关键是会选择性地忽略其中一些词,不让其参与到隐层状态向量的更新中,最后只保留相关的信息进行预测。