梯度消失与梯度爆炸
Kotori Y 27 Posts

反向传播(Back-Propagation, BP)是对多层人工神经网络进行梯度下降的算法,也就是用链式法则以网络每层的权重为变数计算损失函数的梯度,以更新权重来最小化损失函数。

神经网络中参数的更新大致分为正向传播与反向传播两个步骤。

正向传播

正向传播(forward propagation或forward pass) 指的是:按顺序(从输入层到输出层)计算和存储神经网络中每层的结果。假设有这样一个神经网络结构:

其中是输入特征、是模型预测值、~是网络的学习权重、激活函数、~是某时间步下每个神经元的输出值,隐藏层间的激活函数假设为,有以下关系

反向传播

通过一次正向传播可以得到一组预测值,通过比较与真实值之间的差异,即计算损失,假设上述网络的损失函数为。神经网络学习的主要目的就是通过若干次迭代来更新模型中的等参数,以使得损失函数能获得最小值。目前调整模型参数的方法主要基于梯度下降的方法,即:

例如的更新量为:

根据链式求导法则有:

梯度消失与梯度爆炸

在上一节中可以看到某一参数需要更新的量(梯度在该分量的模)包含若干的激活函数的导数的乘积。当网络层数很多而激活函数的导数又小于1时,连乘可能会导致梯度变得非常的小,即所谓的梯度消失。反之,梯度变得非常的大,即梯度爆炸。

解决方案

更换激活函数

最常见的方案就是更改激活函数,现在神经网络中,除了最后二分类问题的最后一层会用之外,每一层的激活函数一般都是用

导数的最大值为0.25,若隐层之间使用此激活函数更新状态,将很可能会发生梯度消失。而函数在大于0的部分的导数为1,可以避免梯度消失或爆炸,但如果梯度将为0,参数将不会更新。

使用Batchnorm层

使用残差结构

简单的理解,就是让深层网络通过走捷径,让网络不那么深层,这样梯度消失的问题就缓解了。

正则化

之前提到的梯度爆炸问题,一般都是因为过大造成的,那么用L2正则化就可以解决问题。

  • Post title:梯度消失与梯度爆炸
  • Post author:Kotori Y
  • Create time:2022-08-16 15:15
  • Update time:2022-08-16 23:23
  • Post link:https://blog.iamkotori.com/2022/08/16/梯度消失与梯度爆炸/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments