前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >观点 | 1cycle策略:实践中的学习率设定应该是先增再降

观点 | 1cycle策略:实践中的学习率设定应该是先增再降

作者头像
机器之心
发布于 2018-05-08 06:50:00
发布于 2018-05-08 06:50:00
9570
举报
文章被收录于专栏:机器之心机器之心

选自GitHub

作者:Sylvain Gugger

机器之心编译

参与:Tianci LIU、思源

深度模型中的学习率及其相关参数是最重要也是最难控制的超参数,本文将介绍 Leslie Smith 在设置超参数(学习率、动量和权重衰减率)问题上第一阶段的研究成果。具体而言,Leslie Smith 提出的 1cycle 策略可以令复杂模型的训练迅速完成。它表示在 cifar10 上训练 resnet-56 时,通过使用 1cycle,能够在更少的迭代次数下,得到和原论文相比相同、甚至更高的精度。

通过采用大学习率,我们可以在 70 个 epoch、不到 7000 次的迭代中,训练出准确率达到 93% 的模型(作为对比,原论文的训练共有约为 360 个 epoch、64000 次迭代)。

下面提供的 Jupyter Notebook 中记录了所有的相关实验。实验中使用了和原论文相同的数据扩张:我们对图片进行了随机水平翻转;除此之外,我们在图片每边加入了 4 像素的填充,并进行随机裁剪。这里我们做出了一点小调整:我们没有使用黑色的填充像素,而是使用了反射填充(reflection padding),因为 fastai 库支持实现这种方式。这个调整也许能解释为什么我们在使用和 Leslie 相同的超参数进行实验时,得到了比他稍好的结果。

Notebook 地址:https://github.com/sgugger/Deep-Learning/blob/master/Cyclical%20LR%20and%20momentums.ipynb

大学习率

可以通过这篇文章学习如何实现 Learning Rate Finder,这里简述如下:在开始训练模型的同时,从低到高地设置学习率,直到损失(loss)变得失控为止。然后将损失和学习率画在一张图中,在损失持续下降、即将达到最小值前的范围上取一个值作为学习率。下例中,可以在 10^-2 到 3×10^-2 之间任意取一个值。

这里的思想和 Leslie 是一致的,他在论文中提出了一个很好的训练方法。

Leslie 建议,用两个等长的步骤组成一个 cycle:从很小的学习率开始,慢慢增大学习率,然后再慢慢降低回最小值。最大学习率应该根据 Learning Rate Finder 来确定,最小值则可以取最大值的十分之一。这个 cycle 的长度应该比总的 epoch 次数略小,在训练的最后阶段,可以将学习率降低到最小值以下几个数量级。

从小学习率开始训练模型并不新颖:使用较小的学习率来预热训练是一种常用的方法,这也正是 Leslie 第一阶段的研究目标。Leslie 并不建议直接从大学习率开始,相反,他认为应该从低到高,缓慢地线性提升学习率,然后再用相同的时间缓慢地降低回来。

Leslie 在实验中发现,在这个 cycle 的中间阶段,大学习率的效果类似于正则方法,可以抑制神经网络的过拟合。这是因为大学习率更偏好损失函数上相对平缓的极小值,而防止模型收敛到一个陡峭区域上。在 Leslie 的另一篇论文中,他通过使用 1cycle,发现近似 Hessian 的方法会有更小的学习率,这意味着 SGD 搜索的是一个更平坦的区域。

在训练的最后阶段,通过降低学习率直到彻底消失,可以得到损失函数平滑区域中相对陡峭的局部极小值。

上图中,在 0 ~ 41 个 epoch 中,学习率从 0.08 提升到 0.8,在随后的 41 ~ 82 个 epoch 中,学习率降回 0.08,在最后的几次 epoch 中,学习率降低到 0.08 的百分之一。可以看到,在高学习率阶段(基本是 20 ~ 60 个 epoch),验证损失表现得相对不稳定。但重要的是,平均而言,训练误差和验证误差之间的距离并没有增大。只有在 cycle 的最后阶段,学习率接近为 0 时,才真正的出现了过拟合。

令人惊讶的是,通过 1cycle,我们甚至可以使用更高的最大学习率,即在根据 Learning Rate Finder 得到的图中,更接近曲线最低点。这种训练会相对更加危险,因为损失可能会骗你太远,以至于出现严重的偏差;这时,在采用更低的学习率前,可以尝试使用更长的 cycle:更长的预热过程应该会有所帮助。

