神经网络梯度消失原因

20 篇文章 0 订阅
13 篇文章 1 订阅

(PS:因时间关系,本文是口水话,很少公式。需要一定神经网络知识的小伙伴才看的懂哦。如有不对,请批评指正)

-----下面进入正题------------------------------


1. 众所周知,神经网络中的激活函数,很多都是用的S型函数。(sigmiod函数)

2. 当神经网络层次够深的时候,更新权重,也许会出现梯度消失!!!


原因如下:

1 神经网络用的是梯度下降法,来进行每次更新网络的权重w,假如loss函数为: (简写的)

     Loss = (y - y')^2,  其中y = f(wx + b) 

     那么,每次更新w用求导法则 w = w + w',   w' = (Loss对w的求导),也就是每次的梯度,对吗? ok...继续......

     但是:我们知道复合函数求导:是一层一层又一层,多层函数求导相乘,对吧......

    所以最后w' 应该是:(Loss对y求导)*(y对f函数求导)*(f函数对w求导)

2. 注意上述中间项:(y对f型函数求导), 因为f是激活函数,即sigmiod函数。

    所以其实这一中间项:就是sigmiod函数求导,我们经过推算,sigmiod函数求导,他的导数值永远遵循如下:

什么意思?  就是S型函数的求导值:永远是小于0.25的!!!

这又是什么意思?,也就是说,假如 哪怕我取s函数求导最大为0.25好吧  ------>

 

那么:假如你的深度网络有100层,方向传播求w的时候,根据函数求导要一层又一层的原因----------->

那么:  w', 也就是梯度,对100层网络来说,其反向传播走到接近输入层的时候,最终会拖着很长很长的计算公式:

(LOSS求导)*(S型函数求导)*(S型函数求导)*(S型函数求导)... * ... *(S型函数求导) * (最后函数对W求导)... 等等...

这不就是一个值*0.25*0.25*0.25*0.25*...*0.25 *其他等等吗?

那么: 若干个0.25相乘,快趋近于0了好吧,所以梯度消失了.................

【注:如若中途求导的w很大|w|>4了,则 累计多个大于1的相乘,这时候出现的是称为:梯度爆炸!!!!!!!!!!!!】

 

如何防止梯度消失:

网络层中适当的用Relu激活函数就可以。为什么? 因为Relu函数长这样:

1. x>0 的时候,relu是y=x, 求导就是1,套到前面的论述的话:100个1 相乘还是为1, 大不了不变呗,但不会梯度消失

2 x<0 的时候,relu=0,常数求导为0,这个意思就是:大不了那个神经元不更新,起到网络稀疏的效果...

 

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值