乐读窝

深度学习

乐读窝 > 文学理论 > 深度学习

8.5 自适应学习率算法

书籍名:《深度学习》    作者:伊恩.古德费洛



神经网络研究员早就意识到学习率肯定是难以设置的超参数之一,因为它对模型的性能有显著的影响。正如我们在第4.3节和第8.2节中所探讨的,损失通常高度敏感于参数空间中的某些方向,而不敏感于其他。动量算法可以在一定程度缓解这些问题,但这样做的代价是引入了另一个超参数。在这种情况下,自然会问有没有其他方法。如果我们相信方向敏感度在某种程度是轴对齐的,那么每个参数设置不同的学习率,在整个学习过程中自动适应这些学习率是有道理的。

Delta-bar-delta算法(Jacobs,1988)是一个早期的在训练时适应模型参数各自学习率的启发式方法。该方法基于一个很简单的想法,如果损失对于某个给定模型参数的偏导保持相同的符号,那么学习率应该增加。如果对于该参数的偏导变化了符号,那么学习率应减小。当然,这种方法只能应用于全批量优化中。

最近,提出了一些增量(或者基于小批量)的算法来自适应模型参数的学习率。这节将简要回顾其中一些算法。



8.5.1 AdaGrad


AdaGrad算法,如算法8.4所示,独立地适应所有模型参数的学习率,缩放每个参数反比于其所有梯度历史平方值总和的平方根(Duchi  et  al.,2011)。具有损失最大偏导的参数相应地有一个快速下降的学习率,而具有小偏导的参数在学习率上有相对较小的下降。净效果是在参数空间中更为平缓的倾斜方向会取得更大的进步。

在凸优化背景中,AdaGrad算法具有一些令人满意的理论性质。然而,经验上已经发现,对于训练深度神经网络模型而言,从训练开始时积累梯度平方会导致有效学习率过早和过量的减小。AdaGrad在某些深度学习模型上效果不错,但不是全部。

*  *  *

算法8.4 AdaGrad算法。

Require:全局学习率

Require:初始参数θ

Require:小常数δ,为了数值稳定大约设为10−7

 初始化梯度累积变量r=0

 while没有达到停止准则do

  从训练集中采包含m个样本的小批量,对应目标为。

  计算梯度:

  累积平方梯度:

  计算更新:(逐元素地应用除和求平方根)

  应用更新:

end  while

*  *  *



8.5.2 RMSProp


RMSProp算法(Hinton,2012)修改AdaGrad以在非凸设定下效果更好,改变梯度积累为指数加权的移动平均。AdaGrad旨在应用于凸问题时快速收敛。当应用于非凸函数训练神经网络时,学习轨迹可能穿过了很多不同的结构,最终到达一个局部是凸碗的区域。AdaGrad根据平方梯度的整个历史收缩学习率,可能使得学习率在达到这样的凸结构前就变得太小了。RMSProp使用指数衰减平均以丢弃遥远过去的历史,使其能够在找到凸碗状结构后快速收敛,它就像一个初始化于该碗状结构的AdaGrad算法实例。

RMSProp的标准形式如算法8.5所示,结合Nesterov动量的形式如算法8.6所示。相比于AdaGrad,使用移动平均引入了一个新的超参数ρ,用来控制移动平均的长度范围。

*  *  *

算法8.5 RMSProp算法。

*  *  *

Require:全局学习率,衰减速率ρ

Require:初始参数θ

Require:小常数δ,通常设为10−6(用于被小数除时的数值稳定)

 初始化累积变量r=0

 while没有达到停止准则do

  从训练集中采包含m个样本的小批量,对应目标为。

  计算梯度:

  累积平方梯度:

  计算参数更新:(逐元素应用)

  应用更新:

end  while

*  *  *

算法8.6 使用Nesterov动量的RMSProp算法。

*  *  *

Require:全局学习率,衰减速率ρ,动量系数α

Require:初始参数θ,初始参数ν

 初始化累积变量r=0

 while没有达到停止准则do

  从训练集中采包含m个样本的小批量,对应目标为。

  计算临时更新:

  计算梯度:

  累积梯度:

  计算速度更新:(逐元素应用)

  应用更新:

end  while

*  *  *

经验上,RMSProp已被证明是一种有效且实用的深度神经网络优化算法。目前它是深度学习从业者经常采用的优化方法之一。



8.5.3 Adam


Adam(Kingma  and  Ba,2014)是另一种学习率自适应的优化算法,如算法8.7所示。“Adam”这个名字派生自短语“adaptive  moments”。早期算法背景下,它也许最好被看作结合RMSProp和具有一些重要区别的动量的变种。首先,在Adam中,动量直接并入了梯度一阶矩(指数加权)的估计。将动量加入RMSProp最直观的方法是将动量应用于缩放后的梯度。结合缩放的动量使用没有明确的理论动机。其次,Adam包括偏置修正,修正从原点初始化的一阶矩(动量项)和(非中心的)二阶矩的估计(算法8.7  )。RMSProp也采用了(非中心的)二阶矩估计,然而缺失了修正因子。因此,不像Adam,RMSProp二阶矩估计可能在训练初期有很高的偏置。Adam通常被认为对超参数的选择相当鲁棒,尽管学习率有时需要从建议的默认修改。

*  *  *

算法8.7 Adam算法。

*  *  *

Require:步长(建议默认为:0.001)

Require:矩估计的指数衰减速率,ρ1和ρ2在区间[0,1)内。(建议默认为:分别为0.9和0.999)

Require:用于数值稳定的小常数δ(建议默认为:10−8)

Require:初始参数θ

 初始化一阶和二阶矩变量s=0,r=0

 初始化时间步t=0

 while没有达到停止准则do

  从训练集中采包含m个样本的小批量,对应目标为。

  计算梯度:

  t←t+1

  更新有偏一阶矩估计:

  更新有偏二阶矩估计:

  修正一阶矩的偏差:

  修正二阶矩的偏差:

  计算更新:(逐元素应用操作)

  应用更新:

end  while

*  *  *



8.5.4 选择正确的优化算法


在本节中,我们讨论了一系列算法,通过自适应每个模型参数的学习率以解决优化深度模型中的难题。此时,一个自然的问题是:该选择哪种算法呢?

遗憾的是,目前在这一点上没有达成共识。Schaul  et  al.(2014)展示了许多优化算法在大量学习任务上极具价值的比较。虽然结果表明,具有自适应学习率(以RMSProp和AdaDelta为代表)的算法族表现得相当鲁棒,不分伯仲,但没有哪个算法能脱颖而出。

目前,最流行并且使用很高的优化算法包括SGD、具动量的SGD、RMSProp、具动量的RMSProp、AdaDelta和Adam。此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。