前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网络权重初始化方法总结(上):梯度消失、梯度爆炸与不良的初始化

网络权重初始化方法总结(上):梯度消失、梯度爆炸与不良的初始化

作者头像
李拜六不开鑫
发布2019-11-08 10:26:09
1.8K0
发布2019-11-08 10:26:09
举报
文章被收录于专栏:本立2道生本立2道生

目录

博客:blog.shinelee.me | 博客园 | CSDN

前向传播与反向传播回顾

神经网络的训练过程可以简化成以下步骤,

  1. 输入预处理(feature scaling等)
  2. 初始化网络weight和bias
  3. 前向传播,得到网络输出
  4. 计算损失函数,得到当前损失
  5. 反向传播,根据链式法则,逐层回传得到损失函数对当前参数的偏导,根据梯度下降算法对当前参数进行更新
  6. 重复步骤3 4 5,直到损失不再减小,即收敛

一个简单的前向传播和反向传播的示意图如下,线性组合和非线性激活交替进行,线性组合层可以为全连接层或卷积层等,图片来自链接

前向传播
前向传播
反向传播
反向传播
反向传播中的偏导计算
反向传播中的偏导计算

仔细观察上式,偏导为一串因子的乘积,因子中的每一项对乘积结果都有影响,有几点需要注意,回传时,

梯度消失与梯度爆炸

梯度为偏导数构成的向量。

损失函数收敛至极小值时,梯度为0(接近0),损失函数不再下降。我们不希望在抵达极小值前,梯度就为0了,也不希望下降过程过于震荡,甚至不收敛。梯度消失与梯度爆炸分别对应这2种现象,

梯度消失(vanishing gradients):指的是在训练过程中,梯度(偏导)过早接近于0的现象,导致(部分)参数一直不再更新,整体上表现得像损失函数收敛了,实际上网络尚未得到充分的训练。

梯度爆炸(exploding gradients):指的是在训练过程中,梯度(偏导)过大甚至为NAN(not a number)的现象,导致损失剧烈震荡,甚至发散(divergence)。

由上一节的分析可知,在梯度(偏导)计算中,主要的影响因素来自激活函数的偏导、当前层的输入(前一层的输出)、以及权重的数值等,这些因子连续相乘,带来的影响是指数级的。训练阶段,权重在不断调整,每一层的输入输出也在不断变化,梯度消失和梯度爆炸可能发生在训练的一开始、也可能发生在训练的过程中

因子项中当前层的输入仅出现一次,下面着重看一下激活函数和权重的影响。

激活函数的影响

以Sigmoid和Tanh为例,其函数与导数如下(来自链接),

Sigmoid和Tanh,及其导数
Sigmoid和Tanh,及其导数

两者的导数均在原点处取得最大值,前者为0.25后者为1,在远离原点的正负方向上,两者导数均趋近于0,即存在饱和区。

  • 原点附近:从因子项连乘结果看,Tanh比Sigmoid稍好,其在原点附近的导数在1附近,如果激活函数的输入均在0左右,偏导连续相乘不会很小也不会很大。而sigmoid就会比较糟糕,其导数最大值为0.25,连续相乘会使梯度指数级减小,在反向传播时,对层数越多的网络,浅层的梯度消失现象越明显。
  • 饱和区:一旦陷入饱和区,两者的偏导都接近于0,导致权重的更新量很小,比如某些权重很大,导致相关的神经元一直陷在饱和区,更新量又接近于0,以致很难跳出或者要花费很长时间才能跳出饱和区。

所以,一个改善方向是选择更好的非线性激活函数,比如ReLU,相关激活函数如下图所示,

activation functions
activation functions

ReLU只在负方向上存在饱和区,正方向上的导数均为1,因此相对更少地遭遇梯度消失,但梯度爆炸现象仍然存在。

权重矩阵的影响

假设激活函数为线性,就像ReLU的正向部分,导数全为1。则一个简化版本的全连接神经网络如下图所示,

a simple 9-layer neural network
a simple 9-layer neural network

不良初始化

至此,一些权重不良初始化导致的问题就不难解释了,

反向传播中的偏导计算
反向传播中的偏导计算

这几种权重初始化方法对网络训练过程的影响,可在Initializing neural networks进行可视化实验,可观察权重、梯度和损失的变化,美中不足的是隐藏层的激活函数只有ReLU,不能更换为Sigmoid、Tanh等,如下所示,

network initialization
network initialization

话说回来,所以我们需要好的网络初始化方法,以对反向传播过程中的梯度有所控制。对反向传播中梯度加以控制的方法,不止这里提到的激活函数和权重初始化,还有梯度截断(gradient clipping)、网络模型设计方面等方法,因为本文的重点在于权重初始化,对此按下不表。

那么,合适的网络初始化方法是什么呢?我们下回分解。

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前向传播与反向传播回顾
  • 梯度消失与梯度爆炸
    • 激活函数的影响
      • 权重矩阵的影响
      • 不良初始化
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档