上图中,在 0 ~ 22.5 个 epoch 中,学习率从 0.15 增加到 3;在 22.5~45 个 epoch 中降回到 0.15,在最后的几次 epoch 中,学习率降低到 0.15 的百分之一。通过使用这些非常高的学习率,学习完成得更快,同时也防止了过拟合。训练误差和验证误差之间的差距一直保持在很低的水平,直到学习率接近为 0。通过使用 1cycle 策略,可以仅仅经过 50 次 epoch,就在 cifar10 上训练出一个准确率 92.3% 的 resnet-56;我们可以利用包含 70 个 epoch 的 cycle 得到 93% 的准确率。

作为对比,下图展示了使用更小的 cycle 以及更长收敛阶段的结果:

在这里,学习率变化的两个步骤在 42 个 epoch 中结束,剩下的训练过程中使用缓慢递减的学习率。这时验证误差不再下降,进而出现了越来越严重的过拟合现象,同时,准确率基本没有提升。

周期性动量

Leslie 在实验中还发现,在增大学习率的同时降低动量,可以得到更好的训练结果。这也印证了一个直觉:在训练中,我们希望 SGD 可以迅速调整到搜索平坦区域的方向上,因此就应该对新的梯度赋予更大的权重。Leslie 建议,在真实场景中,可以选取如 0.85 和 0.95 的两个值,在增大学习率的时候,将动量从 0.95 降到 0.85,在降低学习率的时候,再将动量重新从 0.85 提升回 0.95。

据 Leslie 表示,使用根据完整训练选取的最优动量,也可以得到相同的最终结果;但使用周期性动量时,我们不需要浪费时间去设立多个动量参数,然后进行多次完整训练来寻找最优值。

虽然使用周期性动量确实能得到稍好的训练结果,但我并没有复现出 Leslie 论文中使用常动量值和使用周期性动量时的差异。

其他参数的影响

在训练中,调节模型其他超参数的方式也会影响最优学习率。因此在使用 Learning Rate Finder 时,一定要保证训练是在相同条件下完成的。例:不同的 batch 大小或权重衰减对结果的影响如下。

可以利用这个性质来设置一些超参数,如去做那种衰减率:Leslie 建议,可以在几组权重衰减率上运行 Learning Rate Finder,在能够接受使用高最大学习率进行训练的结果中,选择最大的一个。我们实验中选择的是 10^-4。

Leslie 认为,在内存可接受范围内,batch 越大越好。而其他可能包含的超参数(如 drop-out)则可以通过和权重衰减相同的方法来调节,或者直接根据一次 cycle 的结果来判断效果。但无论如何——尤其是当你决定采用一个接近最大可能值的激进学习率时——一定要记住重跑 Learning Rate Finder。

高学习率的 1cycle 策略本身就是一种正则方法,所以在使用 1cycle 时,自然需要减少一些其他形式的常用正则项。但同它们相比,1cycle 的效率相对更高,因为在相当长的训练中,我们都使用了高学习率。

论文:A disciplined approach to neural network hyper-parameters: Part 1 -- learning rate, batch size, momentum, and weight decay

论文地址:https://arxiv.org/abs/1803.09820

摘要:尽管近年以来,深度学习已经在图像、语音、视频处理的应用场景中取得了令人瞩目的成功,但绝大部分训练所使用的超参数都是非最优的,因此不必要的延长了训练时间。时至今日,超参数设置依然像一种魔法,需要依赖多年经验来完成。本文提出了一些设置超参数的高效方法,可以显著减少所需的训练时间,并提升模型的表现效果。具体而言,本文展示了如何检测出训练在验证/测试损失函数上轻微的欠拟合或过拟合,并给出了逼近最优平衡点的指导建议。在接下来的部分,本文讨论了如何通过增加/减少学习率/动量来加速训练过程。试验结果表明,在每个数据集和架构上平衡正则的各个方面极其重要。我们以权重衰减作为正则项为例,展示了其最优值和学习率及动量间的紧密联系。

原文地址:https://sgugger.github.io/the-1cycle-policy.html

