训练中Loss为Nan的原因,梯度消失或者爆炸的优化


向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程   公众号:datayx

现象

如何确定是否出现梯度爆炸?

在训练过程中出现梯度爆炸会伴随一些细微的信号,如:

(1)模型无法从训练数据中获得更新;

(2)模型不稳定,导致更新过程中的损失出现显著变化;

(3)训练过程中,模型的损失变为Nan。


梯度消失与梯度爆炸原因

首先,来看神经网络更新梯度的原理,即反向传播算法。

详细推导参考

http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95

通过反向传播算法更新梯度的公式可以看到,影响梯度更新的有,初始权重、激活函数、梯度流动方式、损失值过大等。

下面分别来一一进行介绍:

(1)初始权重带来的影响:神经网络权重初始化不当;

(2)激活函数带来的影响:激活函数选择不当;

(3)梯度流动方式带来的影响:网络结构本身的问题,如RNN;

(4)损失值过大带来的影响:数据集的问题,如标注不准等。

下面,就来对这几种情况分别进行一一介绍。

 

神经网络权重初始化不当

当网络过深,如果连乘的因子大部分小于1,最后乘积可能趋于0;另一方面,如果连乘的因子大部分大于1,最后乘积可能趋于无穷。这就是所谓的梯度消失与梯度爆炸。

防止因权重初始化不当带来的梯度爆炸:

(1) 使用Xavier初始化法或者MSRA初始化法,使得在深度网络的每一层,激活值都有很好的分布。

(2) 使用预训练模型,初始化已有网络层的权重。

激活函数选择不当

神经网络常用的激活函数可参考:

https://blog.csdn.net/u013250416/article/details/80991831

如果选择sigmoid 或者 tanh 函数,由它们的曲线可以看出,当输入很大或者很小的时候,饱和的神经元会带来梯度消失。

防止因激活函数选择不当带来的梯度消失:

1.最常使用Relu,需要小心地调节学习速率(如果relu参数初始化不理想,前向计算结果为负值,则进行梯度计算的时候全部变为0,在反向计算的时候也会没有响应);

2.偶尔可考虑Relu的变种,如Leaky Relu;

3.一般不使用sigmoid

神经网络本身的结构问题,如RNN

RNN相当于把许多循环神经网络单元连接成一个序列。可以设想梯度流穿过,当我们要计算关于h0的损失函数的梯度时,反向传播需要经过RNN中的每一个单元。每次反向传播经过一个单元时,都要使用其中某一个W的转置。

这意味着最终的表达式对h0梯度的表达式将会包含很多很多权重矩阵因子,这样不断对同一个值做乘法,是非常糟糕的。

在标量情况下,要么当这个值的绝对值大于1时,发生梯度爆炸;要么当这个值的绝对值小于1时,发生梯度消失,直到为0。既不发生梯度爆炸也不发生梯度消失,也就是当这个值正好为1。

对于矩阵而言,需要关注矩阵的最大奇异值,如果最大奇异值大于1,会发生梯度爆炸;如果最大奇异值小于1,会发生梯度消失。

防止因使用循环神经网络RNN带来的梯度消失与梯度爆炸问题:

1.设置梯度剪切阈值(gradient clipping threshold),一旦梯度超过该值,直接设置为该值;

2.使用沿时间的截断反向传导方法。

https://blog.csdn.net/u013250416/article/details/81276671

2.使用更加复杂的RNN结构,例如LSTM。

LSTM能尽量避免梯度爆炸或者梯度消失的原因有两个:

1.这里的遗忘门是矩阵元素相乘,而不是矩阵相乘。

2.矩阵元素相乘,可能会在不同的时间点乘以一个不同的遗忘门。

3.遗忘门是一个sigmoid函数,所以矩阵元素相乘的结果,会保证在(0,1)之间。

