吴恩达《深度学习工程师》Part2.Week2 优化算法

2.1 Mini-batch梯度下降法
机器学习的应用是高度依赖经验的过程,伴随着大量的迭代过程,需要训练大量的模型才能找到最合适那个。Mini-batch梯度下降法是一种有效的能够提升计算效率的优化算法。
假如你的模型有5,000,000个样本,如果直接对整个样本集(batch)进行训练的话,过程将会非常缓慢。因此,可以将大样本划分为许多小样本,分别对每个小样本进行训练。例如可以划分出5000个小样本,一个小样本中有1000个样本数据,每个小样本就叫做mini-batch。对这5000个小样本进行完成一次向前和向后传播,称为一个epoch,也就是一次历遍了训练集。

2.2 理解mini-batch梯度下降法
在整个训练集进行上进行训练时,绘制的代价函数随迭代次数的变化曲线是连续下降的。而用mini-batch进行训练时,代价函数随迭代次数的变化曲线虽然也是整体下降,但是会伴随着上下的微小波动,如图1所示。

这里写图片描述
图1 batch和mini-batch梯度下降法代价函数的不同

这是由于每次梯度下降使用的是不同的mini-batch数据,有些mini-batch数据容易进行梯度下降,有些则较为困难。

在选择mini-batch中样本的大小size时,如果size=m,则变为batch梯度下降法。
如果size=1,则这种算法称为随机梯度下降法(Stochastic Gradient Descent),这时每个样本都是独立的mini-batch。以上两种情况是极端的情况,一般常见的做法是size取1~m的中间值。
实施不同size的梯度下降法时效果如下图所示。

这里写图片描述
图2 不同大小的mini-batch梯度下降法

蓝色折线为batch梯度下降法,下降幅度较大,相对噪声较低,但是一次训练样本太多,单次迭代耗时太长。
紫色折线为随机梯度下降法,大部分情况下每步的优化方向是指向代价函数最小值的方向,但是有时候会偏离最小化的方向,随机梯度下降永远不会到达代价函数最小值,只会在最小值附近徘徊。随机梯度下降法不能利用向量化带来的加速计算的效果,效率低下。
绿色折线是正常size的mini-batch梯度下降法。这种方法能够充分利用向量化的优点,不需要完整的训练集结束就可以开展后续的改进过程。
在选取mini-batch的size时的选取原则是:如果训练样本较小(如小于2000时),则直接使用batch梯度下降法。如果训练样本较大时,可以选择size为64,128,256,512等,可以尝试几次来确定最合适的size大小。

2.3 指数加权平均
在后面几节中将会讲到一些优化算法,这些算法需要用到指数加权平均,统计学中叫做指数加权移动平均。

这里写图片描述
图3 伦敦天气随时间的变化规律

图3为伦敦天气随时间的变化规律,移动平均值的计算如下:
v0=0 v 0 = 0
v1=0.9v0+0.1θ1 v 1 = 0.9 v 0 + 0.1 θ 1
v2=0.9v1+0.1θ2 v 2 = 0.9 v 1 + 0.1 θ 2
... . . .
vt=0.9vt1+0.1θt v t = 0.9 v t − 1 + 0.1 θ t
其中 vt v t 为第 t t 天的加权平均值,θt为第 t t 天的温度。用一个公式表示的话:
vt=βvt1+(1β)θt
直观理解的话, vt v t 大约等于 11β 1 1 − β 天温度的平均值。如果 β=0.9 β = 0.9 的话, vt v t 就是前10天的平均值,窗口宽度为10,如果 β=0.98 β = 0.98 的话, vt v t 就是前50天的平均值,窗口宽度为50,增加了更多的权重,曲线也更为平稳。如图4所示,红色曲线为 β=0.9 β = 0.9 的平均值,绿色曲线为 β=0.98 β = 0.98 的平均值。

这里写图片描述
图4 β=0.9 β = 0.9 β=0.98 β = 0.98 的平均值