本文为机器之心编译,转载请联系本公众号获得授权。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器之心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
周期性学习率(Cyclical Learning Rate)技术[通俗易懂]
学习率(learning_rate, LR)是神经网络训练过程中最重要的超参数之一,它对于快速、高效地训练神经网络至关重要。简单来说,LR决定了我们当前的权重参数朝着降低损失的方向上改变多少。
全栈程序员站长
2022/08/30
1.6K0
周期性学习率(Cyclical Learning Rate)技术[通俗易懂]
入门 | 理解深度学习中的学习率及多种选择策略
选自TowardsDataScience 作者:Hafidz Zulkifli 机器之心编译 参与:李诗萌、蒋思源 学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。相
机器之心
2018/05/10
1.1K0
当前训练神经网络最快的方式:AdamW优化算法+超级收敛
Adam 优化器之旅可以说是过山车(roller-coaster)式的。该优化器于 2014 年推出,本质上是一个出于直觉的简单想法:既然我们明确地知道某些参数需要移动得更快、更远,那么为什么每个参数还要遵循相同的学习率?因为最近梯度的平方告诉我们每一个权重可以得到多少信号,所以我们可以除以这个,以确保即使是最迟钝的权重也有机会发光。Adam 接受了这个想法,在过程中加入了标准方法,就这样产生了 Adam 优化器(稍加调整以避免早期批次出现偏差)!
机器之心
2018/07/26
1.6K0
当前训练神经网络最快的方式:AdamW优化算法+超级收敛
机器学习算法如何调参?这里有一份神经网络学习速率设置指南
作者:Jeremy Jordan 机器之心编译 参与:黄小天、许迪 每个机器学习的研究者都会面临调参过程的考验,而在调参过程中,学习速率(learning rate)的调整则又是非常重要的一部分。学习速率代表了神经网络中随时间推移,信息累积的速度。在理想情况下,我们会以很大的学习速率开始,逐渐减小速度,直至损失值不再发散。不过,说来容易做来难,本文作者对学习速率的调整思路进行了简要介绍,希望能够对你有所帮助。 在之前的文章里,我已经讲了如何用反向传播和梯度下降来训练神经网络。为了训练神经网络,其中一个需要设
机器之心
2018/05/09
1.9K0
机器学习算法如何调参?这里有一份神经网络学习速率设置指南
解读技术 |学习率及其如何改善深度学习算法
本文的内容基于fast.in的工作人员撰写的文章[1]~[3]、[5],并在其基础上提炼了其中的主要内容。如果您想了解更多,请参考原文。
用户7623498
2020/08/04
1.2K0
解读技术 |学习率及其如何改善深度学习算法
PyTorch深度学习模型训练加速指南2021
简要介绍在PyTorch中加速深度学习模型训练的一些最小改动、影响最大的方法。我既喜欢效率又喜欢ML,所以我想我也可以把它写下来。
AI算法与图像处理
2021/01/20
1.4K0
PyTorch深度学习模型训练加速指南2021
自适应学习率调度器了解一下?
训练神经网络受到几个问题的困扰。这些问题包括梯度消失、梯度爆炸 [7,3] 和过拟合。包括不同激活函数 [14,17]、批归一化 [12]、新颖的初始化方案 [9] 以及 Dropout[26] 在内的多种进展都为这些问题提供了解决方案。
机器之心
2019/03/12
7080
自适应学习率调度器了解一下?
自 Adam 出现以来,深度学习优化器发生了什么变化?
如果将 Adam 优化出现以来产生的关于优化过程的有趣想法按时间顺序排列的话,结果如下:
机器之心
2018/12/25
9560
自 Adam 出现以来,深度学习优化器发生了什么变化?
深度学习中的网络优化与正则化
最近参加面试时被问到了神经网络优化方面的问题,由于平时没有好好总结,导致直接拉胯。这篇文章对当前神经网络训练中的常见优化方法进行了比较全面的总结,文章的大部分内容均来自邱锡鹏老师的《神经网络与深度学习》[1] ,部分地方加入了自己的理解。整篇文章的思维导图如下:
口仆
2020/08/14
8250
PyTorch中学习率调度器可视化介绍
神经网络有许多影响模型性能的超参数。一个最基本的超参数是学习率(LR),它决定了在训练步骤之间模型权重的变化程度。在最简单的情况下,LR值是0到1之间的固定值。
deephub
2023/02/01
1.2K0
CS231n:6 训练神经网络(三)
梯度检验就是将解析法(也就是用导数公式求解梯度)计算的梯度与用数值法(也就是通过导数定义求解梯度)计算的梯度进行对比,以检验解析法公式的正确性。因为数值法是通过导数定义进行求解,当步长 h 设置的足够小时,就可以求得较为精确的梯度值,准确性较高,但是存在求解速度慢的缺点。相反,解析法直接按照给定的公式计算梯度就可以了,但是当问题比较复杂时,公式往往难以求出,而且容易出错。于是,就有了梯度检验这个过程了。
Here_SDUT
2022/08/08
6400
CS231n:6 训练神经网络(三)
《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(下)
训练一个非常大的深度神经网络可能会非常缓慢。 到目前为止,我们已经看到了四种加速训练的方法(并且达到更好的解决方案):对连接权重应用良好的初始化策略,使用良好的激活函数,使用批量规范化以及重用预训练网络的部分。 另一个巨大的速度提升来自使用比普通渐变下降优化器更快的优化器。 在本节中,我们将介绍最流行的:动量优化,Nesterov 加速梯度,AdaGrad,RMSProp,最后是 Adam 优化。
SeanCheney
2020/10/27
1.1K0
《Scikit-Learn与TensorFlow机器学习实用指南》 第11章 训练深度神经网络(下)
深度学习与CV教程(7) | 神经网络训练技巧 (下)
本系列为 斯坦福CS231n 《深度学习与计算机视觉(Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频可以在 这里 查看。更多资料获取方式见文末。
ShowMeAI
2022/06/01
5210
深度学习与CV教程(7) | 神经网络训练技巧 (下)
怎样构建深度学习模型?六步走,时刻小心过拟合 | 入门指南
夏乙 栗子 编译自 Khanna.cc 量子位 报道 | 公众号 QbitAI 想要训练个深度神经网络,也准备好了可以直接用的数据,要从哪里开始上手? 来自美国的Harry Khanna,精心编织了
量子位
2018/07/19
6840
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
深度学习基础入门篇六:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
汀丶人工智能
2023/04/20
4.7K0
深度学习基础入门篇[六]:模型调优,学习率设置(Warm Up、loss自适应衰减等),batch size调优技巧,基于方差放缩初始化方法。
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第11章 训练深度神经网络
第 10 章介绍了人工神经网络,并训练了第一个深度神经网络。 但它非常浅,只有两个隐藏层。 如果你需要解决非常复杂的问题,例如检测高分辨率图像中的数百种类型的对象,该怎么办? 你可能需要训练更深的 DNN,也许有 10 层或更多,每层包含数百个神经元,通过数十万个连接相连。 这可不像公园散步那么简单,可能碰到下面这些问题:
SeanCheney
2019/10/25
1.4K0
《机器学习实战:基于Scikit-Learn、Keras和TensorFlow》第11章 训练深度神经网络
深度学习500问——Chapter14:超参数调整(1)
关于训练深度学习模型最难的事情之一是你要处理的参数的数量。无论是从网络本身的层宽(宽度)、层数(深度)、连接方式,还是损失函数的超参数设计和调试,亦或者是学习率、批样本数量、优化器参数等等。这些大量的参数都会有网络模型最终的有效容限直接或间接的影响。面对如此众多的参数,如果我们要一一对其优化调整,所需的无论是时间、资源都是不切实际的。结果证实一些超参数比其他的更为重要,因此认识各个超参数的作用和其可能会造成的影响是深度学习训练中必不可少的一项重要技能。
JOYCE_Leo16
2024/09/23
1820
【深度学习】一文教你如何确定好的“学习率”
【导读】近日,数据科学家Hafidz Zulkifli发布一篇文章,主要讲解了深度学习中的“学习率”,以及如何利用学习率来提高深度学习模型的性能并减少训练时间。作者从“学习率”入手,逐层抽丝剥茧教我们
WZEARW
2018/04/12
1.8K0
【深度学习】一文教你如何确定好的“学习率”
深度 | 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展
选自Ruder Blog 作者:Sebastian Ruder 机器之心编译 参与:刘晓坤、路雪、蒋思源 Sebastian Ruder 的这篇博客总结了 2017 年深度学习优化算法的最新进展,他主要从Adam算法的局限性与提升方法、学习率衰减方案、超参数搜索、怎样学习优化和理解泛化性能等角度向我们展示近来研究者对最优化方法的思考与探索。 深度学习终究是寻找一个使泛化性能足够好的(损失函数)极小值过程,它并不一定要求能搜索到非凸函数的最小值点,而需要模型的损失能得到显著性地降低,以收敛到一个可接受的极小值
机器之心
2018/05/09
1.3K0
深度 | 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展
深度学习优化策略-从经典算法到前沿创新
今日推荐:用CompletableFuture,品怨种码生,写线上BUG,拿C+绩效
一键难忘
2024/12/03
3050
推荐阅读
相关推荐
周期性学习率(Cyclical Learning Rate)技术[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文