传统RNN为什么会发生梯度弥散和爆炸?LSTM为什么可以避免它?

产生原因

因为神经网络用到的sigmoid的特点,它会将+∞~-∞之间的输入压缩到0~1之间。当input的值更新时,output会有很小的更新。

又因为上一层的输出将作为后一层的输入,而输出经过sigmoid后更新速率会逐步衰减,直到输出层只会有微乎其微的更新。

从数学的角度出发。知sigmoid导数在0的位置取最大值1/4。当我们使用均值为0,方差为1的高斯分布初始化参数w,有|w|<1.

随网络层数加深,w的变化幅度会呈1/4的指数衰减,使得最后学不到东西,造成梯度弥散。

同样,当|w|>1,w变化幅度会指数递增,最后造成梯度爆炸。

解决办法

1.使用relu函数:

 这个比sigmoid要好一些,但是有时还是会产生梯度消失

2.加入BN(Batch Normalization)层

 BN层作用:

(1)加速收敛

(2)控制过拟合,可以少用或不用Dropout和正则

(3)降低网络对初始化权重不敏感

(4)允许使用较大的学习率

为什么LSTM可以解决梯度弥散?

LSTM相对普通RNN多了加和,也就是多了三个门(输入门,输出门,遗忘门)为避免梯度消散提供了可能。





评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值