独家连载 | 梯度消失和梯度爆炸

2019/01/10 08:00
阅读数 39

4.6 梯度消失与梯度爆炸

4.6.1 梯度消失

根据上文BP算法中的推导,我们从公式4.44,,4.45,4.46中可以知道,权值的调整ΔW是跟学习信号δ相关的。同时我们从4.41,4.42,4.43中可以知道在学习信号δ 表达式中存在f ' (x)。也就是说激活函数的导数会影响学习信号δ的值,而学习信号δ的值会影响权值调整ΔW的值。那么激活函数的值越大,ΔW的值就越大;激活函数的值越小,ΔW的值也就越小。

假设激活函数为sigmoid函数,前文中我们已经知道了sigmoid函数的表达式为:  ,sigmoid函数的导数为:f ' (x) = f(x)[1-f(x)],我们可以画出sigmoid函数的导数图像为图4.18: 

图4.18 sigmoid函数导数

这里我们发现当x=0时,sigmoid函数导数可以取得最大值0.25。x取值较大或较小时,sigmoid函数的导数很快就趋向于0。不管怎么样,sigmoid函数的导数都是一个小于1的数,学习信号δ乘以一个小于1的数,那么δ就会减小。学习信号从输出层一层一层向前反向传播的时候,每传播一层学习信号就会变小一点,经过多层传播后,学习信号就会接近于0,从而使得权值ΔW调整接近于0。ΔW接近于0那就意味着该层的参数不会发生改变,不能进行优化。参数不能优化,那整个网络就不能再进行学习了。学习信号随着网络传播逐渐减小的问题也被称为梯度消失(vanishing gradient)的问题。

我们再考虑一下tanh函数的导数,tanh函数的表达式为:

tanh函数的导数为: f ' (x) = 1- (f(x))2,tanh函数的导数如图4.19: 

图4.19 tanh函数导数

tanh函数导数图像看起来比sigmoid函数要好一些,x=0时,tanh函数导数可以取得最大值1。x取值较大或较小时,tanh函数的导数很快就趋向于0。不管怎么样,tanh函数导数的取值总是小于1的,所以tanh作为激活函数也会存在梯度消失的问题。

对于softsign函数,softsign函数的表达式为:

softsign函数的导数为:

softsign函数的导数如图4.20: 

图4.20 softsign函数导数

softsign函数x=0时,softsign函数导数可以取得最大值1。x取值较大或较小时,softsign函数的导数很快就趋向于0。不管怎么样,softsign函数导数的取值总是小于1的,所以softsign作为激活函数也会存在梯度消失的问题。

4.6.2 梯度爆炸

当我们使用sigmoid,tanh和softsign作为激活函数时,它们的导数取值范围都是小于等于1的,所以会产生梯度消失的问题。那么我们可能会想到,如果使用导数大于1的函数作为激活函数,情况会如何?

如果学习信号δ乘以一个大于1的数,那么δ就会变大。学习信号从输出层一层一层向前反向传播的时候,每传播一层学习信号就会变大一点,经过多层传播后,学习信号就会接近于无穷大,从而使得权值ΔW调整接近于无穷大。ΔW接近于无穷大那就意味着该层的参数,处于一种极不稳定的状态,那么网络就不能正常工作了。学习信号随着网络传播逐渐增大的问题也被称为梯度爆炸(exploding gradient)的问题。

4.6.3 使用ReLU函数解决梯度消失和梯度爆炸的问题

我们知道ReLU的表达式为:f(x) = max(0,x)。当x小于0时,f(x)的取值为0;当x大于0时,f(x)的取值等于x。ReLU函数的导数如图4.21: 

图4.21 ReLU函数导数

前面我们讨论了当激活函数的导数小于1时,网络会产生梯度消失,激活函数的导数大于1时,网络会产生梯度爆炸。那么当我们使用ReLU作为激活函数的时候,x小于0时,ReLU的导数为0;x大于0时,ReLU的导数为1。导数为1是一个很好的特性,不会使得学习信号越来越小,也不会让学习信号越来越大,可以让学习信号比较稳定地从后向前传播。解决了梯度消失和梯度爆炸的问题,同时计算方便,可以加速网络的训练。

ReLU也存在缺点,由于x小于0的部分f(x)的取值恒定为0,会导致一些神经元无法激活。

不过总的来说,ReLU还是优点大于缺点的,所以在一些比较深层的神经网络中,通常都会使用ReLU作为神经网络的激活函数。

除此之外可能我们还会想到线性激活函数y = x 的导数也是等于1,也可以克服梯度消失和梯度爆炸的问题。不过之前我们也多次提到线性激活函数不会能描绘非线性的分类边界,所以无法处理非线性问题。因此线性函数依旧不算是一个好的激活函数。 

作者介绍




你可能还想看

独家连载:深度学习从0到1 

独家连载 | 覃秉丰深度学习重磅新书首发抢读!!!(1)

独家连载 | 覃秉丰深度学习重磅新书首发抢读!!!(2)

独家连载 | 深度学习“四大天王”,你知道几个?

独家连载 | 用了那么久Python,你可能还不知道...

独家连载 | 超详细!带你走进单层感知器与线性神经网络

独家连载 | 单层感知器与线性神经网络(续)!

独家连载 | 线性神经网络应用


项目实战:

实战 | 你知道日常识别二维码和条形码是怎么实现的吗?

实战 | 一行命令训练你的图像分类模型

实战 | 一行命令实现看图说话(Google的im2txt模型)

实战 | 抖音百万点赞:视频的字符化

实战 | 几行代码就能实现糖尿病预测了?是的,你没看错!

实战 | 一招让你的mao(猫)片十倍增长

实战 | 你知道如何用python获取股票交易数据吗?


资源放送:

资源 | 豆瓣8.2!《机器学习实战》

资源 | 中文版!《Deep Learning with Python》

资源 | 双语版!斯坦福CS229机器学习速查表集锦

资源 | 吴恩达新书《机器学习训练秘籍》中文版免费领取

资源 | 推荐!《Keras图像深度学习实战》,免费领取

资源 | 必看干货!AI 从业者都应该知道的实验数据集

资源 | 斯坦福深度学习基础教程中文版实操项目

力荐!一本看了目录就想窥探的书!

吴恩达《机器学习》笔记,哥大研究生献上


更多干货后台回复关键词领取

深度学习 | 机器学习 | 计算机视觉 | AI未来 | 数据分析




点右下角 好看 给你小花花~

- End -

本文分享自微信公众号 - AI MOOC人工智能平台(AIMOOC_XLAB)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部