梯度消失和梯度爆炸及解决方法

转载自:G-kdom的知乎文章 https://zhuanlan.zhihu.com/p/72589432

一、为什么会产生梯度消失和梯度爆炸?

目前优化神经网络的方法都是基于BP,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。其中将误差从末层往前传递的过程需要链式法则(Chain Rule)的帮助,因此反向传播算法可以说是梯度下降在链式法则中的应用。

而链式法则是一个连乘的形式,所以当层数越深的时候,梯度将以指数形式传播。梯度消失问题和梯度爆炸问题一般随着网络层数的增加会变得越来越明显。在根据损失函数计算的误差通过梯度反向传播的方式对深度网络权值进行更新时,得到的梯度值接近0或特别大,也就是梯度消失或爆炸。梯度消失或梯度爆炸在本质原理上其实是一样的。

二、分析产生梯度消失和梯度爆炸的原因

【梯度消失】经常出现,产生的原因有:一是在深层网络中,二是采用了不合适的损失函数,比如sigmoid。当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。这就导致在训练时,只等价于后面几层的浅层网络的学习。

【梯度爆炸】一般出现在深层网络和权值初始化值太大的情况下。在深层神经网络或循环神经网络中,误差的梯度可在更新中累积相乘。如果网络层之间的梯度值大于 1.0,那么重复相乘会导致梯度呈指数级增长,梯度变的非常大,然后导致网络权重的大幅更新,并因此使网络变得不稳定。

梯度爆炸会伴随一些细微的信号,如:①模型不稳定,导致更新过程中的损失出现显著变化;②训练过程中,在极端情况下,

高级语言汇编语言机器语言是计算机编程中的三种不同的语言级别。 1. 高级语言高级语言是一种相对于机器语言汇编语言而言的抽象层次更高的编程语言。它使用更接近自然语言的语法和结构,使得程序员能够更容易地编写和理解代码。高级语言的语法和命令格式因语言而异,如Java、C、C++、Python等。高级语言的代码需要通过编译器或解释器转换为机器语言汇编语言才能被计算机执行。 2. 汇编语言汇编语言是一种介于高级语言机器语言之间的低级语言。它使用助记符(mnemonic)来代替二进制指令,使得程序员能够更容易地理解和编写代码。汇编语言的指令直接对应于计算机硬件的指令,但是使用了更加可读的符号表示。汇编语言的代码需要通过汇编器将其转换为机器语言才能被计算机执行。 3. 机器语言机器语言是计算机能够直接执行的语言。它使用二进制代码表示指令和数据,每一条指令都是计算机硬件可以直接识别和执行的。机器语言的代码是由计算机硬件直接执行的,不需要经过编译或解释。 总结: 高级语言是相对抽象的编程语言,使用更接近自然语言的语法和结构;汇编语言是介于高级语言机器语言之间的低级语言,使用助记符代替二进制指令;机器语言是计算机硬件直接执行的二进制代码。高级语言汇编语言需要通过编译器或汇编器转换为机器语言才能被计算机执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值