深度学习:优化加速

来源:互联网 发布:混沌战域美人数据 编辑:程序博客网 时间:2024/05/18 03:34

本文按以下目录编排
一、Mini-batch梯度下降
二、优化算法
2.1 平均加权(Exponentially Weight Average)
2.2 动量(Momentum)梯度下降法
2.3 RMSprop算法
2.4 Adam优化算法
2.5 学习率衰减
三、局部最优
参考文献

一、Mini-batch梯度下降

优化算法可以帮助加快训练模型,其中一个难点在于深度学习没有在大数据领域发挥最大的效果。在巨大的数据集的基础上来训练模型速度很慢,使用快速的优化算法比好的优化算法能大大提高效率。Mini-batch梯度下降是一个有效的应用。
这里写图片描述
如果数据样本有m个,当m很大时,处理速度很慢。只有处理完m个样本时才能进行梯度下降法。如果我们在处理完整个数据之前,先让梯度下降法处理一部分数据,能大大提升速度。我们可以分割为一些子集(Mini-batch),比如先取1000个样本为第一个子样本,对于5000,000的数据就有5000个子样本,对预测值做同样的处理。 X[t]Y[t] 代表不同的Mini-batch的训练数据和标签。具体的Mini-batch梯度下降法如下图所示。
这里写图片描述
对第t个子集执行前向传播,计算第t个子集的成本函数 J[t]。执行反向传播来计算 J[t]的梯度,只使用 X[t]Y[t] 更新权重。
以上进行5000次为对数据进行了一代的训练。
batch梯度下降时,J成本函数随迭代次数下降,而mini-batch的成本函数整体趋势是下降的,但是有噪声产生。
这里写图片描述
batch gradient descent等价于mini-batch=m:成本函数J相对噪声小,幅度大。缺点是当训练样本很大时,单次迭代耗时长。
stochastic gradient descent(随机梯度下降法)等价于mini-batch=1:每一个样本都是独立的mini-batch。成本函数J有时候会靠近下降方向,有时候远离下降方向。平均来看最终会靠近最小值,但是永远不会收敛。缺点是失去向量化带来的加速。
因此通过选择不大不小的mini-batch尺寸,学习率可以达到最大,有以下两点优点:一,可以利用向量化加速。二,不需要等待所有样本处理完就可以计算梯度下降。比随机梯度下降更持续地向最小值靠近,但是也不会总朝最小值靠近,可以采取减小学习率的方法。
这里写图片描述
选择的技巧
如果训练集小(m<2000),可以用batch gradient descent
一般mini-batch的大小可以选为2的次方,如64,128,256,512。为了找到最有效减小成本函数的那个,可以多试试,选择合适的size使得让梯度下降法最高效。

二、优化算法

2.1 平均加权(Exponentially Weight Average)

指数平均加权,在统计学中被称为指数加权移动平均值,具有以下表达式:
S_t=

