NNDL 作业11 LSTM:避免梯度消失分析+numpy代码+nn.LSTMCell+nn.LSTM实现

文章探讨了LSTM网络中参数梯度的计算,解释了RNN中的梯度消失问题并非真正的消失,而是由权重共享导致的梯度减弱。重点介绍了遗忘门的作用以及如何通过控制权重来避免远距离梯度消失。同时,文章提到了LSTM无法完全解决梯度消失,Transformer在此方面表现更好。

习题6-4  推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果

首先需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样。MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度为各个时间步的梯之和。

因此,RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和便不会消失。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。

多条求导路径,最后将这些求导路径相加得到最终的梯度,只要保证有一条远距离路径梯度不消失,总的远距离梯度就不会消失,这里我们只关注C_{t-1}传到C_{t} 的过程

下图箭头为为从C_{t-1}传到C_{t} 的过程的相反方向,即反向传播的方向,值得注意的是,从C_{t-1}传到C_{t} ,包括从C_{t-1}传到h_{t-1},再从h_{t-1}传到C_{t}

可以求得公式 

可以看到,这个梯度是由四个式子相加而成,其他姑且不用看,就看这个f_{t}控制好f_{t}就能让它梯度不消失。

也就是说,如果想让过去的影响现在的输出,让f_{t}为1就可以了,之后在上图最上面那条路径中梯度会直接从C_{t}流到C_{t-1},梯度不会消失,f_{t}的大小由训练学习得到的(它会学习到什么时候就不记前头的了),直到有输入x得到的f_{t}为0,则和前面的信息就没有关系了。

就是反向传到较远的地方,它的梯度是有多个式子的和(多条路到达),而不是仅仅是几个变量相乘的单一式子。

注意:梯度消失现象可以改善,但是梯度爆炸还是可能会出现的。

LSTM依然不能完全解决梯度消失这个问题,有文献表示序列长度一般到了三百多仍然会出现梯度消失现象。如果想彻底规避这个问题,还是transformer好用。(现在还没学 transformer,浅期待一下)

 参考老师给的鱼书上的看法分析,避免梯度消失主要有两个原因,一个是使用对应元素的乘积,一个是遗忘门的使用。

 

习题6-3P  编程实现下图LSTM运行过程

同学提出,未发现输入。可以适当改动例题,增加该输入。

实现LSTM算子,可参考实验教材代码。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值