一种极端的情况是 β=0.5 β = 0.5 时,平均值只考虑到两天的权重,曲线波折很明显,有很多的噪声。如图5中的黄色曲线所示。
这里写图片描述
图5 β=0.5 β = 0.5 时的平均值

2.4 理解指数平均
vt=βvt1+(1β)θt v t = β v t − 1 + ( 1 − β ) θ t ,取 β=0.9 β = 0.9 ,计算100天的平均值,有:
v100=0.9θ100+0.1×0.9θ99+0.1×0.92θ98+... v 100 = 0.9 θ 100 + 0.1 × 0.9 θ 99 + 0.1 × 0.9 2 θ 98 + . . .
这样就构建了一个指数衰减函数与每日的温度相乘,得到了第100天的平均温度。上式中的系数加起来接近于1。

2.5 指数加权平均的偏差修正
实际上,按照上节讲到的方法计算指数加权平均值时,绘出的曲线是图6中的紫色曲线,在起始阶段的平均值要低得多。

这里写图片描述
图6 指数加权平均的修正

原因如下:
v0=0 v 0 = 0
v1=0.98v0+0.02θ1=0.02θ1 v 1 = 0.98 v 0 + 0.02 θ 1 = 0.02 θ 1
v2=0.98v1+0.1θ2=0.0196θ1+0.02θ2 v 2 = 0.98 v 1 + 0.1 θ 2 = 0.0196 θ 1 + 0.02 θ 2
可以看出,平均值 v2 v 2 明显过小。可以进行修正,用 vt1βt v t 1 − β t 代替 vt v t ,修正以后紫色曲线就变为了绿色曲线。

2.6 动量梯度下降法
动量(momentum)梯度下降法是一种比标准梯度下降法效率更好的优化算法,其基本思路是计算梯度的指数加权平均数,并用梯度来更新权重。

这里写图片描述
图7 不同的梯度下降法示意图

图7中蓝色折线是采用batch或mini-batch梯度下降法进行的优化过程,经过多次波折后到达最小值,这种上下波动减慢了梯度下降法的速度,限制了学习率的选取,如果选取了较大的学习率,则下降过程会很容易偏离最优方向,如图中紫色折线所示。为了获得最快的下降速率,我们希望下降曲线在是水平方向较快,而垂直方向则缓慢,如图中红色曲线所示,可以用momentum梯度下降法来实现,具体步骤如下:

在第 t t 次迭代过程中,首先计算dw db d b ,然后计算 Vdw V d w Vdb V d b
Vdw=βVdw+(1β)dw V d w = β V d w + ( 1 − β ) d w
Vdb=βVdb+(1β)db V d b = β V d b + ( 1 − β ) d b
然后更新 W W b
w=wαVdw w = w − α V d w
b=bαVdb b = b − α V d b
这样就可以减小在垂直方向的摆动幅度,图7中的蓝色折线在垂直方向上下摆动,正负抵消,平均值为0,通过指数加权平均,可以使得在垂直方向的梯度更新值很小。在水平方向上,由于所有的方向都指向最低值,则指数加权平均以后的值依然很大,能够实现快速的下降。

在上面的式子中 dw d w dw d w 类似于物理中的加速度,而 β β 是一个小于1的值,类似于摩擦力。标准梯度下降法中,每步的更新都是独立的,不依赖于前面的步骤。而momentum梯度下降法则于前面步骤的更新值有关,获得类似动量的特性。

2.7 RMSprop
RMSprop(root mean square prop)是另外一种优化算法,

这里写图片描述
图8 RMSprop梯度下降法

