吴恩达深度学习课程疑难点笔记系列-改善深层神经网络-第2周

本笔记系列参照吴恩达深度学习课程的视频和课件,并在学习和做练习过程中从CSDN博主何宽分享的文章中得到了帮助,再此表示感谢。


本周主要学习的内容有:
mini-batch梯度下降法、指数加权平均和偏差修正、动量梯度下降法、RMSprop、Adam优化算法、学习率衰减、局部最优的问题


本周学习的主要疑难点:

1.指数加权移动平均(exponentially weighted moving average)
这是这周的学习过程中遇到的目前为止最难懂的一个知识点,花了几十个小时去理解这个概念,虽然它不是很会晦涩难懂的算法,但我就是花了那么多时间…等我把思维缕清后,往前看的时候,发现我其实犯了一个很大的错误,那就是首先我没有这样的思维概念,那就是吴老师为什么在这周的课程里讲到“指数加权移动平均”,所以下面我将从为什么深度学习需要“指数加权移动平均”的角度出发来解释这个知识点。
在这里插入图片描述
图 1 图1 1
图1展示使用梯度下降算法的模型训练过程的效果图,中间红点就是模型代价函数的最小值(最优解)。因此我们可以看到以下几点:

  • 在训练的过程中,代价函数在纵轴上上下波动,横轴上不停的往最优解移动。
  • 纵轴上下波动太大导致我们在横轴上的移动速度不是很快。
    为了加快横轴上的移动速度,我们可以调大学习速率,但这样也同样加大了纵轴摆动,因而会加大误差,或者我们不改变学习速率,增加迭代次数,模型也是会达到最优解,但那样就增加了训练时间。所以我们能不能不改变学习速率也不改变迭代次数,减少模型的训练时间了?想到这儿,我们就发现了问题的根源是要解决梯度下降算法中的纵轴上下摆动!

在这里插入图片描述
图 2 图2 2
图2显示了伦敦地区上半年每天的温度分布图,看着很混乱,无法看出该地区的温度变化趋势,因此我们需要拟合一条相对平滑的曲线,使其在垂直方向波动不大,而指数加权移动平均就可以满足这样的要求。

指数加权移动平均是指:给定超参数 0 ≤ β < 1 0≤\beta<1 0β<1,当前时间步t的变量 y t y_t yt是上一时间步t-1的变量 y t − 1 y_{t-1} yt1和当前时间步另一变量 x t x_t xt的线性组合:
y t = β y t − 1 + ( 1 − β ) x t (1) y_t=\beta y_{t-1}+(1-\beta)x_t\tag{1} yt=βyt1+(1β)xt(1)

将指数加权移动平均运用到图2的示例中,我们可以设置当前时间步t的预测温度 v t v_t vt与上一时间步t-1的预测温度值 v t − 1 v_{t-1} vt1和当前时间t的温度实际值 x t x_t xt的表达式为:
v t = β v t − 1 + ( 1 − β ) x t (2) v_t=\beta v_{t-1}+(1-\beta)x_t\tag{2} vt=βvt1+(1β)xt(2)
v 0 = 0 v_0=0 v0=0
v 1 = β v 0 + ( 1 − β ) θ 1 v_1=\beta v_0+(1-\beta)\theta_1 v1=βv0+(1β)θ1
v 2 = β v 1 + ( 1 − β ) x 2 v_2=\beta v_1+(1-\beta)x_2 v2=βv1+(1β)x2
v 3 = β v 2 + ( 1 − β ) x 3 v_3=\beta v_2+(1-\beta)x_3 v3=βv2+(1β)x3
⋮ \vdots
v t = ( 1 − β ) ( θ t + β θ t − 1 + β 2 θ t − 2 + . . . + β t − 1 θ 1 ) (3) v_t=(1-\beta)(\theta_t+\beta\theta_{t-1}+\beta^2\theta_{t-2}+...+\beta^{t-1}\theta_1)\tag{3} vt=(1β)(θt+βθt1+β2θt2+...+βt1θ1)(3)
可以看到 v t v_t vt是前面所有时刻实际值 θ \theta θ加权后的值,但在实际处理过程中,我们不需要给那么多数据加权,因为
n = 1 1 − β n=\frac{1}{1-\beta} n=1β1,所以 β n = ( 1 − 1 n ) n \beta^n=(1-\frac{1}{n})^n βn=(1n1)n,当 β → 1 \beta \rightarrow 1 β1 n → ∞ n \rightarrow \infty n β n = ( 1 − 1 n ) n = e − 1 ≈ 0.3679 \beta^n=(1-\frac{1}{n})^n = e^{-1}\approx0.3679 βn=(1n1)n=e10.3679,在统计学中把 e − 1 e^{-1} e1当作很小的权重,可以忽略不计,所以公式(3)中指数 t ≥ 1 1 − β t≥\frac{1}{1-\beta} t1β1的项可以忽略不计。至此,我们叫这种方法为指数加权移动平均法。比如当 β = 0.9 \beta=0.9 β=0.9 v t v_t vt取其前面10个值加权平均得到,而当 β = 0.98 \beta=0.98 β=0.98, v t v_t vt取其前面50个值加权平均得到。

