每个机器学习的研究者都会面临调参过程的考验,而在调参过程中,学习速率(learning rate)的调整则又是非常重要的一部分。学习速率代表了神经网络中随时间推移,信息累积的速度。学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。相比于其它超参数学习率以一种更加复杂的方式控制着模型的有效容量,当学习率最优时,模型的有效容量最大。因此,为了训练神经网络,其中一个需要设置的关键超参数是学习率。
选择最优学习率是很重要的,因为它决定了神经网络是否可以收敛到全局最小值。选择较高的学习率,它可能在你的损失函数上带来不理想的后果,因此几乎从来不能到达全局最小值,因为你很可能跳过它。所以,你总是在全局最小值附近,但是从未收敛到全局最小值。选择较小的学习率有助于神经网络收敛到全局最小值,但是会花费很多时间——因为你在网络的权重上只做了很少的调整。这样你必须用更多的时间来训练神经网络。较小的学习率也更可能使神经网络困在局部极小值里面,也就是说,神经网络会收敛到一个局部极小值,而且因为学习率比较小,它无法跳出局部极小值。所以,在设置学习率的时候你必须非常谨慎。下图对这个问题进行了可视化:
最优最优学习速率与神经网络的损失函数地图(loss landscape)有关,它是网络参数值的函数,当在特定数据集上执行推断(预测)时量化与使用特定参数配置相关的「误差」。这个损失地图可能对于很相似的网络架构也看起来很不同。最优学习率取决于你的损失地图的拓扑结构,也就是你的模型结构和数据集。当你用默认的学习率(由你的深度学习库自动决定)可以提供一个差不多的结果,你也可以通过搜寻最优学习率来提高表现。
最终,我们希望得到一个学习率,极大地减少网路损失。我们可以在逐步提高每一次小批量(迭代)的学习速率的同时通过做一个简单实验来观察,记录每一次增量之后的损失。这个逐步的增长可以是线性或指数的。
对于太慢的学习速率来说,损失函数可能减小,但是按照非常浅薄的速率减小的。当进入了最优学习率区域,你将会观察到在损失函数上一次非常大的下降。进一步增加学习速率会造成损失函数值「跳来跳去」甚至在最低点附近发散。记住,最好的学习速率搭配着损失函数上最陡的下降,所以我们主要关注分析图的坡度。如下图所示。
你应该为这个实验设置你的学习率界限从而你能看到所有的三个阶段,确保识别最优范围。
另一个大家常用的技巧是学习速率退火(learning rate annealing),推荐大家先从一个比较高的学习速率开始然后慢慢地在训练中降低学习速率。这个方法背后的思想是我们喜欢快速地从初始参数移动到一个参数值「好」的范围,但这之后我们又想要一个学习速率小到我们可以发掘「损失函数上更深且窄的地方」,(来自 Karparthy 的 CS231n 课程笔记:http://cs231n.github.io/neural-networks-3/#annealing-the-learning-rate)。这样做的理由主要是如前文所述,太高的学习速率可以造成参数更新会在最小值和随后的更新间「跳来跳去」,这点子会造成在极小值范围内持续的有噪声的收敛,或者在更极端的例子里可能造成从最小值发散出去。
学习速率退火的最流行方式是「步衰减」(Step Decay),其中学习率经过一定数量的训练 epochs 后下降了一定的百分比。
其他的方法还有周期性学习率表,或使用带有热重启的随机梯度下降(SGDR)等。
[描述来源:从检查过拟合到数据增强,一文简述提升神经网络性能方法|机器之心]
[图片及描述来源:机器学习算法如何调参?这里有一份神经网络学习速率设置指南|机器之心]
发展历史
从梯度下降算法提出起,学习率的问题就一直是研究的一个热点。由于此前在Stochastic gradient descent中已经对早期的有关学习率的算法进行了介绍,这里仅包括近几年比较新的研究。
2016年,Loshchilov&Hutter 提出预热重启(Warm Restarts)随机梯度下降。这种方法使用余弦函数作为周期函数,并在每个周期最大值时重新开始学习速率。「预热」是因为学习率重新开始时并不是从头开始的,而是由模型在最后一步收敛的参数决定的。
2017年,Leslie Smith在发表的论文中提出他的观点。他认为,用户可以以非常低的学习率开始训练模型,在每一次迭代过程中逐渐提高学习率(线性提高或是指数提高都可以),用户可以用这种方法估计出最佳学习率。他提出了一种周期性学习率表,可在两个约束值之间变动。它是一个三角形更新规则,但他也提到如何使用这一规则与固定周期衰减或指数周期衰减相结合。
同年,来自facebook的Priya Goyal和Kaiming He等人提出了 Linear Scaling Rule,当 Batch size 变为 K 倍时,Learning rate 需要乘以 K 就能够达到同样的训练结果。对于这个看似简单的定律,Facebook 的论文给出了不完整的理论解释和坚实的实验证明。通过 Linear Scaling Rule,Facebook 成功的在一小时内训练了 Batch size 为 8192 的 Resnet 50。Berkeley 的研究组发现 Facebook 提出的 Linear Scaling Rule 当 Batch Size 过大时训练不稳定,容易发散。并且当模型 Batch Size 超过 8000 时,结果会严重退化。Yang You, Igor Gitman, Boris Ginsburg提出了 Layer Wise Adaptive Rate Scaling(LARS)定律,从而能够在 Batch Size 为 32000 的情况下高效的训练 ResNet 50 网络。SGD 的权值更新等于梯度乘以 Learning rate,论文中作者提出了 global learning rate 和 local learning rate 决定,global learning rate 所有层共享,local learning rate 由梯度的变化速率决定,这一想法是受 ADAM 等 adaptive learning rate SGD 的方法的影响。
2018年,Sashank提出了目前最流行的算法之一Adam算法——该算法能够为每个参数计算自适应学习率——的新变体AMSGrad,解决收敛问题并经常也提高了表现。
主要事件
年份 | 事件 | 相关论文/Reference |
2016 | Loshchilov&Hutter 提出预热重启(Warm Restarts)随机梯度下降 | Loshchilov, I. & Hutter, F. (2016). SGDR: STOCHASTIC GRADIENT DESCENT WITH RESTARTS. arXiv:1608.03983v2. |
2017 | Leslie Smith在发表的论文中提出周期性学习率表 | Smith, L. N. (2017). Cyclical Learning Rates for Training Neural Networks. IEEE Winter Conference on Applications of Computer Vision (WACV). pp. 464-472. |
2017 | 来自facebook的Priya Goyal和Kaiming He等人提出了 Linear Scaling Rule | Goyal, P. et al. (2017). Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour. arXiv:1706.02677. |
2017 | Yang You, Igor Gitman, Boris Ginsburg提出了 Layer Wise Adaptive Rate Scaling(LARS)定律 | You, Y.; Gitman, I.; Ginsburg, B. (2017). Large Batch Training of Convolutional Networks. arXiv:1708.03888. |
2018 | Sashank等人提出了Adam算法的新变体AMSGrad | Sashank J. R.; Satyen K.; Sanjiv K.(2018). On the Convergence of Adam and Beyond. Proceedings of ICLR 2018. |
发展分析
瓶颈
即使随着新研究的涌现,学习率对模型表现的影响和优化策略已经比较清楚,目前我们仍然不知道最优的学习率应该如何设置。并且对于不同的学习任务,最优学习率也不同,这可能会严重影响训练效率。
未来发展方向
能够自动进行超参数调优的AutoML将是一个发展方向,从而将枯燥而困难的超参数设置自动化。
Contributor: Yuanyuan Li