梯度爆炸与梯度消失

时间:2021-08-16
本文章向大家介绍梯度爆炸与梯度消失,主要包括梯度爆炸与梯度消失使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0 概述

在神经网络模型中,如果网络的层数很多,则可能会出现梯度爆炸或者梯度消失问题。顾名思义,梯度爆炸意思是梯度太大了,可能会超出计算机可表示的数值范围;梯度消失意思是梯度太小了。

1 梯度爆炸

1.1 梯度爆炸的成因

以多层感知机为例,第t层的输出为:

\[f_{t}(h^{t-1})=\sigma(W^{t}h^{t-1}) \]

第t层对t-1层的导数为:

\[\frac{\partial h^{t}}{\partial h^{t-1}}=diag(\sigma ^{'}(W^{t}h^{t-1}))((W^{t})^{T} \]
\[\prod_{i=t}^{d-1}\frac{\partial h^{i+1}}{\partial h^{i}}=\prod_{i=t}^{d-1}diag(\sigma ^{'}(W^{i}h^{i-1}))(W^{i})^{T} \]

假设使用Relu激活函数:

\[\sigma (x)=max(0,x) \]
\[\sigma ^{'}=\left\{\begin{matrix} 1\quad if\quad x>0\\ 0\quad otherwise \end{matrix}\right.\]

\(\prod_{i-t}^{d-1}\frac{\partial h^{i+1}}{\partial h^{i}}=\prod_{i=t}^{d-1}diag(\sigma ^{'}(W^{i}h^{i-1}))(W^{i})^{T}\)的一些元素会来自\(\prod_{i=t}^{d-1}(W^{i})^{T}\)。如果层数很多就会导致梯度爆炸。

1.2 梯度爆炸的危害

  • 值超出计算机标识范围
  • 对学习率敏感:如果学习率太大,则参数会更新很大,这样就导致更大的梯度;如果学习率太小,则训练无进展

2 梯度消失

2.1 梯度消失的成因

如果使用sigmoid作为激活函数:

\[\sigma (x)=\frac{1}{1+e^{-x}} \]
\[\sigma ^{'}(x)=\sigma (x)(1-\sigma(x)) \]

sigmoid函数的导数在任何点都是小于1的,如果网络层数很多,则会导致很多小于1的数连乘。

2.2 梯度消失的危害

  • 梯度值变成0
  • 训练没有进展
  • 对底部层尤为严重

3 缓解方法

3.1 将乘法变加法

3.2 梯度归一化、梯度裁剪

梯度归一化就是将梯度强行归一化到一定范围内,梯度裁剪就是将大于某个阈值的梯度强行变为某个阈值。

3.3 合理的权重初始化和激活函数

原文地址:https://www.cnblogs.com/foghorn/p/15089760.html