Deeplearning,ai之学习笔记 Course2 Week2 Optimization algorithms

2.6 动量梯度下降法(Gradient descent with Momentum)

本节让我们一起来看看一种新的加速梯度下降学习的方法——动量梯度下降法。它的运行速度几乎总是快于标准的梯度下降算法。它基本的想法就是计算梯度的指数加权平均数,并利用该梯度更新权重。

一个普通batch/mini-batch的学习过程

例如,如果你要优化成本函数,函数形状如图,红点代表最小值的位置,假设你从这里(蓝色点)开始梯度下降法,如果进行梯度下降法的一次迭代,无论是batch或mini-batch下降法,也许会指向这里,现在在椭圆的另一边,计算下一步梯度下降,结果或许如此,然后再计算一步,再一步
在这里插入图片描述
慢慢摆动到最小值,这种上下波动减慢了梯度下降法的速度,你就无法使用更大的学习率,如果你要用较大的学习率(紫色箭头),结果可能会偏离函数的范围,为了避免摆动过大,你要用一个较小的学习率。

所以我们希望的是减小纵轴上的摆动,加速横轴上的移动。更快的移向红点。那么要如何实现这一个过程呢?

Momentum的方法

先举一个例子:
想象你有一个碗,我们的梯度下降就是希望走到碗底。你拿一个球,微分项给了这个球一个加速度,此时球正向山下滚,球因为加速度越滚越快,而因为 β \beta β稍小于1,表现出一些摩擦力,所以球不会无限加速下去,所以不像梯度下降法,每一步都独立于之前的步骤,你的球可以向下滚,获得动量,可以从碗向下加速获得动量。

使用动量梯度下降法,你需要做的是,第t次迭代的过程中,也就是一个反向传播的过程。你会计算微分 d W , d b dW,db dW,db,跟我们之前在梯度下降法中的过程相似,接下来要
在这里插入图片描述

我们这里相当于是把它们在纵轴上的移动做了平均,让我们回到刚开始的那个图:
在这里插入图片描述
在平均的过程中,纵轴上的平均值正负相消,接近于0;而横轴上的所有微分都指向了增长的方向,因此你将它平均不会使它变小。总的来看,结果就是在纵轴方向上我们的波动减小了。而横轴的速度上升了。达到了我们的需求,也就是加快了我们的学习过程。
总的算法如下:
在这里插入图片描述

2.7 RMSprop(root mean square prop算法)

前面提到了动量梯度下降法,还有一个RMSprop的算法能够达到我们的需求。

一个普通的batch/mini-batch学习过程

这里依旧拿出上一小节中的图来说明:
在这里插入图片描述
回忆一下我们之前的例子,我们假设这里的横轴代表了参数 W W W,纵轴代表了 b b b。所以我们现在想的是减缓 b b b方向的学习,加快 W W W方向的学习。

RMSprop方法

在这里插入图片描述
下面是RMSprop的具体做法:
在第t次迭代中,该算法会照常计算当下mini-batch的微分 d W , d b dW,db dW,db, 用到一个新符号 S d W S_{dW} SdW,所以:
S d W = β S d W + ( 1 − β ) d W 2 S_{dW}=\beta S_{dW}+(1-\beta)dW^2 SdW=βSdW+(1β)dW2
澄清一下,这个平方的操作是针对这一整个符号的,这样做能够保留微分平方的加权平均数,同样的:
S d b = β S d b + ( 1 − β ) d b 2 S_{db}=\beta S_{db}+(1-\beta)db^2 Sdb=βSdb+(1β)db2

接着RMSprop更新参数值(具体见图片)我们来理解一下其原理。记得在横轴方向或者在例子中的 W W W方向,我们希望学习速度快,而在垂直方向,也就是例子 b b b中的方向,我们希望减缓纵轴上的摆动,所以有了 S d W , S d b S_{dW},S_{db} SdW,Sdb我们希望 S d W S_{dW} SdW会相对较小,所以我们要除以一个较小的数,而希望 S d b S_{db} Sdb又较大,所以这里我们要除以较大的数字,这样就可以减缓纵轴上的变化。注意看这些微分,垂直方向的要比水平方向的大得多,所以斜率在方向特别大,所以这些微分中, d b db db较大, d W dW dW较小,结果就是纵轴上的更新要被一个较大的数相除,就能消除摆动,而水平方向的更新则被较小的数相除。
在这里插入图片描述
RMSprop的结果就是,梯度下降的更新最后会变成这样(绿色线),纵轴方向上摆动较小,而横轴方向继续推进。还有个影响就是,你可以用一个更大学习率 α \alpha α,然后加快学习,而无须在纵轴上垂直方向偏离。

2.8 Adam优化算法(Adam optimization algorithm)

Adam优化算法基本上就是将Momentum和RMSprop结合在一起,那么一起来看看如何使用Adam算法。
在这里插入图片描述
在这里插入图片描述

2.9 学习率衰减(Learning rate decay)

加快学习算法的一个办法就是随时间慢慢减少学习率,我们将之称为学习率衰减

为什么需要改变学习率

在这里插入图片描述
假设你要使用mini-batch梯度下降法,mini-batch数量不大,大概64或者128个样本,在迭代过程中会有噪音(蓝色线),下降朝向这里的最小值,但是不会精确地收敛,所以你的算法最后在附近摆动,并不会真正收敛,因为你用的是固定值,不同的mini-batch中有噪音。

但要慢慢减少学习率 α \alpha α的话,在初期的时候,学习率 α \alpha α还较大,你的学习还是相对较快,但随着 α \alpha α变小,你的步伐也会变慢变小,所以最后你的曲线(绿色线)会在最小值附近的一小块区域里摆动,而不是在训练过程中,大幅度在最小值附近摆动。

所以慢慢减少 α \alpha α的本质在于,在学习初期,你能承受较大的步伐,但当开始收敛的时候,小一些的学习率能让你步伐小一些。

改变学习率的一些方法

指数衰减、离散下降等

2.10 局部最优问题(The problem of local optima)

在深度学习研究早期,人们总是担心优化算法会困在极差的局部最优,不过随着深度学习理论不断发展,我们对局部最优的理解也发生了改变。

其实是陷入了低维误区

曾经人们在想到局部最优时脑海里会出现的图,也许你想优化一些参数,平面的高度就是损失函数。在图中似乎各处都分布着局部最优。梯度下降法或者某个算法可能困在一个局部最优中,而不会抵达全局最优。如果你要作图计算一个数字,比如说这两个维度,就容易出现有多个不同局部最优的图,而这些低维的图曾经影响了我们的理解,但是这些理解并不正确。事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
在这里插入图片描述
而鞍点长这样:
在这里插入图片描述

所以我们从深度学习历史中学到的一课就是,我们对低维度空间的大部分直觉,比如你可以画出上面的图,并不能应用到高维度空间中。适用于其它算法,因为如果你有2万个参数,那么成本函数有2万个维度向量,你更可能遇到鞍点,而不是局部最优点。

问题在哪?

如果局部最优不是问题,那么问题是什么?问题是是平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点,因为左边或右边的随机扰动。

所以,平稳段是一个问题,这样使得学习十分缓慢,但是!
我们之前学的Momentum或是RMSprop,Adam这样的算法,是能够加速学习算法。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,让你尽早往下走出平稳段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值