优化算法

使用优化算法可以加快神经网络的训练过程。

Mini-batch

使用所有训练集进行一次梯度下降的方法叫做Batch梯度下降法。当训练集数量非常巨大时,Batch梯度下降法就变慢了,这时可以使用Mini-batch梯度下降法,Mini-batch梯度下降法比Batch梯度下降法快。

Mini-batch梯度下降法把训练集平均分成T个子集 {(X{1},Y{1}),(X{2},Y{2}),,(X{T},Y{T})} { ( X { 1 } , Y { 1 } ) , ( X { 2 } , Y { 2 } ) , ⋯ , ( X { T } , Y { T } ) } 。使用其中的一个子集 ((X{t},Y{t})) ( ( X { t } , Y { t } ) ) 进行一次梯度下降。所有子集都进行过一次梯度下降,我们定义这个过程为一次迭代(epoch)训练。Mini-batch梯度下降法进行多次迭代训练,代价函数J收敛后,就可以完成训练。

Batch梯度下降法和Mini-batch梯度下降法的代价函数下降曲线不同。
Batch梯度下降法和Mini-batch梯度下降法的代价函数下降曲线
Mini-batch梯度下降法的代价函数曲线有噪声,但是总体是下降趋势。出现噪声的原因可能是有些子集容易拟合,代价函数值比较低,有些子集不容易拟合,代价函数值比较高。

Mini-batch的大小为训练集的样本个数m/T。如果Mini-batch size = m,那么Mini-batch就变成Batch梯度下降法。如果Mini-batch size = 1,Mini-batch就变成随机梯度下降法。

下图是不同梯度下降法的代价函数下降过程的直观表现
不同梯度下降法的代价函数下降过程
其中蓝色线代表Batch梯度下降法,紫色线代表随机梯度下降法,绿色线表示Mini-batch梯度下降法。可以看到随机梯度下降法的下降方向是带有很大的噪声,不像Batch梯度下降法直接往最低方向下降,Mini-batch梯度下降法的下降过程也带有一些噪声。随机梯度下降法每次迭代只训练一个样本,放弃了矢量运算的快速,增加了训练的时间,不过随机梯度下降法也有适用的场景,比如在线学习。

为了能够加快训练速度,Mini-batch size的大小要适中,根据CPU或GPU的大小决定。Mini-batch size太小会浪费运行空间,太大反而会拖慢训练时间。根据CPU和GPU的运算特性,Mini-batch size一般是2的倍数,比如64,128,256,512等。一般训练集超过2000个样本时使用Mini-batch。

指数加权平均

还有其他比梯度下降法更快的优化算法,在学习它们之前需要了解指数加权平均,在统计中也叫作指数加权移动平均。

下图是伦敦一年内的温度变化曲线:
伦敦一年内的温度变化曲线
θi θ i 为第i天的温度, Vi V i 为平均温度,通过如下公式计算得到

Vi=βVi1+(1β)θi V i = β V i − 1 + ( 1 − β ) θ i

β=0.9 β = 0.9 时,计算所有的 Vi V i 值,得到上图的红色线。

V相当于 11β 1 1 − β 天的平均温度。当 β=0.9 β = 0.9 时,V相当于最近10天的平均温度。下图的绿线表示 β=0.98 β = 0.98 ,即最近50天的平均温度曲线,可以看到温度变化的幅度不大,很平缓。下图的黄线表示 β=0.5 β = 0.5 ,即最近2天的平均温度变化曲线,两天的平均温度变化幅度挺大的。所有的这些平均温度变化曲线都往右边偏移了一部分。
伦敦一年内的温度平均变化曲线

我们假设要计算第t天的V值,那么

Vt===(1β)θt+βVt1(1β)θt+β((1β)θt1+βVt2)(1β)θt+(1β)βθt1+(1β)β2θt2+(1β)β3θt3+ V t = ( 1 − β ) θ t + β V t − 1 = ( 1 − β ) θ t + β ( ( 1 − β ) θ t − 1 + β V t − 2 ) ⋮ = ( 1 − β ) θ t + ( 1 − β ) β θ t − 1 + ( 1 − β ) β 2 θ t − 2 + ( 1 − β ) β 3 θ t − 3 + ⋯

可以看到, Vt V t 是前t天的加权平均值,加权值呈指数下降。当 β11β1e β 1 1 − β ≈ 1 e 时,权重 (1β)β2 ( 1 − β ) β 2 已经很小了,几乎可以忽略不计了,因此 Vt V t 相当于前 11β 1 1 − β 天的加权平均值。

与直接算平均值相比,指数加权平均值的好处是使用代码少(公式只需要一行代码),占用的内存少(只需要存储 V0 V 0 )。

因为设置 V0=0 V 0 = 0 ,所以V一开始的值比较小,比如 β=0.9 β = 0.9 ,那么 V1=0.9V0+0.1θ1=0.1θ1 V 1 = 0.9 V 0 + 0.1 θ 1 = 0.1 θ 1 ,这样不合理,需要对V进行偏差修正。偏差修正后V的公式为:

Vi=βVi1+(1β)θi1βi V i = β V i − 1 + ( 1 − β ) θ i 1 − β i