在吴老师的课件上我们可以看到,当 β = 0.9 \beta=0.9 β=0.9时,拟合的函数图像如图3中红色曲线所示:
在这里插入图片描述
图 3 图3 3
β = 0.98 \beta=0.98 β=0.98时,拟合的函数图像如图4中绿色曲线所示,当 β = 0.5 \beta=0.5 β=0.5时,拟合的函数图像如图4中黄色曲线所示
在这里插入图片描述
图 4 图4 4
很明显,我们从图3和图4中可以看到,随着 β \beta β增大,拟合曲线在垂直方向的摆动逐渐减小(垂直方向的摆动黄色曲线>红色曲线>绿色曲线),但会出现延迟(实时性:黄色曲线>红色曲线>绿色曲线)。因此指数加权移动平均可以有效减少曲线在垂直方向上的摆动,一般建议 β 取 0.9 \beta取0.9 β0.9

讲到这儿,我们回到上面提到的问题,想到这儿,我们就发现了问题的根源是要解决梯度下降算法中的纵轴上下摆动!,采用指数加权移动平均可以有效地降低梯度在纵轴上的上下摆动。

2.动量梯度下降算法
动量梯度下降算法是指计算梯度的指数加权平均数,并利用该梯度更新我们模型的权重。
第t次迭代时,在mini-batch上计算梯度 d W , d b dW,db dW,db,使用动量梯度下降法的公式如下:
v d W = β v d W + ( 1 − β ) d W (4) v_{dW}=\beta v_{dW}+(1-\beta)dW\tag{4} vdW=βvdW+(1β)dW(4)
v d b = β v d b + ( 1 − β ) d b (5) v_{db}=\beta v_{db}+(1-\beta)db\tag{5} vdb=βvdb+(1β)db(5)
W = W − α v d W , b = b − α v d b (6) W=W-\alpha v_{dW},b=b-\alpha v_{db}\tag{6} W=WαvdW,b=bαvdb(6)
v d W , v d b v_{dW},v_{db} vdW,vdb初始化为维度与 d W , d b dW,db dW,db相同的0矩阵。

结合上面的分析,理解公式(4)(5)(6)就不难了吧,下面解释下为什么叫“动量梯度下降”,初始化时 β v d W \beta v_{dW} βvdW为0,我们可以看成动量,而 ( 1 − β ) d W (1-\beta)dW (1β)dW微分项可以看成是一个加速度,这样,动量梯度下降就像是在碗里放一个小球,我们的微分项就相当于不断地给这个小球加速度,让它下降的越来越快,但因为 β < 1 \beta<1 β<1,相当于下降过程中摩擦力的作用,所以动量
β v d W \beta v_{dW} βvdW不会越来越大,而梯度下降算法,每次更新都只是基于前一次梯度值,没有加速趋势,所以动量梯度下降会比梯度下降快。

参考:
http://zh.gluon.ai/chapter_optimization/momentum.html

https://zhuanlan.zhihu.com/p/32335746

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值