如何解决梯度消失和梯度爆炸?

您所在的位置:网站首页 bn解决梯度消失 如何解决梯度消失和梯度爆炸?

如何解决梯度消失和梯度爆炸?

2024-07-14 15:40| 来源: 网络整理| 查看: 265

何为梯度消失,梯度爆炸?

目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f(x) f ( x ) (非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数 :

F(x)=fn(...f3(f2(f1(x)∗w1+b)∗w2+b)...) F ( x ) = f n ( . . . f 3 ( f 2 ( f 1 ( x ) ∗ w 1 + b ) ∗ w 2 + b ) . . . ) 我们最终的目的是希望这个多元函数可以很好的完成输入到输出之间的映射。

梯度消失与梯度爆炸其实是一种情况。例如,下图以三个隐层的单神经元网络为例: 这里写图片描述 以上图为例,假设每一层网络激活后的输出为 fi(x) f i ( x ) ,其中 i i 为第 ii 层, x x 代表第 ii 层的输入,也就是第 i−1 i − 1 层的输出, f f 是激活函数,那么,可得出 fi+1=f(fi∗wi+1+bi+1)fi+1=f(fi∗wi+1+bi+1),简记为 fi+1=f(fi∗wi+1) f i + 1 = f ( f i ∗ w i + 1 ) 。BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,参数的更新为 w←w+Δw w ← w + Δ w ,给定学习率 α α ,得出 Δw=−α∂Loss∂w Δ w = − α ∂ L o s s ∂ w 。如果要更新第二隐藏层的权值信息,根据链式求导法则,更新梯度信息: Δw1=∂Loss∂w2=∂Loss∂f4∂f4∂f3∂f3∂f2∂f2∂w2 Δ w 1 = ∂ L o s s ∂ w 2 = ∂ L o s s ∂ f 4 ∂ f 4 ∂ f 3 ∂ f 3 ∂ f 2 ∂ f 2 ∂ w 2 ,很容易看出来 ∂f4∂f3=w4f′(f3w4) ∂ f 4 ∂ f 3 = w 4 f ′ ( f 3 w 4 ) ,即对激活函数求导后与权重相乘, ∂f2∂w2=f1f′(f1w2) ∂ f 2 ∂ w 2 = f 1 f ′ ( f 1 w 2 ) ,即第二隐层的输入与激活函数求导后相乘。如果激活函数求导后与权重相乘的积大于1,那么层数增多的时候,最终的求出的梯度更新信息将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的梯度更新信息将会以指数形式衰减,即发生了梯度消失。下面以 sigmoid 激活函数为例来具体分析:

sigmoid 函数的导数曲线如下图所示: 这里写图片描述 可以看到,sigmoid 导数的最大值为0.25,通常 abs(w)4 a b s ( w ) > 4 时才可能出现梯度爆炸,而最普遍发生的是梯度消失问题。

如何解决梯度消失和梯度爆炸?

常用的用于解决梯度消失和梯度爆炸的方法如下所示:

使用 ReLU、LReLU、ELU、maxout 等激活函数 sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。使用批规范化 通过规范化操作将输出信号 x x 规范化到均值为0,方差为1保证网络的稳定性.从上述分析分可以看到,反向传播式子中有ww的存在,所以 w w 的大小影响了梯度的消失和爆炸,Batch Normalization 就是通过对每一层的输出规范为均值和方差一致的方法,消除了ww带来的放大缩小的影响,进而解决梯度消失和爆炸的问题。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3