您的位置:首页 > 其它

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

2018-02-21 23:31 239 查看
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=0v0=0

v1=0.9v0+0.1θ1v1=0.9v0+0.1θ1

v2=0.9v1+0.1θ2v2=0.9v1+0.1θ2

......

vt=0.9vt−1+0.1θtvt=0.9vt−1+0.1θt

其中vtvt为第tt天的加权平均值,θtθt为第tt天的温度。用一个公式表示的话:

vt=βvt−1+(1−β)θtvt=βvt−1+(1−β)θt

直观理解的话,vtvt大约等于11−β11−β天温度的平均值。如果β=0.9β=0.9的话,vtvt就是前10天的平均值,窗口宽度为10,如果β=0.98β=0.98的话,vtvt就是前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=βvt−1+(1−β)θtvt=βvt−1+(1−β)θt,取β=0.9β=0.9,计算100天的平均值,有:

v100=0.9θ100+0.1×0.9θ99+0.1×0.92θ98+...v100=0.9θ100+0.1×0.9θ99+0.1×0.92θ98+...

这样就构建了一个指数衰减函数与每日的温度相乘,得到了第100天的平均温度。上式中的系数加起来接近于1。

2.5 指数加权平均的偏差修正

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



图6 指数加权平均的修正

原因如下:

v0=0v0=0

v1=0.98v0+0.02θ1=0.02θ1v1=0.98v0+0.02θ1=0.02θ1

v2=0.98v1+0.1θ2=0.0196θ1+0.02θ2v2=0.98v1+0.1θ2=0.0196θ1+0.02θ2

可以看出,平均值v2v2明显过小。可以进行修正,用vt1−βtvt1−βt代替vtvt,修正以后紫色曲线就变为了绿色曲线。

2.6 动量梯度下降法

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



图7 不同的梯度下降法示意图

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

在第tt次迭代过程中,首先计算dwdw和dbdb,然后计算VdwVdw和VdbVdb。

Vdw=βVdw+(1−β)dwVdw=βVdw+(1−β)dw

Vdb=βVdb+(1−β)dbVdb=βVdb+(1−β)db

然后更新WW和bb:

w=w−αVdww=w−αVdw

b=b−αVdbb=b−αVdb

这样就可以减小在垂直方向的摆动幅度,图7中的蓝色折线在垂直方向上下摆动,正负抵消,平均值为0,通过指数加权平均,可以使得在垂直方向的梯度更新值很小。在水平方向上,由于所有的方向都指向最低值,则指数加权平均以后的值依然很大,能够实现快速的下降。

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

2.7 RMSprop

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



图8 RMSprop梯度下降法

在第tt次迭代过程中,首先计算dwdw和dbdb,然后计算SdwSdw和SdbSdb。

Sdw=βSdw+(1−β)dw2Sdw=βSdw+(1−β)dw2

Sdb=βSdb+(1−β)db2Sdb=βSdb+(1−β)db2

然后更新WW和bb:

w=w−αdwSdw+ϵ√w=w−αdwSdw+ϵ

b=b−αdbSdb+ϵ√b=b−αdbSdb+ϵ

图8中ww梯度较小,而bb梯度较大,这样ww的更新速度会较大,而bb的更新速度会较小。ϵϵ的作用是防止分母为0,可以取一个很小的值,如10−810−8。

RMSprop和Momentum类似的地方时,它们都可以防止下降过程中的剧烈摆动,以及可以选用较大的学习率。

2.8 Adam优化算法

Adam(adaptive moment estimation)算法是将RMSprop和Momentum结合起来的优化算法,可以应用于各种不同的神经网络结构中。具体实现方法如下:

令Vdw=0,Vdb=0,Sdw=0,Sdb=0Vdw=0,Vdb=0,Sdw=0,Sdb=0

在第tt次迭代过程中:

Vdw=β1Vdw+(1−β1)dwVdw=β1Vdw+(1−β1)dw

Vdb=β1Vdb+(1−β1)dbVdb=β1Vdb+(1−β1)db

Sdw=β2Sdw+(1−β2)dw2Sdw=β2Sdw+(1−β2)dw2

Sdb=β2Sdb+(1−β2)db2Sdb=β2Sdb+(1−β2)db2

Vcorrecteddw=Vdw1−βt1Vdwcorrected=Vdw1−β1t

Vcorrecteddb=Vdb1−βt1Vdbcorrected=Vdb1−β1t

Scorrecteddw=Sdw1−βt2Sdwcorrected=Sdw1−β2t

Scorrecteddb=Sdb1−βt2Sdbcorrected=Sdb1−β2t

w=w−αdwSdw√+ϵw=w−αdwSdw+ϵ

b=b−αdbSdb√+ϵb=b−αdbSdb+ϵ

然后更新WW和bb:

w=w−αVcorrecteddwSdw√+ϵw=w−αVdwcorrectedSdw+ϵ

b=b−αVcorrecteddwSdb√+ϵb=b−αVdwcorrectedSdb+ϵ

在Adam算法中,有几个关键的超参数:α,β1,β2,ϵα,β1,β2,ϵ。

其中学习率αα需要不断调试,β1β1可以设置为0.9,β2β2可以设置为0.99,ϵϵ可以设置为10−810−8

2.9 学习率衰减

一个有效的提高学习速率的方法是随着之间的增加,慢慢减小学习率,实现方法有以下几种:

α=11+decayRate⋅epochNumber⋅α0α=11+decayRate⋅epochNumber⋅α0

α=0.95epochNumber⋅α0α=0.95epochNumber⋅α0

α=kepochNumber√⋅α0α=kepochNumber⋅α0

α=kt√⋅α0α=kt⋅α0

2.10 局部最优的问题

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



图9 神经网络优化问题

但是上述理解存在问题,因为图9画出了2维输入变量与代价函数的关系图。

实际上代价函数梯度为零的点大多数情况下都是鞍点(saddle point),如图10所示,而不是局部最优点。



图10 鞍点

这是由于在高维输入的模型中,当梯度为零时,不同纬度的函数既可能是凸函数也可能是凹函数,例如,在2000维输入的模型中,所有这2000个w−Jw−J函数的都为凸函数的概率极小,更可能遇到的是图10所示的有凸有凹的鞍点的情况。

像Momentum,RMSprop和Adam这样的优化算法能够快速脱离鞍点达到最优值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: