首页 > 其他分享 >神经网络梯度爆炸和消失

神经网络梯度爆炸和消失

时间:2023-11-21 17:55:56浏览次数:36  
标签:初始化 爆炸 梯度 消失 网络 神经网络 反向

神经网络梯度爆炸和消失

目录

层数比较多的神经网络模型在训练的时候会出现梯度消失(gradient vanishing problem)梯度爆炸(gradient exploding problem)问题。梯度消失问题和梯度爆炸问题一般会随着网络层数的增加变得越来越明显。

现象说明

梯度消失:

反向传播过程中需要对激活函数求导。

梯度消失是因为随着网络深度的加深,网络反向传播过,由于导数小于1。经过逐层累积而导致其越靠近输入层,其值越小。

因此靠近输入层的权值更新就会非常缓慢甚至停滞不前,那么网络深度的加深就失去了其意义,网络只等价于后面基层浅层网络的学习。

梯度爆炸:

梯度爆炸一般出现深层网络和权值初始化值太大的情况下。随着网络的深度的加深,由于导数大于1。经过逐层累积,变得非常大,梯度值太大,会导致权值瞬间跳跃,指向不应该指向的位置,导致训练收敛缓慢,甚至陷入局部最小值。

产生原因

梯度消失、梯度爆炸的原因

\[w=w-\alpha \frac{\partial J(w)}{ \partial w} \]

反向传播 在网络较深时出现梯度累积,激活函数的导数,权重初始化参数过小或过大。

1、神经网络层数过深。隐藏层的层数过多

不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入的层学习的很慢,有时甚至训练了很久,前几层的权值和刚开始随机初始化的值差不多。因此,梯度消失、爆炸,其根本原因在于在于反向传播算法的不足。多个隐藏层的网络可能比单个隐藏层的更新速度慢了几个个数量级。

2、采用了不合适的激活函数

在反向传播的链式求导过程中,如果权重乘以激活函数导数这部分大于1,随着层数加深时,梯度更新会以指数的形式增加,则会梯度爆炸;如果这部分小于1,随着层数加深,梯度会指数衰减,则会出现梯度消失。

以Sigmoid激活函数

观察Sigmoid函数曲线,可以知道其输出分布在[0,1]区间,而且在输入值较大和较小的情况,其输出值变化都会比较小,仅仅当输入值接近为0时,它们才对输入强烈敏感。sigmoid导数的图像,最大值0.25,如果使用sigmoid作为激活函数,其梯度是不可能超过0.25的,这样经过反向传播的链式求导之后,很容易发生梯度消失。

img

3、权重的初始化值不合理

权重初始值:一般会使用均值为0方差为1的高斯分布初始化参数,这种方式使得权重集中在-1到1之间,因此很容易出现梯度消失。如果初始化的值很大,就会出现梯度爆炸。

解决方法

梯度消失和梯度爆炸问题都是因为网络太深,网络权值更新不稳定造成的,本质上是因为梯度反向传播中的连乘效应

优化激活函数

换用 Relu、LeakyRelu、Elu 等激活函数

Relu激活函数,其导数为1,每层网络都尽量获得相同的更新速度。缓解梯度消失和梯度爆炸

img

权重初始化和正则化

权重初始化

可以采用好的参数初始化方法,比如 He方法,对梯度爆炸和梯度消失都有作用.

具体来说,使得前向传播时,每一层卷积计算结果的方差为1.在反向传播时,每一层向前传的梯度方差为1。

希望初始化后正向传播时,状态值方差保持不变,反向时,关于下一层激活值的梯度方差保持不变。

权重正则化

权重正则化:损失函数中加入网络参数权重的惩罚项

当梯度爆炸发生时,惩罚项(通常是L1范数或L2范数)的值会变得很大,从而抑制(或者反向)参数的更新强度(或者方向)

以此来抑制惩罚项(也可以说是正则化项)的大小,从而在一定程度上限制梯度爆炸的发生。

采用权重正则化主要目的是限制过拟合,但也可以抑制梯度爆炸,比较常见的是L1正则,L2正则;

BN归一化操作

Batch Normalization具有加速网络收敛速度, 升训练稳定性的效果,BN本质上是解决反向传播过程中的梯度问题。

BN全名是Batch Normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。

反向传播式子中有w的存在,所以w的大小影响了梯度的消失和爆炸,BN就是通过对每一层的输出规范为均值和方差一致的方法,消除了w带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。

  • Batch Normalization作用
    (1)允许较大的学习率
    (2)减弱对初始化的强依赖性
    (3)保持隐藏层中数值的均值、方差不变,让数值更稳定,为后面网络提供坚实的基础
    (4)有轻微的正则化作用(相当于给隐藏层加入噪声,类似Dropout)

使用残差结构

残差可以很轻松的构建几百层,一千多层的网络而不用担心梯度消失过快的问题,原因就在于残差的捷径(shortcut)部分

从正向来看,残差连接将浅层特征共享到深层网络中,有利于整体神经网络特征的稳定性;