当i比较小时, Vi/(1θi) V i / ( 1 − θ i ) 可以放大 Vi V i 值,使得 Vi V i 值看起来比较合理。当i很大时, 1θi1 1 − θ i ≈ 1 ,对 Vi V i 值没影响。

如果对开始时期的偏差不在意,可以不进行偏差修正。

Momentum

Momentum梯度下降法与标准的梯度下降法的不同在于参数更新,Momentum的做法是:

VdWVdbWb=βVdW+(1β)dW=βVdb+(1β)db=WαVdW=bαVdb V dW = β V dW + ( 1 − β ) dW V db = β V db + ( 1 − β ) db W = W − α V dW b = b − α V db

参数更新时减去的是梯度的平均值。
Momentum梯度下降
标准的梯度下降法是上下波动地接近代价函数的最低值,如上图蓝线所示。Momentum法在参数更新时减去的是梯度的平均值。代价函数值纵坐标的移动距离有正有负,抵消之后平均值很低,因此在纵坐标的摆动幅度减少。而代价函数值在横坐标依然直直地往最低值走,如上图红色线所示。因此,Momentum梯度下降法可以比标准的梯度下降法运行的更快。

RMSprop(root mean square prop)

RMSprop在梯度下降的每次迭代中进行如下操作:

SdWSdbWb=β2SdW+(1β2)(dW)2=β2Vdb+(1β2)(db)2=WαdWSdW+ε=bαdbSdb+ε S dW = β 2 S dW + ( 1 − β 2 ) ( dW ) 2 S db = β 2 V db + ( 1 − β 2 ) ( db ) 2 W = W − α dW S dW + ε b = b − α db S db + ε

还是从上图来说明一下RMSprop算法。我们希望在纵坐标上代价函数值的摆动不要太大,在横坐标上下降速度要更快。我们假设纵坐标是由参数b影响的,b一般比较大,而横坐标是由参数W影响的,W比较小。 SdW S dW Sdb S db 也就一个比较小,一个比较大。最后,dW除以一个比较小的数就变大,在横坐标上下降速度更快;db除以一个比较大的数就变小,在纵坐标上摆动的幅度就变小,所以RMSprop速度更快。 ε ε 是一个很小的数,如 108 10 − 8 ,为了保证不会出现除以0的错误运算,保证数值的稳定。

Adam优化算法

Adam全称Adaptive Moment Estimation, 是Momentum和RMSprop二者的结合。具体过程如下。
在第t次迭代过程中

VdWVdbSdWSdbVdWVdbSdWSdbWb=β1SdW+(1β1)dW=β1Vdb+(1β1)db=β2SdW+(1β2)(dW)2=β2Vdb+(1β2)(db)2=VdW1βt1=Vdb1βt1=SdW1βt2=Sdb1βt2=WαVdWSdW+ε=bαVdbSdb+ε V dW = β 1 S dW + ( 1 − β 1 ) dW V db = β 1 V db + ( 1 − β 1 ) db S dW = β 2 S dW + ( 1 − β 2 ) ( dW ) 2 S db = β 2 V db + ( 1 − β 2 ) ( db ) 2 V dW = V dW 1 − β 1 t V db = V db 1 − β 1 t S dW = S dW 1 − β 2 t S db = S db 1 − β 2 t W = W − α V dW S dW + ε b = b − α V db S db + ε

其中 α α 需要多次尝试确定最合适的值。 β1 β 1 的缺省值为0.9, β2 β 2 的缺省值为0.999, ε ε 的缺省值为 108 10 − 8

学习率衰减

加快学习算法的一个方法就是随着时间慢慢减少学习率。因为Mini-batch不同子集的随机性,代价函数值会在最小值附近徘徊。如果学习率 α α 慢慢变小,代价函数值在最小值附近徘徊的区域会慢慢变小,最后趋向于最小值。

有多种学习率衰减的方法。
第一种方法:

α=11+decay-rateepoch-numα0 α = 1 1 + decay-rate ∗ epoch-num α 0

其中decay-rate是衰减率,epoch-num是指mini-batch的迭代次数, α0 α 0 是初始学习率。衰减率和初始学习率要自己设定。

第二种方法:指数衰减法

α=0.95epoch-numα0 α = 0.95 epoch-num ∗ α 0

其中0.95可以其他常数。

第三种方法:

α=kepoch-numα0 α = k epoch-num ∗ α 0

或者
α=kTα0 α = k T ∗ α 0

其中T指的是Mini-batch的划分的子训练集的个数,可是某一常数。

第四种方法:离散下降法
每过一段时间,学习率变为原来的一半。

局部最优问题

学习过程中我们经常担心算法陷入到局部最优解中(如左下图所示),但是对于高维度向量来说,每个维度都凸起的情况不多,碰到局部最优解的概率很低。比如一个2000维的高维向量,遇到局部最优解的概率是 22000 2 − 2000 。所以我们不需要经常担心遇到局部最优问题。我们更容易遇到的情况是一半的维度凸起,另外一半凹下,合起来像是马鞍(如右下图所示)。马鞍范围是一个平缓区,代价函数值落到这一区域会减缓学习速度,需要优化的学习算法(比如Adam)来加快学习过程。
局部最优和马鞍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值