购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 从Momentum到Adam

将梯度下降法分成小批量进行处理,运算效率并不慢。但有人还是觉得慢,特别是在超大的训练数据集面前训练速度仍然“不过瘾”。如图3.3所示,从纵轴方向来看,梯度下降法有明显的频繁摆动,我们希望算法在纵轴上不要这么频繁地摆动,能慢一点;但在横轴上,我们希望加快学习速率,算法能够从左到右快速地收敛到极小值。

于是有人便基于移动加权的思想,给梯度下降带上了历史梯度的成分来进一步加快速度。这种基于历史梯度和当前梯度进行加权计算的梯度下降法便是动量梯度下降法(Momentum),如图3.4所示。

图3.3 梯度下降过程

图3.4 Momentum的图示过程

Momentum的计算公式如式(3.5)和式(3.6)所示。

假设以v为历史梯度,不同于梯度下降法的是,现在有了两个超参数,除学习率α之外,还多了一个控制梯度加权的参数β。β作为超参数通常取值为0.9,表示平均了经过10次迭代的梯度。这里可以把经过梯度加权后的梯度v理解为速率,在进行参数更新时,以速率代替原来的梯度进行更新。以上便是Momentum的基本原理。

后来,又有人觉得Momentum不够快,便在Momentum的基础上继续进行改进,让梯度下降在横轴上更快、在纵轴上更慢,于是就有了均方根加速算法(RMSProp)。那么RMSProp对于Momentum到底做了哪些改进使得训练速度更快呢?RMSProp最大的变化在于,进行历史梯度加权时对当前梯度取了平方,并在参数更新时让当前梯度对历史梯度的开根号后的值做了除法运算。

假设以神经网络的权值w的更新方向为横轴方向,偏置b的更新方向为纵轴方向,根据前面的表述,我们的目的是要加快横轴的速度而减缓纵轴的速度。所以,在进行参数更新时,我们会希望S dw 较小而S db 较大(相较于Momentum, RMSProp用S代替了原先的v),利用梯度除以二者的均方根正好可以达到这一效果。RMSProp的计算公式如式(3.7)~式(3.10)所示。

在这么多优秀的梯度算法的支撑下,继续介绍最后一种深度学习优化算法——自适应矩估计算法(Adam)。Adam是一种将Momentum和RMSProp结合起来的优化算法,是于2014年提出的一种优秀的深度学习优化器。因为Adam是Momentum和RMSProp的理论综合,所以这里就不对Adam理论做过多阐述了。下面以直接权值w的更新为例来看Adam的计算公式,如式(3.11)所示。

这里简单描述一下Adam算法的计算过程:首先对v dw和S dw进行参数初始化,利用Momentum进行梯度加权计算。然后对加权后的梯度进行偏差纠正,这里的参数t为迭代次数,β 1 为Momentum的梯度加权超参数。之后利用RMSProp进行基于梯度平方的更新,并进行偏差纠正。最后将基于Momentum和RMSProp的梯度值进行最终的权值更新。其中β 2 为RMSProp的梯度加权超参数;ε为防止分母为零的超参数,通常为一个很小的值。

Adam算法优点众多,颇受深度学习“炼丹师”的喜爱,这里给大家简单介绍几个:在同等数据量的情况下,Adam算法占用内存更少,超参数相对固定,几乎不需要怎么调整,特别适用于大量训练数据的场景,且对梯度稀疏和梯度噪音有很大的容忍性。

本讲简单介绍了深度学习中的常用优化算法,至于更多的算法理论细节和代码实现,还需要读者找来相应的论文进行认真研读。还有一些像加速梯度下降法(Nesterov Accelerated Gradient, NAG)等算法并没有提及,对深度学习优化算法感兴趣的读者可以找来相关资料进行深入研究。

本讲习题

在实际的深度学习调优过程中,学习率(Learning Rate)是最重要的一个超参数。读者可以查阅相关资料并结合个人实践经验,了解在实际的神经网络调优中都有哪些学习率调参技巧。 rNnUf2PS9XxOluKQy2CuH1XcjYjoEUvesDR4A3lAlx/soKFtB6o17pwpaul/IQ9V

点击中间区域
呼出菜单
上一章
目录
下一章
×