![深度学习视频理解](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=1738839581-66t0FHYuwRnHpXqCizRLOxIfMvM1K2IJ-0-9b8a4f5ca1d0d64e35969df6104937d0)
(2.17)
在进行误差反向传播(Error Backpropagation)时,当我们已知损失函数对
时刻隐状态向量
的偏导数
时,利用链式法则,我们计算损失函数
对初始时刻隐状态向量
的偏导数:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_302.jpg?sign=1738839581-PCGYjUmVFWfbBfvHcQdPHJcVKtC5uLOI-0-9a46c658c05316aa8c7f50598e38bcc5)
(2.18)
我们可以利用RNN的依赖关系,沿时间维度展开,来计算:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_304.jpg?sign=1738839581-CzBBeVwLHuhOc4QTBtNrvGHIROzzcQmw-0-4beb755a0607234f72b2f03406913cec)
(2.19)
其中,表示矩阵
次幂,注意不是矩阵的转置。从式(2.19)可以看出,在误差反向传播时,我们需要反复乘以参数矩阵
。
由于矩阵通常是由随机初始化训练得到的,所以
的特征向量(Eigenvector)通常是独立的。因此,可以对矩阵
进行对角化:
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_311.jpg?sign=1738839581-CIx01pBvnDcuoXp5vkgSksxlD5aKkTOV-0-a22c81e66026296a278ed6b4b669b4a0)
(2.20)
其中
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_312.jpg?sign=1738839581-GRhoQSMpQn7jxk965n9Hn0Oj3YTHfzm2-0-ed9c14d88b894a60dffa855207f9eb2e)
(2.21)
表示对角矩阵,令
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_314.jpg?sign=1738839581-dqH2eeSCQzh2RInjhlIPg5216B3a1J4g-0-fb7f733bbba65e75f7f6755f86e0e100)
(2.22)
因此,
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_315.jpg?sign=1738839581-dLZq3wbZc9iHkcIAnOACVDPxK7ztNOA6-0-57e44d6a0e5475923ac2e54120ee3a4f)
(2.23)
那么最后要计算的目标为
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_316.jpg?sign=1738839581-qY29U55tZwRHQEdVEKuqRDHdFmZ6CvZS-0-620710216b7cc95c83feeaa5e829bf61)
(2.24)
当很大时,该偏导数取决于矩阵
对应的对角矩阵的最大值
是大于1 还是小于1,要么结果太大,要么结果太小:
(1)梯度爆炸。当时,
,那么
![img](https://epubservercos.yuewen.com/E5C1AE/23020634309724506/epubprivate/OEBPS/Images/txt002_322.jpg?sign=1738839581-JMZN28efrG0ACo10C0xzdrOc4AsjnWac-0-263fc23d5dab193b027381741e40a43b)
(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=1738839581-BLvW1IgGcEoomkKs1VEv2iGyacgY9hfN-0-fb30517b6df7de0e15f3dccf8d2fa53e)
(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的关键是会选择性地忽略其中一些词,不让其参与到隐层状态向量的更新中,最后只保留相关的信息进行预测。