{Y1,βYt+(1β)St1,t=1t>1

以英国伦敦每日的温度变化为例,下图是真实的数据点:
这里写图片描述
根据指数平均加权,当β=0.9时,得到上图红线。上图红线是相当于平均了 11β天的温度。
β=0.9时,相当于考虑了10天的温度。如图中红线所示。
β=0.98时,相当于考虑了50天的温度。如图中绿线所示,比红线更平滑,但是会有延迟。
β =0.95时,相当于考虑了2天的温度。数据较少,波动较大,会有异常值。但是这个曲线能更快适应温度变化。
这里写图片描述
指数平均加权计算初始值时,会出现初始值计算不准的情况,会低于真实值,如图中紫线所示。这时候需要用到偏差修正 Vt1βt,随着t的增大,越来越接近零,紫线和绿线重合。偏差修正可以使初始值更接近真实值,减少误差。
这里写图片描述

2.2 动量(Momentum)梯度下降法

基本思想是计算梯度的指数加权平均数,并用该梯度更新权重。当优化成本函数时,红点代表最低点,梯度下降法慢慢摆动到最低点,上下波动降低了速度。因此,我们希望在横轴上加快学习,纵轴上减小波动。使用Momentum 梯度下降法可以达到这种效果。使用后的变化如下图肿红线所示。但是如果要最小化碗状函数,微分项相当于加速度。
这里写图片描述
On iteration t:
Compute dW,db on the current mini-batch

VdW=βVdW+(1β)dW

Vdb=βVdb+(1β)db

W=WαVdW,b=bαVdb

在第t次迭代时,计算如上式所示,有两个超参数α,β。一般取β=0.9时可以取得较好的效果。在梯度下降法和Momentum 梯度下降法中,一般不使用偏差修正。也有资料显示,1β项被删除了。 VdW=βVdW+(1β)dWVdb=βVdb+(1β)db,后者相对于前者相当于乘了11β,会影响学习率α的最佳值。如果修改β值,也许还要修改α,因此更倾向于使用前者。

2.3 RMSprop算法

RMSprop全称是root mean square prop算法,是另一种加速梯度下降的方法。为了便于理解,我们假设纵轴代表参数b,横轴为W。与Momentum类似,我们想减慢纵轴的变化,同时加快横轴的学习,至少不是减缓横轴方向的学习。
On iteration t:
Compute dW,db on the current mini-batch

SdW=βSdW+(1β)dW2

Sdb=βSdb+(1β)db2

W=WαdWSdW,b=bαdbSdb

因此我们希望 SdW小,Sdb大一些,这样横轴方向更新的快,纵轴更新的慢。由于函数的倾斜性,db大,因此Sdb 也相对较大,dw小,因此 SdW也相对较小。同时为了增加稳定性,通常分母增加一个 ϵ,通常108是一个比较好的选择。
W=WαdWSdW+ϵ,b=bαdbSdb+ϵ

这里写图片描述
因此应用RMSprop之后,梯度下降过程如图中绿线所示,纵轴摆动变小。另一个好处是可以用一个更大的学习率 学习,而不必担心纵轴方向的较大摆动。实际上,横轴纬度和纵轴纬度都可能是高维的参数,这里b和w只是为了方便地说明。

2.4 Adam优化算法

RMSprop和Adam优化算法是少有的经受的考验的两种算法。已被证明适用于不同的深度学习结构,并且能够很好地解决许多问题。Adam算法基本是Momentum和RMSprop的结合,相当于Momentum更新了β1 ,RMSprop更新了β2。首先初始化:

VdW=0,Vdb=0,SdW=0,Sdb=0

On iteration t:
Compute dW,db on the current mini-batch
VdW=β1VdW+(1β1)dW

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

SdW=β2SdW+(1β2)dW2

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

W=WαdWSdW,b=bαdbSdb

一般使用Adam的时候需要计算修正偏差
VcorrecteddW=VdW1βt1,Vcorrecteddb=Vdb1βt1

ScorrecteddW=SdW1βt2,Scorrecteddb=Sdb1βt2

W=WαVcorrecteddWSdW+ϵ,b=bαVcorrecteddbSdb+ϵ

以上就是具体的Adam算法,被证明能有效适用于不同的神经网络,适用于广泛的结构。算法中的超参数α 需要调整,β1 默认为0.9,β2 默认为0.999,ϵ 默认为108

2.5 学习率衰减

学习率衰减是另外一种加快学习算法的方法。当我们使用mini-batch时,学习率 α 为固定值,在迭代过程中会产生噪音,下降朝向最小值,但不会精确地收敛,最后在最小值附近摆动,如图中蓝线所示。当使用学习率衰减时,学习初期, α 还较大,学习较快,随着α 的减小,学习步伐变慢变小,最后曲线会在最小值附近的小块区域摆动,如图中绿线所示。
这里写图片描述
这里写图片描述
使用mini-batch时,一代要遍历一次数据。因此我们可以将学习率设为以下形式。

α=11+decayrateepochnumα0

decay_rate是衰减率,epoch_num是代数, α0是初始学习率。其中,在实际应用中,我们可以多尝试不同的衰减率和初始学习率,调整到合适的值。此外还有其它的学习率衰减公式:
α=0.95epochnumα0

α=kepochnumα0k

α=ktα0tminibatcht

此外还有离散下降的学习率
这里写图片描述
也会手动调整学习率 α,值得注意的是,学习率 α 并不是我们优先调参的重点,当固定一个学习率,然后好好调整,会有很大的影响。后期会系统地讲解如何高效地搜索超参数。

三、局部最优

随着深度学习研究的深入,我们对局部最优的理解发生了变化。以往我们想到局部最优的时候,脑海里会浮现出下图的形式,优化的参数假设为,W1,W2,高度是损失函数,可以看到,存在很多局部最优点。
这里写图片描述
这些低维的图曾经影响了我们的理解,但是这些理解并不正确,事实上,当创建一个神经网络时,通常梯度为零的点并不是图中的局部最优点,而是成本函数的零梯度点,通常是鞍点。可以想象就是坐在马鞍上的点,也就是说,导数为零的点,就是图中绿点。
这里写图片描述
对于具有高维空间的函数来说,如果梯度为零,那么在每个方向上,它可能是凸函数,也可能是凹函数,需要都达到梯度为零,这种几率是很小的。因此在高维空间中,更有可能遇到鞍点,而不是局部最优。
如果局部最优不是问题,问题就是会长时间遇到平稳段,也就是导数为零的点,需要花上很长时间才能走出平稳段,首先不太可能是困在极差的局部最优,条件是训练较大的神经网络,存在大量参数,成本函数是高维空间函数。在平稳短时是一个问题,学习速率很慢,这也是上述几个优化算法能加速算法的地方,能够较快地走出平稳段。事实上,面对如此高纬度的空间,很难有人有那么好的直觉知道这些空间长什么样,但是随着我们对它们理解正在不断加深。
这里写图片描述

参考资料

改善深层神经网络:超参数调试、正则化以及优化 - 网易云课堂
课件-Github

注:本文涉及的图片及资料均整理翻译自Andrew Ng的Improving Deep Neural Networks课程,版权归其所有。翻译整理水平有限,如有不妥的地方欢迎指出。