向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  

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

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

  1. 使用caffe训练时Loss变为nan的原因

    极视角高校计算机视觉算法邀请赛目前正在报名中,欢迎各高校在读学生报名参加,大奖+商业项目参与机会+数据库等你来拿!!!咨询报名请加小助手(微信号:Extreme-Vision) 本文为极市平台原创编译 ...

  2. pytorch训练过程中loss出现NaN的原因及可采取的方法

    在pytorch训练过程中出现loss=nan的情况 1.学习率太高. 2.loss函数 3.对于回归问题,可能出现了除0 的计算,加一个很小的余项可能可以解决 4.数据本身,是否存在Nan,可以用n ...

  3. matlab损失函数出现nan,[译]在训练过程中loss出现NaN的原因以及可以采取的方法。...

    1.梯度爆炸 原因:在学习过程中,梯度变得非常大,使得学习的过程偏离了正常的轨迹. 症状:观察输出日志(runtime log)中每次迭代的loss值,你会发现loss随着迭代有明显的增长,最后因为l ...

  4. 训练网络loss出现Nan的原因总结记录

    1. 学习率过大 2. 数据发生了损坏

  5. 反向传播算法推导、激活函数、梯度消失与爆炸

    目录 反向传播算法 定义 推导过程 激活函数 定义 性质 常用的激活函数 Sigmoid Tanh ReLU softmax 梯度消失与梯度爆炸 起因 出现的原因 表现 解决方案 参考文档 反向传播算 ...

  6. 网络nan的原因_训练网络loss出现Nan解决办法

    训练网络loss出现Nan解决办法 一.原因 一般来说,出现NaN有以下几种情况: 1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率.可以不断降低学习率直 ...

  7. 梯度消失和梯度爆炸_梯度消失、爆炸的原因及解决办法

    一.引入:梯度更新规则 目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,更新优化深度网络的权值.这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来 ...

  8. RNN梯度消失和爆炸的原因 以及 LSTM如何解决梯度消失问题

    RNN梯度消失和爆炸的原因 经典的RNN结构如下图所示: 假设我们的时间序列只有三段,  为给定值,神经元没有激活函数,则RNN最简单的前向传播过程如下: 假设在t=3时刻,损失函数为  . 则对于一 ...

  9. ztree在刷新时第一个父节点消失_从反向传播推导到梯度消失and爆炸的原因及解决方案(从DNN到RNN,内附详细反向传播公式推导)...

    引言:参加了一家公司的面试和另一家公司的笔试,都问到了这个题!看来很有必要好好准备一下,自己动手推了公式,果然理解更深入了!持续准备面试中... 一. 概述: 想要真正了解梯度爆炸和消失问题,必须手推 ...

最新文章

  1. Permission denied: user=root, access=WRITE, inode=/:hadoopuser:supergroup:drwxr-xr-x
  2. python笔记 xpinyin
  3. 2021-11-05 虚拟机centos7更改root与home分区大小
  4. 拦截锚点修改url_前端系列课程(2)-网络基础概念(URL)
  5. unity3d Vector3.Lerp解析
  6. 目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018)
  7. Mac下安装MySQL
  8. MySql 学习笔记-Mysql架构介绍与查询sql执行流程
  9. hql与sql的区别(转)
  10. 拓端tecdat|卡尔曼滤波器:用R语言中的KFAS建模时间序列
  11. 电子设计从零开始(第2版)pdf
  12. 【Python】爬取TapTap原神评论并生成词云分析
  13. 手游营销的10个靠谱方向
  14. python瓦登尔湖词频统计
  15. Java项目:图书馆管理系统思路分析
  16. ios label内字体置顶_IOS_Vertically align UILabel文本置顶 | 学步园
  17. 文明5 java 英_文明5模组“Future Worlds”(未来世界)中英版补丁
  18. iphoneX布局适配及iOS 11.0系统适配
  19. 关于ligerui grid分页checkbox绑定问题
  20. pytorch:交叉熵(cross entropy)

热门文章

  1. java:Map借口及其子类HashMap五,identityHashMap子类
  2. Burp Suite
  3. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)
  4. 谈谈我自己为什么突然想写技术博客
  5. 计算机会计技术特点,会计电算化的特点
  6. C++简易复数类的实现
  7. elasticsearch报错exceptions.RequestError(400, u'mapper_parsing_exception', u'No handler field..
  8. Git1天打卡 day13-查看仓库文件改动状态
  9. c语言调整图片分辨率,如何不改变图片分辨率,并且缩小图片质量-电脑自学网...
  10. 技术提升为管理,最重要的能力是什么?