【学术】浅谈神经网络中的梯度爆炸问题

梯度爆炸是一个在训练过程中大的误差梯度不断累积,导致神经网络模型权重出现大幅更新的问题。这会影响你的模型不稳定,无法从你的训练数据中学习。

在这篇文章中,我将带你了解深度人工神经网络的梯度爆炸问题。

什么是梯度爆炸?

误差梯度是在训练神经网络时计算的方向和量的大小,用于在正确的方向以正确的量更新网络权重。在深度网络或RNN中,更新过程中可能会累积误差梯度,并最终累积成非常大的梯度。这会导致网络权重的大幅更新,从而导致网络不稳定。在极端情况下,权重的值可能会大到溢出导致出现NaN值。具有大于1.0的值的网络层重复地增加梯度经过指数增长最终发生爆炸。

什么是梯度爆炸?

在深度多层感知器网络中,梯度爆炸可能导致神经网络不稳定,使之不能从训练数据中学习,甚至是无法更新的NaN权重值。

爆炸梯度会使学习变得不稳定。

– 第282页,深度学习,2016。

在RNN中,爆炸梯度会导致神经网络不稳定,无法从训练数据中学习,最好的情况下,网络不能学习数据的长输入数据序列。

梯度爆炸问题是指训练过程中梯度范数的大幅增加。往往是由于长期成分的激增。

– 训练RNN时遇到的困难

怎样知道是否存在梯度爆炸?

这些微妙的迹象表明,在你的网络训练过程中,可能会遇到梯度爆炸的情况,例如:

  • 该模型在训练数据上无法得到牵引(如,poor loss)。
  • 该模型是不稳定的,导致从两次更新之间的损失有巨大的变化。
  • 训练期间模型损失呈现NaN。

如果你有这些类型的问题,你可以深入挖掘,看看你是否有梯度爆炸的问题。

这些迹象,可以用来确认是否存在梯度爆炸。

  • 训练期间,模型权重很快变得非常大。
  • 训练期间,模型权重转换为NaN值。
  • 训练期间,每个节点和层的误差梯度值始终高于1.0。

如何修复爆炸梯度?

解决爆炸梯度有很多方法。在这里我列出一些你可能会用到的比较好的处理方法。

1.重新设计网络模型

在深度神经网络中,可以通过重新设计网络减少层数来解决梯度爆炸。在训练网络时,使用较小的批处理大小也会对此有益。在RNN中,在训练期间通过较少的先前时间步进行更新,被称为截断BPTT(Backpropagation through time),可以减少爆炸梯度问题。

2.使用RELU激活

在深层多感知神经网络中,如果选择某些激活函数可能会出现梯度爆炸,如sigmoid函数和tanh函数。

在这里使用ReLU激活函数减少梯度爆炸。采用ReLU激活功能是对隐藏层最新最好的处理方法。

3.使用LSTM

在RNN中,由于这种类型的网络训练的固有不稳定性,会发生梯度爆炸,例如BPTT本质上是将循环网络换成深度多层的感知神经网络。

通过使用LSTM存储器单元和可能相关的gated-type神经元结构,可以减少爆炸梯度。采用LSTM存储单元是对用于序列预测的RNN最新最好的处理方法。

4.使用梯度裁剪

即使以上方法都使用,梯度爆炸仍然可能发生。如果梯度爆炸仍在出现,你可以在网络训练期间检查并限制梯度的大小。这种方法被称为梯度裁剪。

处理梯度爆炸有一个简单但非常有效的解决方案:如果他们的范数超过给定的阈值,则将梯度裁剪掉。

– 第5.2.4节,梯度消失和梯度爆炸,自然语言处理中的神经网络方法,2017。

具体来说,如果误差梯度超过阈值,则将检查误差梯度的值与阈值进行核对并将其裁剪掉或将它设置为阈值。

在某种程度上,梯度爆炸问题可以通过梯度裁剪(在执行下降梯度之前对梯度值进行阈值化)来减轻。

