Optimization algorithms
Mini-batch gradient descent
之前我们介绍的神经网络训练过程是对所有m个样本,称为batch,通过向量化计算方式,同时进行的。我们将这种梯度下降算法称为Batch Gradient Descent。
但是随着数据量的增大,达到百万级,那么训练速度往往会很慢,为了解决这个问题,我们提出了mini-batch gradient descent。即将5百万的样本数量分为5000份,每个mini-batch得到一份,一份含有1000个样本。我们将每个mini-batch记为 ,其维度为 。相应的每个mini-batch的输出记为 ,其维度为(1,1000),且t=1,2,…,5000.
Mini-batch Gradient Descent的实现过程是先将总的训练样本分成T个子集,然后对每个mini-batch进行神经网络训练,包括Forward Propagation,Compute Cost Function,Backward Propagation,循环至T个mini-batch都训练完毕。
对于Batch Gradient Descent而言,一个epoch只进行一次梯度下降算法;而Mini-Batch Gradient Descent,一个epoch会进行T次梯度下降算法。
值得一提的是,对于Mini-Batch Gradient Descent,可以进行多次epoch训练。而且,每次epoch,最好是将总体训练数据重新打乱、重新分成T组mini-batches,这样有利于训练出最佳的神经网络模型。
Understanding mini-batch gradient descent
普通的batch梯度下降法和Mini-batch梯度下降法代价函数的变化趋势,如下图所示:
- batch梯度下降:
- 对所有m个训练样本执行一次梯度下降,每一次迭代时间较长;
- Cost function 总是向减小的方向下降。
- 随机梯度下降:
- 对每一个训练样本执行一次梯度下降,但是丢失了向量化带来的计算加速;
- Cost function总体的趋势向最小值的方向下降,但是无法到达全局最小值点,呈现波动的形式。
- Mini-batch梯度下降:
- 选择一个1<size<m的合适的size进行Mini-batch梯度下降,可以实现快速学习,也应用了向量化带来的好处。
- Cost function的下降处于前两者之间。
上图蓝线表示batch gradient descent,会比较平稳地接近全局最小值,但是因为使用了所有m个样本,每次前进的速度有些慢。紫线表示stochastic gradient descent每次前进速度很快,但是路线曲折,有较大的振荡,最终会在最小值附近来回波动,难以真正达到最小值处。绿线表示mini-batch gradient descent,每次前进速度较快,且振荡较小,基本能接近全局最小值。
Mini-batch 大小的选择
- 如果训练样本的大小比较小时,如m⩽2000时 —— 选择batch梯度下降法;
- 如果训练样本的大小比较大时,典型的大小为: 64,128,256,512,1024(不常见)
- Mini-batch的大小要符合CPU/GPU内存。
Exponentially weighted averages
指数加权平均的关键函数:
下面是一个关于天数和温度的散点图:
上图中, =0.9. 值决定了指数加权平均的天数,可以近似表示为:
例如,当β=0.9,则 ,表示将前10天进行指数加权平均。当β=0.98,则 ,表示将前50天进行指数加权平均。β值越大,则指数加权平均的天数越多,平均后的趋势线就越平缓,但是同时也会向右平移。下图绿色曲线和黄色曲线分别表示了β=0.98和β=0.5时,指数加权平均的结果。
Understanding exponentially weighted averages
例子,当β=0.9时:
…
展开:
上式中所有θ前面的系数相加起来为1或者接近于1。
通常来说, ,在我们的例子中, ,即 .相当于大约10天后,系数的峰值(这里是0.1)下降到原来的 ,只关注了过去10天的天气.
我们已经知道了指数加权平均的递推公式。实际应用中,为了减少内存的使用,我们可以使用这样的语句来实现指数加权平均算法:
当你需要计算很多变量的平均值时,不论是计算还是存储效率,上述算法都是十分的高效.
###Bias correction in exponentially weighted averages
上文中提到当β=0.98时,指数加权平均结果如下图绿色曲线所示。但是实际上,真实曲线如紫色曲线所示。
我们注意到,紫色曲线与绿色曲线的区别是,紫色曲线开始的时候相对较低一些。这是因为开始时我们设置
,所以初始值会相对小一些,直到后面受前面的影响渐渐变小,趋于正常。
修正这种问题的方法是进行偏差校正(bias correction),即在每次计算完
后,对
进行下式处理:
在刚开始的时候,t比较小, ,这样就将 修正得更大一些,效果是把紫色曲线开始部分向上提升一些,与绿色曲线接近重合。随着t增大, , 基本不变,紫色曲线与绿色曲线依然重合。这样就实现了简单的偏差校正,得到我们希望的绿色曲线。
值得一提的是,机器学习中,偏差校正并不是必须的。因为,在迭代一次次数后(t较大), 受初始值影响微乎其微,紫色曲线与绿色曲线基本重合。所以,一般可以忽略初始迭代过程,等到一定迭代之后再取值,这样就不需要进行偏差校正了。
Gradient descent with momentum
该部分将介绍动量梯度下降算法,其速度要比传统的梯度下降算法快很多。做法是在每次训练时,对梯度进行指数加权平均处理,然后用得到的梯度值更新权重W和常数项b。下面介绍具体的实现过程。
在利用梯度下降法来最小化该函数的时候,每一次迭代所更新的代价函数值如图中蓝色线所示在上下波动,而这种幅度比较大波动,减缓了梯度下降的速度,而且我们只能使用一个较小的学习率来进行迭代。
但是我们又希望在如图的纵轴方向梯度下降的缓慢一些,不要有如此大的上下波动,在横轴方向梯度下降的快速一些,使得能够更快的到达最小值点,而这里用动量梯度下降法就可以实现,如红色线所示。
算法实现
β常用的值是0.9。
在我们进行动量梯度下降算法的时候,由于使用了指数加权平均的方法。原来在纵轴方向上的上下波动,经过平均以后,接近于0,纵轴上的波动变得非常的小;但在横轴方向上,所有的微分都指向横轴方向,因此其平均值仍然很大。最终实现红色线所示的梯度下降曲线。
从动量的角度来看,以权重W为例, 可以成速度V, 可以看成是加速度a。指数加权平均实际上是计算当前的速度,当前速度由之前的速度和现在的加速度共同影响。而β<1,又能限制速度 过大。也就是说,当前的速度是渐变的,而不是瞬变的,是动量的过程。这保证了梯度下降的平稳性和准确性,减少振荡,较快地达到最小值处。
另外,关于偏移校正,一般来说不使用。因为经过10次迭代后,随着滑动平均的过程,偏移情况会逐渐消失。而且梯度下降迭代的次数一般远大于10次。
RmSprop(Root Mean Square prop均方根传递)
RMSprop是另外一种优化梯度下降速度的算法。每次迭代训练过程中,其权重W和常数项b的更新表达式为:
下面简单解释一下RMSprop算法的原理,仍然以下图为例,为了便于分析,令水平方向为W的方向,垂直方向为b的方向。
从图中可以看出,梯度下降(蓝色折线)在垂直方向(b)上振荡较大,在水平方向(W)上振荡较小,表示在b方向上梯度较大,即db较大,而在W方向上梯度较小,即dW较小。因此,上述表达式中 较大,而 较小。在更新W和b的表达式中,变化值 较大,而 较小。也就使得W变化得多一些,b变化得少一些。即加快了W方向的速度,减小了b方向的速度,减小振荡,实现快速梯度下降算法,其梯度下降过程如绿色折线所示。总得来说,就是如果哪个方向振荡大,就减小该方向的更新速度,从而减小振荡。
还有一点需要注意的是为了避免RMSprop算法中分母为零,通常可以在分母增加一个极小的常数ε:
其中,
,或者其它较小值。
Adam optimization algorithm
Adam 优化算法的基本思想就是将 Momentum 和 RMSprop 结合起来形成的一种适用于不同深度学习结构的优化算法。
算法实现
-
初始化:
-
第t次迭代:
- Compute dw,db on the current mini-batch
- <–“Momentum”
- <–“Momentum”
- <—偏差修正
- <—偏差修正
超参数的选择
- α:需要进行调试;
- :常用缺省值为0.9, 的加权平均;
- :推荐使用0.999, 的加权平均值;
- ε:推荐使用 。
Adam代表的是Adaptive Moment Estimation。
实际应用中,Adam算法结合了动量梯度下降和RMSprop各自的优点,使得神经网络训练速度大大提高。
Learning rate decay
减小学习因子α也能有效提高神经网络训练速度,这种方法被称为learning rate decay。
Learning rate decay就是随着迭代次数增加,学习因子α逐渐减小。下面用图示的方式来解释这样做的好处。下图中,蓝色折线表示使用恒定的学习因子α,由于每次训练α相同,步进长度不变,在最优值附近较大范围内振荡,与最优值距离就比较远。绿色折线表示使用不断减小的α,随着训练次数增加,α逐渐减小,步进长度减小,使得能够在最优值处较小范围内微弱振荡,不断逼近最优值。相比较恒定的α来说,learning rate decay更接近最优值。
-
常见:
Learning rate decay中对α可由下列公式得到:
其中,decay_rate是参数(可调),epoch是训练完所有样本的次数。随着epoch增加, 会不断变小。
-
指数衰减:
-
其他:
-
离散下降(不同阶段使用不同的学习速率)
The problem of local optima
在使用梯度下降算法不断减小cost function时,可能会得到局部最优解(local optima)而不是全局最优解(global optima)。之前我们对局部最优解的理解是形如碗状的凹槽,如下图左边所示。但是在神经网络中,local optima的概念发生了变化。准确地来说,大部分梯度为零的“最优点”并不是这些凹槽处,而是形如右边所示的马鞍状,称为saddle point。也就是说,梯度为零并不能保证都是convex(极小值),也有可能是concave(极大值)。特别是在神经网络中参数很多的情况下,所有参数梯度为零的点很可能都是右边所示的马鞍状的saddle point,而不是左边那样的local optimum。
类似马鞍状的plateaus会降低神经网络学习速度。Plateaus是梯度接近于零的平缓区域,如下图所示。在plateaus上梯度很小,前进缓慢,到达saddle point需要很长时间。到达saddle point后,由于随机扰动,梯度一般能够沿着图中绿色箭头,离开saddle point,继续前进,只是在plateaus上花费了太多时间。
总的来说,关于local optima,有两点总结:
- 只要选择合理的强大的神经网络,一般不太可能陷入local optima
- Plateaus可能会使梯度下降变慢,降低学习速度
值得一提的是,上文介绍的动量梯度下降,RMSprop,Adam算法都能有效解决plateaus下降过慢的问题,大大提高神经网络的学习速度。