另一方面,出现梯度消失梯度的原因:在深层网络中,如果激活函数的导数小于1,则根据链求导规律,接近输入层的参数梯度与小于1的数相乘越来越小,最终接近0。 例如,sigmoid函数导数f'(x ) f'(x ) ) f'(x ) )的值域为(0)

因此,梯度消失的原因往往是网络层次过深和3358www.Sina.com/,如sigmoid函数。

梯度消失的表现:模型不从训练数据中更新,损失几乎没有变化。

二、出现梯度爆炸的原因:与梯度消失的原因一样,求出损耗函数参数的偏导数,梯度连续乘法总是遇到较大的绝对值,一些参数的梯度因乘以许多较大的数而变得非常大,模型无法收敛

因此,梯度爆炸的原因也是激活函数选择不当,或网络层次过深

梯度爆炸表现: (1)模型不稳定,更新过程中损失变化明显。

)2)训练中,模型损失为NaN。

三、坡度消失爆炸的解决方法:重新设定网络结构,减少网络层数,调整学习率(消失增大、爆炸减少)。 预训练和微调该方法来自Hinton 2006年发表的论文,hint on提出采用无监督分层训练方法解决坡度问题。 其基本思想是每次训练一个层次的隐藏节点,训练时输入上一层隐藏节点的输出,这个过程是分层次的“预训练”(预训练结束后,对整个网络进行“精细调整”(fine-tunning )。 Hinton是训练深度信念网络(Deep Belief Networks ),采用该方法,每层预训练完成后,采用BP算法训练整个网络。 这一观点相当于首先寻找局部最优,然后综合起来寻找全局最优,这种方法有一定的好处,但目前很少得到应用。 激活函数采用relu、leaky relu、elu等。 batch normalization交换参数初始化方法(在CNN的情况下,一般使用xavier或msra的初始化方法)使用残差模块来调整深度神经网络的结构,使用DESNET模块或LSTM等结构(例如l2正则化)梯度爆炸避免)学习率降低,batch size降低)梯度爆炸避免)梯度限幅)对RNN,加入梯度限幅,每当梯度达到一定阈值时,将他们恢复为较小的数字。 扩展:为什么loss突然变成nan? 可能的原因:

1、培训样本中出现脏数据或输入数据不规范化

2、学习速度过大,坡度值过大,发生坡度爆炸

3、一些涉及指数计算的,最后计算出的值是INF (无限)。 例如,不进行其他处理的softmax可能需要计算分子分母为exp ) x ),值过大,最后为INF/INF,从而得到NaN。 此时,与使用的softmax中为exp ) x )的计算相关的处理)进行最大值的减法运算等

4、不当损失函数(特别是自定义损失函数时);

5、卷积层的卷积步长大于卷积核大小时。

现在的网络普遍采用ReLU激活函数,为什么还存在梯度爆炸和消失的问题呢? 梯度消失和梯度爆炸存在于relu下,随着网络层数的加深,活动趋于变大变小,并趋于变大梯度爆炸。 (请记住,在计算坡度时,每次沿相反方向在层中传播时,都会乘以此层的活动,然后沿较小的方向进入死区,从而使坡度消失。) . 这两个问题的最大影响是深层网络难以转换。 BN和xavier初始化(这里指出应该用msra初始化。 这是贺凯明大神们对xavier的修正,实际上经常用xavier除以2 )在很大程度上解决了这个问题。 sigmoid中不存在梯度爆炸,活动度越大,向越小的方向移动时梯度消失。

由于ReLU的负侧坡度为0,因此(很少)坡度可能会消失。 在这种情况下,可以用PReLU代替。 如果使用PReLU,但坡度分散或爆炸,请直接进入BN,因为对调整初始化参数,自己调整参数不自信或懒惰。 sigmoid为什么会出现梯度消失现象,是因为sigmoid(x )在不同比例的x处的梯度变化太大。 另外,x的比例越大,坡度消失就越快,如果网络不更新,就无法再恢复。

权值初始化值太大

培训深度学习网络时,为什么会出现Nan? 怎样才能避免呢?

坡度消失和坡度爆炸的原因、表现及解决办法

保持警惕! 损耗是Nan或超大的原因

知乎(神经网络循环训练3000次后,交叉熵损失是nan的原因吗?

详细求解机器学习中的梯度消失、爆炸原因及其解决方法

坡度消失,坡度爆炸,表现出来

知乎(怎么理解梯度方差和梯度爆炸?

极速赛车五码稳赢技巧>

5、卷积层的卷积步长大于卷积核大小时。

现在的网络普遍采用ReLU激活函数,为什么还存在梯度爆炸和消失的问题呢? 梯度消失和梯度爆炸存在于relu下,随着网络层数的加深,活动趋于变大变小,并趋于变大梯度爆炸。 (请记住,在计算坡度时,每次沿相反方向在层中传播时,都会乘以此层的活动,然后沿较小的方向进入死区,从而使坡度消失。) . 这两个问题的最大影响是深层网络难以转换。 BN和xavier初始化(这里指出应该用msra初始化。 这是贺凯明大神们对xavier的修正,实际上经常用xavier除以2 )在很大程度上解决了这个问题。 sigmoid中不存在梯度爆炸,活动度越大,向越小的方向移动时梯度消失。

由于ReLU的负侧坡度为0,因此(很少)坡度可能会消失。 在这种情况下,可以用PReLU代替。 如果使用PReLU,但坡度分散或爆炸,请直接进入BN,因为对调整初始化参数,自己调整参数不自信或懒惰。 sigmoid为什么会出现梯度消失现象,是因为sigmoid(x )在不同比例的x处的梯度变化太大。 另外,x的比例越大,坡度消失就越快,如果网络不更新,就无法再恢复。

权值初始化值太大

培训深度学习网络时,为什么会出现Nan? 怎样才能避免呢?

坡度消失和坡度爆炸的原因、表现及解决办法

保持警惕! 损耗是Nan或超大的原因

知乎(神经网络循环训练3000次后,交叉熵损失是nan的原因吗?

详细求解机器学习中的梯度消失、爆炸原因及其解决方法

坡度消失,坡度爆炸,表现出来

知乎(怎么理解梯度方差和梯度爆炸?