关于CNN、RNN中的梯度爆炸/梯度弥散

梯度爆炸(gradient explosion) 与 梯度弥散(gradient vanishing) 是神经网络研究中常可能遇到的问题,主要体现在训练不收敛,误差、权重波动大,以及出现NaN值,本文以CNN与RNN为例,说明梯度爆炸/弥散的产生原因

CNN

CNN神经网络的简易图如下:cnn
f f f表示卷积函数,忽略pooling层,则每一层的运算可以表示为 x n = f ( W n x n − 1 + b n ) x_n=f(W_nx_{n-1}+b_n) xn=f(Wnxn1+bn)

也即 x n = f ( W n x n − 1 + b n ) = f ( W n f ( W n − 1 x n − 2 + b n − 1 ) + b n ) = f ( W n f ( W n − 1 f ( W n − 2 x n − 3 + b n − 2 ) + b n − 1 ) + b n ) ⋅ ⋅ ⋅ x_n=f(W_nx_{n-1}+b_n) =f(W_nf(W_{n-1}x_{n-2}+b_{n-1})+b_n)=f(W_nf(W_{n-1}f(W_{n-2}x_{n-3}+b_{n-2})+b_{n-1})+b_n)··· xn=f(Wnxn1+bn)=f(Wnf(Wn1xn2+bn1)+bn)=f(Wnf(Wn1f(Wn2xn3+bn2)+bn1)+bn)

因此,若最后的误差为E,则其对第一层权重的导数为 ∂ E ∂ W 1 = ∂ E ∂ f n × ∂ f n ∂ α × W n × ∂ f n − 1 ∂ α × W n − 1 ⋅ ⋅ ⋅ × ∂ f 1 ∂ α × ∂ α ∂ W 1 \frac{\partial{E}}{\partial{W_1}}=\frac{\partial{E}}{\partial{f_n}} × \frac{\partial{f_n}}{\partial{α}}×W_n× \frac{\partial{f_{n-1}}}{\partial{α}}×W_{n-1}···× \frac{\partial{f_1}}{\partial{α}}×\frac{\partial{α}}{\partial{W_1}} W1E=fnE×αfn×Wn×αfn1×Wn1×αf1×W1α

其中α为激活函数,则以sigmoid函数为例,其导数的取值范围为(0, 0.25],即上面的每一项 ∂ f n ∂ α \frac{\partial{f_n}}{\partial{α}} αfn都小于1,则当网络足够深,会导致越接近输入层的神经元,梯度几乎为0,长时间得不到更新

若为tanh,则范围在(0,2),当每一项大于1时就会出现梯度爆炸,权重更新不稳定

RNN

在CNN中,所谓权值共享仅发生在单个的一层,不同层对应的Wi是不同的,而在RNN中,则是每个时间步都共用一个权重,因此梯度是累加的(RNN中为什么要采用tanh而不是ReLu作为激活函数):

∂ f n ∂ W 1 = ∂ f n ∂ α n × f n − 1 + ∂ f n ∂ α n × W × ∂ f n − 1 ∂ α n − 1 × f n − 1 + ⋅ ⋅ ⋅ + ∏ i = 0 n ∂ f i ∂ α i × ∂ f a 1 ∂ W × W n \frac{\partial{f_n}}{\partial{W_1}}=\frac{\partial{f_n}}{\partial{α_n}}×f_{n-1} +\frac{\partial{f_n}}{\partial{α_n}}×W×\frac{\partial{f_{n-1}}}{\partial{α_{n-1}}}×f_{n-1}+···+\prod_{i=0}^n{\frac{\partial{f_i}}{\partial{α_i}}}×\frac{\partial{fa_1}}{\partial{W}}×W^n W1fn=αnfn×fn1+αnfn×W×αn1fn1×fn1++i=0nαifi×Wfa1×Wn

因此这里越往前回溯,则将有越多的W连乘,若采用ReLU,系数为1,无法弥补W连乘带来的梯度问题

于是经常采取tanh函数

对于梯度问题,经常采用的方法包括但不限于:

  • 在CNN中采用恒等映射,RNN中采用LSTM
  • 梯度截断,设置一个梯度阈值,超过时进行阶段(该阈值的设定需要一定经验)
  • 对权重进行正则化,如L1(权重的绝对值和)正则化与L2(权重的绝对值平方和再开方)正则化
  • 模型重构
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值