从反向来看,引入深层反向的短梯度,有效地保留了更新的效果(避免梯度消失。)

详解残差网络:https://zhuanlan.zhihu.com/p/42706477

梯度裁剪

梯度裁剪解决梯度爆炸的一种高效的方法,

梯度裁剪设置一个梯度剪切阈值,将梯度强制限制在范围内。

如果更新梯度时,梯度超过了这个阈值,则利用上界将梯度限制在正常范围内

简单理解就是当其小于C时不变;当其大于C时,进行裁剪。

预训练+微调

本质上是优化权重初始化的过程

逐层训练

boosting的实现思想,通过单层单层的训练来达到不考虑梯度累计

参考资料

https://blog.csdn.net/weixin_39910711/article/details/114849349 相关现象和解释

https://zhuanlan.zhihu.com/p/483651927

https://juejin.cn/post/6857811313809162254?searchId=202311121617012F828693E829A87C46A4

https://www.cnblogs.com/makefile/p/activation-function.html

标签:初始化,爆炸,梯度,消失,网络,神经网络,反向
From: https://www.cnblogs.com/tian777/p/17847201.html

相关文章

  • 神经网络入门篇:直观理解反向传播(Backpropagation intuition)
    详细推导反向传播下图是逻辑回归的推导:回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)公式1.38:\[\left. \begin{array}{l} {x}\\ {w}\\ {b} \end{array} \right\} \implies{z={w}^Tx+b} \implies{\alpha=\sigma(z)} \implies{{L}\left(a,y......
  • 神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)
    神经网络的梯度下降在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组单隐层神经网络会有\(W^{[1]}\),\(b^{[1]}\),\(W^{[2]}\),\(b^{[2]}\)这些参数,还有个\(n_x\)表示输入特征的个数,\(n^{[1]}\)表示隐藏单元个数,\(n^{[2]}\)表示输出单元个数。在这个例子中,只介绍过的......
  • 简单神经网络(py)
    1importnumpy2#激活函数库3importscipy.special45importmatplotlib.pyplot67#neutralnetworkclassdefinition8classneutralNetwork:9def__init__(self,inputnodes,hiddennodes,outputnodes,learningrate):10#定义各个......
  • 囚徒4.0_13_梯度
    囚徒4.0_13_梯度这是是关于求取梯度的#coding:utf-8importnumpyasnpimportmatplotlib.pylabaspltfrommpl_toolkits.mplot3dimportAxes3D#非批处理梯度求取(1,2)(x1,x2)def_numerical_gradient_no_batch(f,x):h=1e-4#0.0001grad=np.zeros_like(x)#对x进......
  • c4w1_卷积神经网络
    卷积神经网络计算机视觉问题计算机视觉(computervision)是因深度学习而快速发展的领域之一,它存进了如自动驾驶、人脸识别等应用的发展,同时计算机视觉领域的发展还可以给其他领域提供思路。计算机视觉应用的实例:图片分类(识别是不是一只猫)、目标检测(检测途中汽车行人等)、图片风格......
  • c1w4_深层神经网络
    深层神经网络什么是深层神经网络?深层的神经网络(DeepL-layerneuralnetwork)就是包含了更多隐藏层的神经网络。从某种意义上来说,logisticregression可以称为一层的神经网络“1layerNN”。当计算神经网络的层数,通常将输出层计算在内,而输出层不算,有一个隐藏层,就是2layerNN,以......
  • 梯度消失和梯度爆炸——从本质上说残差、LSTM遗忘门(依赖cell state)解决思路都是一样的
    在深度学习中,梯度消失和梯度爆炸是两个常见的问题。梯度消失是指在进行反向传播时,梯度会随着层数的增加而指数级地减小,直到几乎消失,导致深层的神经网络参数无法有效更新。这主要是因为使用了像sigmoid和tanh这样的激活函数,它们在输入值较大或较小的情况下,梯度值接近于0。    梯......
  • 深度学习算法原理实现——自写神经网络识别mnist手写数字和训练模型
    代码来自:https://weread.qq.com/web/reader/33f32c90813ab71c6g018fffkd3d322001ad3d9446802347《python深度学习》fromtensorflow.keras.datasetsimportmnistfromtensorflow.kerasimportoptimizersimporttensorflowastfimportnumpyasnpclassNaiveDense:d......
  • Python绘制神经网络模型的结构示意图的方法
      本文介绍基于Python语言,对神经网络模型的结构进行可视化绘图的方法。  最近需要进行神经网络结构模型的可视化绘图工作。查阅多种方法后,看到很多方法都比较麻烦,例如单纯利用graphviz模块,就需要手动用DOT语言进行图片描述,比较花时间;最终,发现利用第三方的ann_visualizer模块,可......
  • 神经网络中的量化与蒸馏
    前言 本文介绍了深度学习中精简模型的技术:量化和蒸馏。本文转载自DeepHubIMBA作者:Aadityaura仅用于学术分享,若侵权请联系删除欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。CV各大方向专栏与各个部署框架最全教程整理【......