2020-5-24 吴恩达-改善深层NN-w1 深度学习的实用层面(1.10 梯度消失与梯度爆炸--激活函数与L层相关的指数级递减(步长小,学习时间长)或者增加。)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

1.10 梯度消失与梯度爆炸 Vanishing/exploding gradients

训练NN,尤其是深度神经所面临的一个问题就是梯度消失或梯度爆炸。也就是你训练NN的时候,导数或坡度有时会变得非常大,或者非常小,甚至于以指数方式变小,这加大了训练的难度。

本节课你将会了解梯度消失或梯度爆炸的真正含义,以及如何更明智地选择随机初始化权重,从而避免这个问题。
在这里插入图片描述

假设你正在训练如上图这样一个极深的NN。为了空间,图上的NN每层只有两个隐藏单元,但它可能含有更多。

这个NN会有参数W [1],W[2],W[3],直到W[L]
为了简单起见,假设我们使用激活函数g(z)=z,即线性激活函数。
我们忽略b,即假设b[L]=0。

我们已经知道,NN第一层隐藏单元计算分2步骤,
梯度下降第一步,由于 z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=W^{[1]}x+b^{[1]} z[1]=W[1]x+b[1],而b=0,所以 z [ 1 ] = W [ 1 ] x z^{[1]}=W^{[1]}x z[1]=W[1]x
梯度下降第二步,由于使用线性激活函数g(z)=z, a [ 1 ] = g ( z [ 1 ] ) = z [ 1 ] = W [ 1 ] x a^{[1]}=g(z^{[1]})=z^{[1]}=W^{[1]}x a[1]=g(z[1])=z[1]=W[1]x

NN第二层隐藏单元计算同样也是分2步骤
梯度下降第一步,由于 z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]}=W^{[2]}a^{[1]}+b^{[2]} z[2]=W[2]a[1]+b[2],而b=0,所以 z [ 2 ] = W [ 2 ] a [ 1 ] = W [ 2 ] W [ 1 ] x z^{[2]}=W^{[2]}a^{[1]}=W^{[2]}W^{[1]}x z[2]=W[2]a[1]=W[2]W[1]x
梯度下降第二步,由于使用线性激活函数g(z)=z, a [ 2 ] = g ( z [ 2 ] ) = z [ 2 ] = W [ 2 ] W [ 1 ] x a^{[2]}=g(z^{[2]})=z^{[2]}=W^{[2]}W^{[1]}x a[2]=g(z[2])=z[2]=W[2]W[1]x

NN第三层隐藏单元,我们依然可以得到类似结论, a [ 3 ] = W 3 ] W [ 2 ] W [ 1 ] x a^{[3]}=W^{3]}W^{[2]}W^{[1]}x a[3]=W3]W[2]W[1]x
在这里插入图片描述

最后可以得到预测值, y ^ = W [ L ] W [ L − 1 ] W [ L − 2 ] . . . . . . W [ 3 ] W [ 2 ] W [ 1 ] x \hat y=W^{[L]}W^{[L-1]}W^{[L-2]}......W ^{[3]}W^{[2]}W^{[1]}x y^=W[L]W[L1]W[L2]......W[3]W[2]W[1]x

假设权重W比1大一点,每个权重矩阵都相同,例如,1.5倍单位矩阵, W = [ 1.5 0 0 1.5 ] W=\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix} W=[1.5001.5]

从技术上来讲,最后一项有不同维度,可能它就是余下的权重矩阵。
所以 y ^ = W [ L ] [ 1.5 0 0 1.5 ] [ L − 1 ] x \hat y=W^{[L]}\begin{bmatrix} 1.5 & 0 \\ 0 & 1.5 \\ \end{bmatrix}^{[L-1]}x y^=W[L][1.5001.5][L1]x

因为权重矩阵是1.5倍的单位矩阵,我们忽略最后一项 W [ L ] W^{[L]} W[L],最终 y ^ = 1. 5 ( L − 1 ) x \hat y=1.5^{(L-1)}x y^=1.5(L1)x
如果对于一个深度NN来说L值较大,那么的 y ^ \hat y y^值也会非常大,实际上它呈指数级增长的,本例中它增长的比率是1.5L。因此对于一个深度NN, y ^ \hat y y^的值将爆炸式增长

相反的,如果权重是0.5,即 W = [ 0.5 0 0 0.5 ] W=\begin{bmatrix} 0.5 & 0 \\ 0 & 0.5 \\ \end{bmatrix} W=[0.5000.5],最终 y ^ = 0. 5 ( L − 1 ) x \hat y=0.5^{(L-1)}x y^=0.5(L1)x
增长的比率是0.5L

再说明的详细一点,假设输入x1和x2都是1,那么第一层激活函数输出就是 1 2 \frac 12 21,第二层是 1 4 \frac 14 41,直至最后一层 1 2 L \frac 1{2^L} 2L1
在这里插入图片描述
激活函数的值将以指数级下降,它是与网络层数数量L相关的函数,此时在深度网络中,激活函数以指数级递减

现在你可以发现

  • 权重只比1略大一点,或者说只是比单位矩阵I大一点, W [ L ] > I W^{[L]}>I W[L]>I,深度NN的激活函数将爆炸式增长
  • 如果比1略小一点, W [ L ] < I W^{[L]}<I W[L]<I,类似 [ 0.9 0 0 0.9 ] \begin{bmatrix} 0.9 & 0 \\ 0 & 0.9 \\ \end{bmatrix} [0.9000.9],在深度NN中,激活函数将以指数级递减

虽然这里只是讨论了激活函数以与L相关的指数级数增长或下降,它也适用于与层数相关的导数或梯度函数,也是呈指数级增长或呈指数递减。

对于当前的深度NN,比如:最近Microsoft对152层NN的研究取得了很大进展,在这样一个深度NN中,如果激活函数或梯度函数以与L相关的指数增长或递减,它们的值将会变得极大或极小,从而导致训练难度上升。尤其是梯度指数小于L时,梯度下降算法的步长会非常非常小,梯度下降算法将花费很长时间来学习

实际上,在很长一段时间内,梯度消失与梯度爆炸曾是训练深度NN的阻力,虽然有一个不能彻底解决此问题的解决方案,但是已在如何选择初始化权重问题上提供了很多帮助。

下节课将对此进行介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值