深度学习与神经网络(九)—— RNN梯度爆炸与梯度消失(梯度弥散)

RNN训练难题——梯度爆炸与梯度弥散

梯度弥散是接近于0

梯度爆炸式接近于无穷大

RNN的梯度求导公式

梯度信息中有个w^k,所以

梯度爆炸的解决

比如在这个点,可能再往左下走一点点,就会error值(loss值)迅速升高,就产生了梯度爆炸

就你的训练过程可能是0.25,0.24,0.23,然后突然,变成了1.1这样

梯度爆炸的解决其实是很简单的

每次计算的时候,检查一下gradient的值,如果大于了设定的阈值,就用当前梯度的当前梯度的模,让它长度变成1,方向保持不变,然后再乘上阈值threshold,这样就把梯度的最大值限定在了阈值之内

就是削减了它的步长,比如原来是

现在是

因为一步跨的很小,所以在那个点的梯度方向一般和正确的方向接近,而如果是前一张图那样一下跨到顶了,那么他的梯度更新方向就可能与正确的方向大相径庭了

虽然这种方式没有从根本上解决梯度爆炸, 但是是一种很有效的办法

注意,这是对梯度进行了clipping,不是对weight进行clipping,是对w.gradient做clipping

代码

只要backward了之后

w.grad就被更新了,保存了当前点的梯度值

grad都在parameters里

梯度消失

人们到后来发现,CNN等到了一定层数,在堆叠更多的层数,结果反而会不好

这是因为在反向传播的时候,梯度逐步往前传播更新,δk每次都累计一个误差

当到最后的时候δk已经非常小了,接近于0了,因此

会接近于0

这样到后面,第0层,第1层的W就会接近于0

这样就会出现长时间得不到更新的现象

因此网络即使堆叠得再深,也有可能train不好

上图是一个全连接层网络的层数的梯度信息,所以不只是在RNN中,在全连接和CNN中也有某种程度上的反映,只是没有RNN明显 

ResNet的解决办法是加一个shortcut,就是让他最差退化成原始的网络

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值