A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 丁柳 于 2019-4-18 10:26 编辑

什么是梯度消失?
神经元的权重w和偏置b是和激活函数的梯度成正比的,激活函数导数越大,则w,b调整越快,如果激活函数梯度很小,在反向传播时,多个小于0的导数相乘,随着神经网络层数的加深,梯度方向传播到浅层网络时,基本无法引起全职的波动,也就是没有将loss的信息传递到浅层网络,这样网络就无法训练学习了。这就是所谓的梯度消失。

以sigmoid激活函数为例:
sigmoid(x)=1/1+e^−x
该函数可以将实数压缩到开区间(0,1),其导数为:
σ′(x)=e^−x/(1+e^−x)^2=σ(x)/(1−σ(x))
函数图像如下:

数两侧十分平滑,两端无限接近0和1,只有中间一段导数较大。当x=0时,其导数取最大值0.25。选择sigmoid函数作为激活函数的优势:1)可以引入非线性;2)容易求导;3)可以将实数压缩至(0,1)
神经网络主要的训练方法是BP算法,BP算法的基础是导数的链式法则,也就是多个导数的乘积。而sigmoid的导数最大为0.25,且大部分数值都被推向两侧饱和区域,这就导致大部分数值经过sigmoid激活函数之后,其导数都非常小,多个小于等于0.25的数值相乘,其运算结果很小。

梯度消失的解决方式主要有:
1)其它激活函数
激活函数对神经网络有显著的影响,现行常见的激活函数有ReLU、Leaky ReLU。
  • ReLU
    f(x)=max(0,x)f(x)=max(



    负数一侧永远为0,正数一侧导数永远为1。ReLU的优势在于:1)不饱和;2)计算效率高;3)收敛速度快。
  • Leaky ReLU
    Leaky ReLU与ReLU十分类似,只不过在负数一侧并不完全抑制,而是给予一个小的导数。

    2)层归一化
    也即batch normalization。主要希望解决的所谓”内部协变量漂移“(internal covariate shift)问题。对于实例集合,
    Batch normalization的基本思想:深层神经网络在做非线性变换前的输入值在训练过程中,其分布逐渐发生偏移,之所以训练收敛慢,一般是整体分布逐渐往非线性激活函数的两端靠近,这导致了反向传播时浅层神经网络的梯度消失。而batch normalization就是通过一定的规范化手段,将每个隐层输入的分布强行拉回到均值为0方差为1的标准正态分布上去,这使得输入值落回到非线性激活函数”敏感“区域。这使得梯度变大,学习速度加快,大大提高收敛速度。
    以sigmoid激活函数为例,说明batch normalization的作用。下图为均值为0,方差为1的标准正态分布:
    这意味着,在1个标准差范围内,x有64%的概率落在[−1,1]范围内,x有95%的概率落在[−2,2]的范围内。
    上图为sigmoid函数的导数,在[−2,2]的范围内,sigmoid函数的导数很大,而在两端饱和区,导数接近0。这也就意味着,经过batch normalization规范化后,输入值x有较大概率获得大的导数值,远离导数饱和区,从而使得梯度变大,学习速度加快,避免了梯度消失。
    batch normalization的优势在于:1)大大提高训练速度,加快收敛过程;2)batch normalization是类似于dropout的正则化方法



3)调整初始权重或者调整网络结构

1.jpg (11.17 KB, 下载次数: 39)

1.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马