梯度消失和梯度爆炸

梯度消失和梯度爆炸

首先我们先说一下DNN中的梯度消失和梯度爆炸。
DNN中的梯度消失和梯度爆炸是由于激活函数引起的,主要是sigmoid函数。
因为在反向传播的过程中我们需要对激活函数进行求导,而sigmoid激活函数的导数如下图:
所以如果网络足够长的话,经过多个激活函数的导数以后就会出现梯度接近于0的情况。
在这里插入图片描述
梯度爆炸是由于权重参数初始化太大时,权重参数与激活函数的导数相乘导致梯度爆炸的出现。
在这里插入图片描述

解决方案:

1、梯度剪切,也就是设置一个梯度阈值,这样就可以借解决梯度爆炸的问题。
2、正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
在这里插入图片描述
因此,如果发生梯度爆炸,权值的范数就会变的非常大,通过正则化项,可以部分限制梯度爆炸的发生。
3、跟换激活函数,使用relu系的激活函数。(leakrelu,elu等等)
4、BN避免了梯度消失的问题(但是我觉得也能解决梯度爆炸的问题,有清楚的老哥欢迎给我留言)
5、残差结构shortcut
在这里插入图片描述

下面来聊一下RNN的梯度消失:

RNN中的梯度消失跟DNN不太一样。
现在来解释一下,为什么说RNN和DNN的梯度消失问题含义不一样?

一句话概括:RNN的梯度不会消失,RNN的梯度消失指的是当下梯度用不到前面的梯度了,但DNN靠近输入的权重的梯度是真的会消失。具体的你推导一下DNN和RNN的方向传播就知道了。简单的来说就是,DNN方向传播的时候是连乘的形式,但是RNN是累加的形式,所以RNN即使前面的梯度为零了,也不影响后面的梯度。所以RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。
LSTM的提出解决了RNN的梯度消失问题
对于现在常用的带遗忘门的 LSTM 来说,6 中的分析依然成立,而 5 分为两种情况:其一是遗忘门接近 1(例如模型初始化时会把 forget bias 设置成较大的正数,让遗忘门饱和),这时候远距离梯度不消失;其二是遗忘门接近 0,但这时模型是故意阻断梯度流的,这不是 bug 而是 feature(例如情感分析任务中有一条样本 “A,但是 B”,模型读到“但是”后选择把遗忘门设置成 0,遗忘掉内容 A,这是合理的)。当然,常常也存在 f 介于 [0, 1] 之间的情况,在这种情况下只能说 LSTM 改善(而非解决)了梯度消失的状况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值