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。此时,选择哪一个算法似乎主要取决于使用者对算法的熟悉程度(以便调节超参数)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论