梯度消失与梯度爆炸的原因

在学习resnet时发现一个问题:
在这里插入图片描述

在深度神经网络中,如果层数过大,会导致梯度消失、梯度下降的问题。
残差网络中的shortcut可以解决这一问题。
今天先来说清楚梯度消失、梯度下降的原因。

参考文章

为啥有梯度消失、梯度下降?
https://www.zhihu.com/question/290392414/answer/940509039
详解深度学习中的梯度消失、爆炸原因及其解决方法
https://zhuanlan.zhihu.com/p/33006526

先从最基本的单层神经网络入手。
在这里插入图片描述
正向传播的公式如下:

a = ( x 1 ∗ w 1 + x 2 ∗ w 2 ) (1) a = (x_1*w_1+x_2*w_2) \tag{1} a=(x1w1+x2w2)(1)
h = s i g m o d ( a ) (2) h = sigmod(a) \tag{2} h=sigmod(a)(2)
其中, x 1 , x 2 x_1,x_2 x1,x2 为一个输入样本的两个维度, w 1 , w 2 w_1,w_2 w1,w2 为权重, a a a 为线形激活后的值, h h h 为经过非线性激活 s i g n e d ( ) signed() signed() 后的预期值(在学习过程中往往用 y ^ \hat{y} y^ 表示)。
为了方便我们省略偏差(bias),并且使用均方差函数作为loss。
l o s s = 1 2 ( h − y ) 2 (3) loss = \frac{1}{2}(h - y)^2 \tag{3} loss=21(hy)2(3)
loss即为损失函数,y对应实际的标签。
下面我们开始一步步求导。
在公式3中对,对h求导。
d l o s s d h = h − y (4) \frac{d_{loss}}{d_h} = h-y \tag{4} dhdloss=hy(4)
在公式2中,对a求导。
d h d a = a ( 1 − a ) (5) \frac{d_h}{d_a} = a(1-a) \tag{5} dadh=a(1a)(5)
顺便提一下,sigmod函数的原始形式。
s ( x ) = 1 1 − e x (6) s(x) = \frac{1}{1-e^x} \tag{6} s(x)=1ex1(6)
求导之后。
s ′ ( x ) = 1 1 − e x ( 1 − 1 1 − e x ) (7) s'(x) = \frac{1}{1-e^x}(1 - \frac{1}{1-e^x}) \tag{7} s(x)=1ex1(11ex1)(7)
在公式1中,对x,w求导比较简单。
d a d w 1 = x 1 (8) \frac{d_a}{d_{w1}} = x_1 \tag{8} dw1da=x1(8)
d a d x 1 = w 1 (9) \frac{d_a}{d_{x1}} = w_1 \tag{9} dx1da=w1(9)
d a d w 2 = x 2 (10) \frac{d_a}{d_{w2}} = x_2 \tag{10} dw2da=x2(10)
d a d x 2 = w 2 (11) \frac{d_a}{d_{x2}} = w_2 \tag{11} dx2da=w2(11)
经过一系列的求导,根据链式,我们得到下面的公式。
d l o s s d w i = d l o s s ∗ d h ∗ d a d h ∗ d a ∗ d w i = ( h − y ) ∗ a ( 1 − a ) ∗ x i (12) \frac{d_{loss}}{d_{wi}} = \frac{d_{loss}*d_h*d_a}{d_h*d_a*d_{wi}} = (h-y)*a(1-a)*x_i \tag{12} dwidloss=dhdadwidlossdhda=(hy)a(1a)xi(12)
d l o s s d x I = d l o s s ∗ d h ∗ d a d h ∗ d a ∗ d x i = ( h − y ) ∗ a ( 1 − a ) ∗ w i (13) \frac{d_{loss}}{d_{xI}} = \frac{d_{loss}*d_h*d_a}{d_h*d_a*d_{xi}} = (h-y)*a(1-a)*w_i \tag{13} dxIdloss=dhdadxidlossdhda=(hy)a(1a)wi(13)
根据公式5-7,我们可以得到sigmod函数的求导函数。并且sigmod求导函数的值域在[0,1]之间。关于这个值域问题,我们看下面的图。
在这里插入图片描述
图例是sigmod函数求导之后,y关于x的图像。
我们根据公式12、公式13已经找到了当前单层神经网络的梯度。
其中 a ( 1 − a ) a(1-a) a(1a)能够确定是一个0到1之间的数值。
接着讨论 ( h − y ) ∗ w 1 (h-y)*w_1 (hy)w1 ( h − y ) ∗ x 1 (h-y)*x_1 (hy)x1的对梯度的影响即可。
在上述两个式子的作用下,如果每一层的梯度都在0到1之间,那么梯度会变得越来越小,最后出现梯度消失现象。
如果每一层的梯度都大于1,那么梯度会变得越来越大,最后出现梯度爆炸的现象。
原答者认为,梯度消失、爆炸很大程度上取决于权重的初始化有关。根本原因是链式法则运算导致的层层缩放。
在下认为,避免出现梯度消失、梯度爆炸要注意权重的初始化,毕竟余下的 w 1 , x 1 , y w_1,x_1,y w1x1y已是可以确定的条件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值