在第 t t 次迭代过程中,首先计算dw db d b ,然后计算 Sdw S d w Sdb S d b
Sdw=βSdw+(1β)dw2 S d w = β S d w + ( 1 − β ) d w 2
Sdb=βSdb+(1β)db2 S d b = β S d b + ( 1 − β ) d b 2
然后更新 W W b
w=wαdwSdw+ϵ w = w − α d w S d w + ϵ
b=bαdbSdb+ϵ b = b − α d b S d b + ϵ
图8中 w w 梯度较小,而b梯度较大,这样 w w 的更新速度会较大,而b的更新速度会较小。 ϵ ϵ 的作用是防止分母为0,可以取一个很小的值,如 108 10 − 8
RMSprop和Momentum类似的地方时,它们都可以防止下降过程中的剧烈摆动,以及可以选用较大的学习率。

2.8 Adam优化算法
Adam(adaptive moment estimation)算法是将RMSprop和Momentum结合起来的优化算法,可以应用于各种不同的神经网络结构中。具体实现方法如下:
Vdw=0,Vdb=0,Sdw=0,Sdb=0 V d w = 0 , V d b = 0 , S d w = 0 , S d b = 0
在第 t t 次迭代过程中:
Vdw=β1Vdw+(1β1)dw
Vdb=β1Vdb+(1β1)db V d b = β 1 V d b + ( 1 − β 1 ) d b
Sdw=β2Sdw+(1β2)dw2 S d w = β 2 S d w + ( 1 − β 2 ) d w 2
Sdb=β2Sdb+(1β2)db2 S d b = β 2 S d b + ( 1 − β 2 ) d b 2

Vcorrecteddw=Vdw1βt1 V d w c o r r e c t e d = V d w 1 − β 1 t
Vcorrecteddb=Vdb1βt1 V d b c o r r e c t e d = V d b 1 − β 1 t
Scorrecteddw=Sdw1βt2 S d w c o r r e c t e d = S d w 1 − β 2 t
Scorrecteddb=Sdb1βt2 S d b c o r r e c t e d = S d b 1 − β 2 t
w=wαdwSdw+ϵ w = w − α d w S d w + ϵ
b=bαdbSdb+ϵ b = b − α d b S d b + ϵ

然后更新 W W b
w=wαVcorrecteddwSdw+ϵ w = w − α V d w c o r r e c t e d S d w + ϵ
b=bαVcorrecteddwSdb+ϵ b = b − α V d w c o r r e c t e d S d b + ϵ

在Adam算法中,有几个关键的超参数: α,β1,β2,ϵ α , β 1 , β 2 , ϵ
其中学习率 α α 需要不断调试, β1 β 1 可以设置为0.9, β2 β 2 可以设置为0.99, ϵ ϵ 可以设置为 108 10 − 8

2.9 学习率衰减
一个有效的提高学习速率的方法是随着之间的增加,慢慢减小学习率,实现方法有以下几种:
α=11+decayRateepochNumberα0 α = 1 1 + d e c a y R a t e ⋅ e p o c h N u m b e r ⋅ α 0
α=0.95epochNumberα0 α = 0.95 e p o c h N u m b e r ⋅ α 0
α=kepochNumberα0 α = k e p o c h N u m b e r ⋅ α 0
α=ktα0 α = k t ⋅ α 0

2.10 局部最优的问题
在机器学习的早期阶段,人们在进行模型优化的时候,总是担心当代价函数梯度为零的时候模型会困在局部最优点(图9中蓝色点所示的位置),而不是全局最优点。

这里写图片描述
图9 神经网络优化问题

但是上述理解存在问题,因为图9画出了2维输入变量与代价函数的关系图。
实际上代价函数梯度为零的点大多数情况下都是鞍点(saddle point),如图10所示,而不是局部最优点。
这里写图片描述
图10 鞍点

这是由于在高维输入的模型中,当梯度为零时,不同纬度的函数既可能是凸函数也可能是凹函数,例如,在2000维输入的模型中,所有这2000个 wJ w − J 函数的都为凸函数的概率极小,更可能遇到的是图10所示的有凸有凹的鞍点的情况。
像Momentum,RMSprop和Adam这样的优化算法能够快速脱离鞍点达到最优值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值