– 294页,深度学习,2016。

在Keras深度学习库中,可以在训练之前通过在优化器上设置clipnorm或clipvalue参数来使用梯度裁剪。

比较好的默认值是clipnorm = 1.0和clipvalue = 0.5。

  • 在Keras API中使用优化器

5.使用权重正则化

还有方一种法,如果梯度梯度仍然存在,则检查网络权重的大小,并对大权重值的网络损失函数应用惩罚。

这种方法称为权重正则化,通常可以使用L1(绝对权重)或L2(平方权重)惩罚。

对权重使用L1惩罚或L2惩罚有助于解决梯度爆炸

– 关于训练RNN的难题,2013年。

在Keras深度学习库中,可以通过在层上设置kernel_regularizer参数并使用L1L2正则化矩阵来使用权重正则化。

  • 在Keras接口中使用正则化

总结

阅读这篇文章后,你了解了:

  • 什么是爆炸梯度,以及它们在训练过程中会产生怎样的问题。
  • 如何知道你的网络模型是否有梯度爆炸?
  • 如何解决网络中出现梯度爆炸的问题。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【干货】监督学习与无监督学习简介

【导读】本文是一篇入门级的概念介绍文章,主要带大家了解一下监督学习和无监督学习,理解这两类机器学习算法的不同,以及偏差和方差详细阐述。这两类方法是机器学习领域中...

3818
来自专栏机器学习原理

机器学习(18)——神经网络算法思想:从线性思想到最基础神经网络神经网络算法

前言: 关于“神经网络”这个词想必对人工智能感兴趣额的早已经熟得不能再熟悉了,在机器学习和认知科学领域,人工神经网络(artificial neural ne...

3736
来自专栏机器之心

解读 | 如何从信号分析角度理解卷积神经网络的复杂机制?

机器之心原创 作者:Qintong Wu 参与:Jane W 随着复杂和高效的神经网络架构的出现,卷积神经网络(CNN)的性能已经优于传统的数字图像处理方法,如...

2688
来自专栏机器之心

教程 | CMU研究者探索新卷积方法:在实验中可媲美基准CNN(附实验代码)

选自medium 作者:Sahil Singla 机器之心编译 参与:Panda 尽管卷积神经网络成就非凡,但卷积本身并不完美,卡内基梅隆大学计算机科学博士 S...

31310
来自专栏AI研习社

视频 | 手把手教你构建图片分类器,备战 kaggle 大赛!

AI 研习社按:今天为大家带来硅谷深度学习网红 Siraj 的一则教学视频:如何从零开始构建一个图像分类器来对猫和狗进行分类。(内心OS:终于要开始图像部分了!...

3264
来自专栏有趣的Python和你

机器学习实战之Logistic回归

Logistic回归涉及到高等数学,线性代数,概率论,优化问题。本文尽量以最简单易懂的叙述方式,以少讲公式原理,多讲形象化案例为原则,给读者讲懂Logistic...

1403
来自专栏ATYUN订阅号

序列预测问题的简单介绍

序列预测与其他类型的监督学习问题不同。这个序列在观察结果上被强加了一个命令:当训练模型和做预测时序列必须保存。通常,包含序列数据的预测问题被称为序列预测问题,尽...

2765
来自专栏AI研习社

教你用Keras做图像识别!只会图像检测并不强力

AI 研习社按:今天为大家带来硅谷深度学习网红 Siraj 的一则教学视频:如何从零开始构建一个图像分类器来对猫和狗进行分类。(内心OS:终于要开始图像部分了!...

3637
来自专栏人工智能头条

卷积神经网络一些问题总结

1304
来自专栏Deep learning进阶路

深度学习论文笔记(六)--- FCN-2015年(Fully Convolutional Networks for Semantic Segmentation)

深度学习论文笔记(六)--- FCN 全连接网络 FullyConvolutional Networks for Semantic Segmentation ...

5340

扫码关注云+社区