深度学习-训练深度神经网络的难点:vanishing gradient problem与exploding gradient problem

204人阅读 评论(0) 收藏 举报
分类:

学习彭亮《深度学习进阶:算法与应用》课程


概述

到目前为止, 我们例子中使用的神经网络一共只有3层 (一个隐藏层):
这里写图片描述

我们用以上神经网络达到了98%的accuracy

更深层的神经网络:
这里写图片描述
可以学习到不同抽象程度的概念.

如何训练深度神经网络?
难点: 神经网络的不同层学习的速率显著不同;接近输出层学习速率比较合适时, 前面的层学习太慢, 有时被困住


消失的gradient问题 (vanishing gradient problem):

(1)三层 (一个隐藏层):

net = network2.Network([784, 30, 10])

accuracy: 96.48%

(2)四层 (两个隐藏层):

net = network2.Network([784, 30, 30, 10])

accuracy: 96.9%

(3)五层 (三个隐藏层):

net = network2.Network([784, 30, 30, 30, 10])

accuracy: 96.57%

为什么加入一层反而降低了准确率?
这里写图片描述
条形区域长度代表∂C/∂b, Cost对于bias的变化率:

随机初始化, 看到第一层学习的速率远远低于第二层学习的速率

进一步通过计算来验证:
这里写图片描述
代表学习速率
以上图中:
∥δ1∥=0.07, ∥δ2∥=0.31

(1)在5层的神经网络中: [784,30,30,30,10]
学习速率分别为: 0.012, 0.060, and 0.283(越往后学习率越高)

以上只是初始的时候的学习率, 当神经网络在训练过程中, 随epoch增加时学习率变化:
这里写图片描述
1000张训练图片, 看出两层的学习率明显差异

(2)另外一个例子: [784,30,30,30,10]
这里写图片描述

(3)再增加一层: [784,30,30,30,30,10]
这里写图片描述
可以看出, 第一个隐藏层比第四个几乎要慢100倍
这种现象普遍存在于神经网络之中, 叫做: vanishing gradient problem

另外一种情况是内层的梯度被外层大很多, 叫做exploding gradient problem

所以说神经网络算法用gradient之类的算法学习存在不稳定性

训练深度神经网络, 需要解决vanishing gradient problem


vanishing gradient problem

造成vanishing gradient problem的原因:

假设每层只有一个神经元
这里写图片描述
得到的∂C/∂b1的表达式:
这里写图片描述
对b1的一个小变化引起C的变化
这里写图片描述
如何引起b1的变化:
这里写图片描述
a1的变化又引起 z2 的变化: z2= w2*a1 + b2
这里写图片描述
把以上a1的变化代入z2的变化:
这里写图片描述
以上公式的规律, 推z3, z4的变化, 一直到输出层, 得到:
这里写图片描述
等式两边同除以b1的变化,得到:
这里写图片描述
σ′的图像:
这里写图片描述
函数最高点σ′(0) = 1/4
按照平时随机从正态分部(0,1)中随机产生权重的方法
大部分|w| < 1,
这里写图片描述
对于以上公式的多项乘积来讲, 层数越多, 连续乘积越小:
这里写图片描述


为了修正vanishing gradient problem问题:

  1. 初始化比较大的权重: 比如 w1=w2=w3=w4=100
  2. 初始化b使这里写图片描述不要太小。

(比如为了让σ′最大(也就是=1/4), 我们可以通过调节b让z=0:b1 = -100*a0;z1 = 100 * a0 + -100*a0 = 0)
这种情况下:
这里写图片描述
= 100 * 1/4 = 25
每层是前一层的25倍, 又出现了exploding的问题

从根本来讲, 不是vanishing或者exploding的问题, 而是后面层的的梯度是前面层的累积的乘积, 所以神经网络非常不稳定. 唯一可能的情况是以上的连续乘积刚好平衡大约等于1, 但是这种几率非常小.

所以, 这是一个不稳定的梯度问题, 通常有多层后, 每层网络都以非常不同的速率学习

总体, vanishing problem具有普遍性:

如果想要客克服vanishing problem, 需要
这里写图片描述
的绝对值>1, 我们可以尝试赋值w很大, 但是问题是 σ′(z) 也取决于w: σ′(z)=σ′(wa+b)
所以我们要让w大的时候, 还得注意不能让σ′(wa+b)变小, 这种情况非常少见, 除非输入值在一个非常小的区间内

刚才的例子只是一每层一个神经元:

这里写图片描述
在每层多个神经元的情况下:
这里写图片描述
在l层的gradient (L层神经网络):
这里写图片描述
矩阵和向量的表示, 与之前类似

所以只要是sigmoid函数的神经网络都会造成gradient更新的时候及其不稳定, vanishing or exploding问题


训练深度神经网络的其他难点:

2010 Glorot and Bengio*: sigmoid函数造成输出层的activation大部分饱和0, 并且建议了其他的activation函数

2013 Sutskever, Martens, Dahl and Hinton*: 随机初始权重和偏向时, 提出momentum-based stochastic gradient descent

综上所属, 训练深度神经网络中有很多难点.
本节课: 神经网络的不稳定性
activation方程的选择
初始化权重和偏向的方法
具体更新的过程
hyper-parameter的选择

解决vanishing gradient方法:

这里写图片描述
softplus函数可以被max函数模拟 max(0, x+N(0,1))

max函数叫做Rectified Linear Function (ReL)
这里写图片描述
Sigmoid和ReL方程主要区别:

Sigmoid函数值在[0, 1], ReL函数值在[0, ∞], 所以sigmoid函数方面来描述概率, 而ReL适合用来描述实数

Sigmoid函数的gradient随着x增大或减小和消失
ReL 函数不会:
gradient = 0 (if x < 0), gradient = 1 (x > 0)

Rectified Linear Unit在神经网络中的优势:

不会产生vanishing gradient的问题

查看评论

神经网络(四)-vanishing gradient problem

神经网络中梯度消失现象
  • Fishmemory
  • Fishmemory
  • 2016-12-27 13:10:42
  • 1400

机器学习总结(九):梯度消失(vanishing gradient)与梯度爆炸(exploding gradient)问题

(1)梯度不稳定问题: 什么是梯度不稳定问题:深度神经网络中的梯度不稳定性,前面层中的梯度或会消失,或会爆炸。 原因:前面层上的梯度是来自于后面层上梯度的乘乘积。当存在过多的层次时,就出现了内...
  • cppjava_
  • cppjava_
  • 2017-04-01 10:07:05
  • 16567

深度学习--采用ReLU解决消失的梯度问题(vanishing gradient problem)

消失的梯度问题(vanishing gradient problem):更深层的神经网络可以学到不同抽象程度的概念,但随着深度的增加不同层的学习速率会显著不同,接近输出层的学习速率比较合适时前面的...
  • akadiao
  • akadiao
  • 2017-10-16 10:57:01
  • 906

深度学习——致命问题之Gradient Vanish

Gradient Vanish 这个问题是由激活函数不当引起的
  • zchang81
  • zchang81
  • 2017-04-18 14:18:45
  • 1282

深度学习中训练参数的调节

深度学习中训练参数的调节
  • wfei101
  • wfei101
  • 2017-08-22 22:35:55
  • 1186

梯度消失(vanishing gradient)和梯度爆炸(exploding gradient)

神经网络中梯度不稳定的根本原因:在于前层上的梯度的计算来自于后层上梯度的乘积(链式法则)。当层数很多时,就容易出现不稳定。下边3个隐含层为例: 其b1的梯度为: 加入激活函数为sigmoid,...
  • guoyunfei20
  • guoyunfei20
  • 2017-10-19 11:47:28
  • 102

深度神经网络为何很难训练

本文是关于深度神经网络为何很难训练的翻译。
  • jdbc
  • jdbc
  • 2016-01-26 11:52:44
  • 5517

卷积神经网络(CNN)学习笔记

转自:http://blog.csdn.net/huangbo10/article/details/24941079?utm_source=tuicool&utm_medium=referral 起...
  • sherry_gp
  • sherry_gp
  • 2016-03-01 19:11:22
  • 5448

DeepLearning (六) 学习笔记整理:神经网络以及卷积神经网络

神经网络 神经网络模型 前向传播 反向传播 Neural Networds Tips and Tricks Gradient Check Regularization 激活函数 sigmoid 函数 ...
  • llp1992
  • llp1992
  • 2015-11-06 17:14:04
  • 6526

Deep Learning 优化方法总结

http://blog.csdn.net/lien0906/article/details/47399823 摘自本博客  在 15年八月份, caffe中又增加了ADAM 方法。  Stoc...
  • u014114990
  • u014114990
  • 2015-08-19 13:10:29
  • 3508
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 30万+
    积分: 4331
    排名: 8698
    联系方式

    博文主要参考网上资料,视频笔记,结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。


    博客专栏
    最新评论