梯度消失,梯度爆炸_原因分析_简单例子助理解

梯度消失,梯度爆炸_原因分析_简单例子助理解

    梯度消失,梯度爆炸的根源其实是来在反向传播BP(back propagation).

    反向传播的思想: 每层的输出是由两层间的权重决定的,两层之间产生的误差,按权重缩放后在网络中向前传播, 这就是反向传播。
    从反向传播中得到一般化公式:
δ n 1 = ω n 1 δ n f n 1 \delta ^{n-1}=\omega _{n-1}\delta ^{n}* f_{n-1}'

Δ w n 2 = η δ n 1 x n 1 \Delta w_{n-2}=\eta \delta ^{n-1}x_{n-1}

   其中 δ n \delta ^{n} 为第 n n 层的误差项, δ n 1 \delta ^{n-1} 为第 n 1 n-1 层的误差项, ω n 2 \omega _{n-2} 为第 n 2 n-2 层到第 n 1 n-1 层的权重, f n 1 f_{n-1}' 为第 n 1 n-1 层输出的导数,也就是激活函数的导数, x n 1 x_{n-1} 为第 n 1 n-1 层的输入, η \eta 为学习率, Δ w n 2 \Delta w_{n-2} 就是第 n 2 n-2 层到第 n 1 n-1 层权重更新步长了.

    对于 n n 层神经网络,根据反向传播的公式,到第 n i n-i 层的权重 w n i 1 w_{n-i-1} 更新规则为:

δ n i = ( ω n i ( ω n 2 ( ω n 1 ( ω n δ n f n 1 ) f n 2 ) f n 3 ) f n i ) \delta ^{n-i}=(\omega _{n-i}\cdot\cdot\cdot(\omega _{n-2}(\omega _{n-1}(\omega _{n}\delta ^{n}* f_{n-1}')* f_{n-2}')* f_{n-3}')\cdot\cdot\cdot* f_{n-i}')

Δ w n i 1 = η δ n i x n i \Delta w_{n-i-1}=\eta \delta ^{n-i}x_{n-i}

   上述就是权重 w n i w_{n-i} 更新规则,对于激活函数的倒数 f n 1 f_{n-1}' f n 2 f_{n-2}' f n 3 f_{n-3}' ,.., f n i f_{n-i}' ,如果此部分大于1,那么层数增多的时候,最终的求出的权重 w n i w_{n-i} 更新将以指数形式增加,即发生梯度爆炸,如果此部分小于1,那么随着层数增多,求出的权重 w n i 1 w_{n-i-1} 的更新步长 Δ w n i 1 \Delta w_{n-i-1} 将会以指数形式衰减,即发生了梯度消失

简单例子

   用下面最简单的单线神经网络来说明,更见直观的理解梯度消失,梯度爆炸.

   说明: f f 表示激活函数, f i f_{i} 就表示第 i i 层的输出, δ i \delta ^{i} 表示输出的误差项.
   那么根据上图,可以得到第二层的误差项 δ 2 \delta ^{2} 为:

δ 2 = w 2 w 3 w 4 δ 5 f 4 f 3 f 2 \delta ^{2}=w_{2}w_{3}w_{4}\delta ^{5}f_{4}'f_{3}'f_{2}'

   第二层的权重更新步长为:

Δ w 2 = η δ 2 x 2 \Delta w_{2}=\eta \delta ^{2}x_{2}

   从上面的例子我们可以直观的看出有连乘 f 4 f 3 f 2 f_{4}'f_{3}'f_{2}' , 当神经网络的层数进一步增加的时候,连乘会进一步加长.所以当 f n < 1 f_{n}'<1 的时候,随着累乘的增加(远离输出端),误差项 δ \delta 会逐渐趋近0,这就是梯度消失.当 f n > 1 f_{n}'>1 的时候,随着累乘的增加(远离输出端),误差项 δ \delta 会逐渐趋近无穷,这就是梯度爆炸.

猜你喜欢

转载自blog.csdn.net/weixin_40215443/article/details/86322568