4.从最后的隐藏单元状态,反向传播到第一个单元状态,在反向传播的路径上,我们只通过一个单一的非线性tanh向后传播,而不是在每一个时间步长中单独设置tanh函数。

数据集本身问题

数据集本身可能标注不准确,引入大量噪声。以图片数据集为例,具体情况可能包括:

1.在目标检测中,四边形标注框与实际不匹配,标注框的面积过多大于实际目标的面积;

2.在使用mask rcnn检测目标时,只用四点标注的bounding boxes来生成mask,可能会导致生成的mask不够准确。如果偏差过大,也会引入梯度爆炸;

3.在场景文字检测中,为了套用已有的检测水平方向物体的目标检测框架,将原有的任意四边形标注框转换为其水平方向的最小外接矩形,也会导致标注框的面积过多大于实际目标的面积;

4.在场景文字识别中,对于一张完整的图片,一般是根据坐标对单词区域进行裁剪,再将所有的单词区域缩放成相同的大小。一是单词区域裁剪不准确,二是如果缩放尺寸没有选择好,较小的图片放大成过大的尺寸,会使得训练图片非常模糊,引入大量噪声。

对于数据集本身的问题,带来的梯度爆炸问题,一般需要注意,尽量使得标注准确,除非是进行难样本挖掘操作,一般尽量使用清晰的图片。

深度学习网络训练中出现loss函数为nan的原因

1. 学习率太大,步子迈的太大导致梯度爆炸等都是有可能的。

2.  网络结构不合理,导致的Non

    1. 增加或者减少网络的深度

    2. 增加网络的宽度

    3. 不当的损失函数

    4. relu和softmax两层不要连着用,最好将relu改成tanh,也算一个技巧。

3. 数据处理的不合理,导致的Non

   1. batch size 选择过小

   2. 检查 参数初始化

   3. 数据本身,是否存在Nan,可以用numpy.any(numpy.isnan(x))检查一下input和target 

   4. 在训练的时候,整个网络随机初始化,很容易出现Nan,这时候需要把学习率调小,可以尝试0.1,0.01,0.001,直到不出现Nan为止,如果一直都有,那可能是网络实现问题。学习率和网络的层数一般成反比,层数越多,学习率通常要减小。有时候可以先用较小的学习率训练5000或以上次迭代,得到参数输出,手动kill掉训练,用前面的参数fine tune,这时候可以加大学习率,能更快收敛哦


阅读过本文的人还看了以下文章:

【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

《美团机器学习实践》_美团算法团队.pdf

《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

python就业班学习视频,从入门到实战项目

2019最新《PyTorch自然语言处理》英、中文版PDF+源码

《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

《深度学习之pytorch》pdf+附书源码

PyTorch深度学习快速实战入门《pytorch-handbook》

【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

《Python数据分析与挖掘实战》PDF+完整源码

汽车行业完整知识图谱项目实战视频(全23课)

李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

《神经网络与深度学习》最新2018版中英PDF+源码

将机器学习模型部署为REST API

FashionAI服装属性标签图像识别Top1-5方案分享

重要开源!CNN-RNN-CTC 实现手写汉字识别

yolo3 检测出图像中的不规则汉字

同样是机器学习算法工程师,你的面试为什么过不了?

前海征信大数据算法:风险概率预测

【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

VGG16迁移学习,实现医学图像识别分类工程项目

特征工程(一)

特征工程(二) :文本数据的展开、过滤和分块

特征工程(三):特征缩放,从词袋到 TF-IDF

特征工程(四): 类别特征

特征工程(五): PCA 降维

特征工程(六): 非线性特征提取和模型堆叠

特征工程(七):图像特征提取和深度学习

如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

Machine Learning Yearning 中文翻译稿

蚂蚁金服2018秋招-算法工程师(共四面)通过

全球AI挑战-场景分类的比赛源码(多模型融合)

斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

python+flask搭建CNN在线识别手写中文网站

中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

长按图片,识别二维码,点关注

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值