梯度消失和梯度爆炸

本文探讨了深度神经网络中梯度消失与梯度爆炸的原因,并提出了多种解决方案,包括梯度剪切、ReLU激活函数的应用、良好的参数初始化策略、残差结构及LSTM等。

1.原因

  神经网络为什么会出现梯度消失和梯度爆炸的问题,根源是反向传播。一般整个深度神经网络可以视为一个复合的非线性多元函数
F(x) = f_n(..f_3(f_2(f_1(x) * \Theta_1 + b_1) * \Theta_2 + b_2) * \Theta_3 + b_3...)
  那么在这样一个公式中,我们都知道,计算梯度的时候是链式求导,比如一个只有4个隐层的网络:

img_6057b7e6645f81c98a0a361608d4457c.png

  图中是一个四层的全连接网络,假设最简单的情况,激活函数为
f_i(x) = x
,其中i为第i层,x是i层输入,那么
f_i+1 = f(f_i * w_i+1 + b_i+1) = f_i * w_i+1 + b_i+1
。假设求隐层1的梯度:
\triangledown w_1 = \frac{\partial Loss}{\partial w_1} = \frac{\partial Loss}{\partial f_4} * \frac{\partial f_4}{\partial f_3} * \frac{\partial f_3}{\partial f_2} * \frac{\partial f_2}{\partial w_1} = \frac{\partial Loss}{\partial f_4} * w_3 * w_2 * w_1
,每个函数对于激活函数求导为1,省略了。假设最简单的情况,每个w是一样的,则为w^n-1(n为隐层层数),那么如果w大于1,层数越多,呈指数级爆炸增长,如果w小于1,呈指数级缩小趋近于0。这就是梯度爆炸梯度消失的由来。

2.解决方案

2.1梯度剪切、正则化

梯度剪切是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果超过阈值就将梯度限制为阈值。可以防止梯度爆炸。

2.2使用relu激活函数

  sigmoid求导的曲线如图:


img_f52a00d28a4d6e2e1c79694c596cca9a.png

sigmoid的导数最大值为1/4,在求梯度的过程中,很容易出现梯度消失的情况。发生梯度爆炸的情况是w > 4才可能发生。relu可以避免这些。

2.3良好的参数初始化策略也能缓解梯度爆炸问题(权重正则化)

2.4使用残差结构

2.5使用lstm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值