1cycle 深度学习中的学习率调度 SGDR 循环学习率 等方法引见及通常战略钻研

深度学习通常者都知道,在训练神经网络时,正确设置学习率是使模型到达良好功能的关键起因之一。学习率通常会在训练环节中依据某种调度战略进执行态调整。调度战略的选用对训练品质也有很大影响。

大少数通常者驳回一些宽泛经常使用的学习率调度战略,例如阶梯式衰减或余弦退火。这些调度战略中的许多是为特定的基准义务量身定制的,经过多年的钻研,已被证实可以最大限制地提高测试精度。但是这些战略往往无法推行到其余试验设置,这引出了一个关键的疑问:训练神经网络最分歧和最有效的学习率调度战略是什么?

在本文中,咱们将钻研各种用于训练神经网络的学习率调度战略。这些钻研发现了许多既高效又易于经常使用的学习率战略,例如循环学习率或三角形学习率调度。经过钻研这些方法,咱们将得出几个适用的论断,提供一些可以立刻运行于改善神经网络训练的便捷技巧。

神经网络训练与学习率

在监视学习环境中,神经网络训练的指标是生成一个模型,在给定输入数据的状况下,能够准确预测与该数据关系的实在标签。一个典型的例子是训练一个神经网络,依据少量标志的猫和狗的图像数据集,正确预测一张图像中能否蕴含猫或狗。

上图所示的神经网络训练的基本组成局部如下:

通常神经网络在开局训练时,其一切参数都是随机初始化的。为了学习更无心义的参数,神经网络会接受来自数据集的数据样本。关于每个样本,神经网络尝试预测正确的输入,而后优化器降级神经网络的参数以改良这个预测。

这个环节经过降级神经网络的参数,使其能够更好地婚配数据集中已知的输入,这被称为训练。这个环节重复启动,通常直到神经网络屡次遍历整个数据集,每次遍历被称为一个训练周期(epoch)。

虽然这个神经网络训练的形容并不片面,但它应该提供足够的直观了解来成功本文的浏览。上方咱们继续

模型参数在训练环节中由优化器降级。相比之下,超参数是 "额外的" 参数,咱们(深度学习通常者)可以控制。但是,咱们实践上可以用超参数控制什么?一个经常出现的超参数,就是学习率。

便捷地说,每次优化器降级神经网络的参数时,学习率控制这个降级的大小。咱们应该大幅降级参数、小幅降级参数,还是介于两者之间? 咱们经过设置学习率来做出这个选用。

设置学习率是训练神经网络最关键的方面之一。假设咱们选用的值太大,训练就会发散。另一方面,假设学习率太小,或者会造成功能不佳和训练缓慢。咱们必定选用一个足够大的学习率,以提供对训练环节的正则化成果并极速收敛,同时不能太大抵使于训练环节变得不稳固。

像学习率这样的超参数通经常常使用一种便捷的方法网格搜查来选用。基本思绪是:

网格搜查是寻觅最佳超参数的便捷而穷尽的搜查方法。下图是一个在潜在学习率值上启动网格搜查的示例。

经过遵照相似的方法并测试一切或者的超参数值组合,可以将相似的方法运行于多个超参数。

网格搜查在计算上是低效的,由于它须要为每个超参数设置从新训练神经网络。为了防止这种老本,许多深度学习通常者驳回 "猜想和审核" 的方法,在正当的范围内尝试几个超参数,看看什么有效。曾经提出了选用最佳超参数的其余方法[5],但由于其便捷性,网格搜查或猜想和审核环节被宽泛经常使用。

在选用了学习率之后,咱们通常不应在整个训练环节中坚持同一个学习率。相反,咱们应该 (i) 选用一个初始学习率,而后 (ii) 在整个训练环节中逐渐衰减这个学习率[1]。执行这种衰减的函数被称为学习率调度。

人们提出了许多不同的学习率调度战略;例如,阶梯式衰减(即在训练时期将学习率衰减 10 倍几次)或余弦退火;见下图。在本文中,咱们将讨论一些最近提出的体现特意好的调度战略。

基于随机梯度降低(SGD)的神经网络训练选用了一个全局学习率,用于降级一切模型参数。除了 SGD 之外,还提出了自顺应优化技术(例如,RMSProp 或 Adam [6]),它们经常使用训练统计数据来灵活调整用于每个模型参数的学习率。本文中概述的大局部结果同时适用于自顺应优化器和 SGD 格调的优化器。

在这一节中,咱们将看到一些学习率调度战略的例子。这些战略包括循环学习率或三角形学习率,以及不同的学习率衰减方案。最佳学习率战略高度依赖于畛域和试验设置,但咱们也将看到经过钻研许多不同窗习率战略的实证结果,可以得出几个上档次的论断。

用于训练神经网络的循环学习率[1]

[1]中的作者提出了一种处置神经网络训练中学习率的新方法:依据平滑的调度,在最小值和最大值之间循环变动学习率。在这项上班之前,大少数通常者驳回了一种盛行的战略,即 (i) 将学习率设置为一个初始较大的值,而后 (ii) 随着训练的启动逐渐衰减学习率。

在[1]中放弃了这个阅历规律,转而驳回循环战略。以这种形式循环学习率有点违犯直觉 —— 在训练环节中加退学习率会侵害模型功能。虽然在学习率参与时临时降低了网络功能,但正如咱们将在[1]中看到的,循环学习率调度实践上在整个训练环节中提供了很多优于其余方法的好处。

循环学习率引入了三个新的超参数:步长、最小学习率和最大学习率。发生的调度是 "三角形" 的,这象征着学习率在相邻的周期中交替参与和缩小;步长可以设置在 2-10 个训练周期之间,而学习率的范围通常经过学习率范围测试来确定(见[1]中的第 3.3 节)。

加退学习率会临时降低模型功能。但是一旦学习率再次衰减,模型的功能就会复原并提高。思索到这一点,在[1]的试验结果中看到,用循环学习率训练的模型在功能上出现出周期性形式。每个周期完结时(即当学习率衰减回最小值时),模型功能到达峰值,而在周期的两边阶段(即当学习率参与时),模型功能则变得较差;见下图。

[1]中的结果标明,循环学习率在训练环节中无利于模型功能。与其余学习率战略相比,经常使用循环学习率训练的模型更快地到达更高的功能水平;换句话说,经常使用循环学习率训练的模型在任何时期点的功能都十分好!

在 ImageNet 上启动的更大规模试验中,循环学习率依然提供了好处,虽然不那么清楚。

SGDR: 带有热重启的随机梯度降低[2]

[2]中的作者提出了一种便捷的学习率重启技术,称为带有重启的随机梯度降低(SGDR),其中学习率活期重置为其原始值并按方案减小。这种技术驳回以下步骤:

上方是遵照这一战略的不同调度的形容。

咱们可以留意到上方调度的一些特点。首先,在[2]中总是经常使用余弦衰减调度(图的 y 轴是对数刻度)。此外,随着训练的启动,每个衰减调度的长度或者会参与。详细来说,[2]中的作者将第一个衰减周期的长度定义为 T_0,而后在每个延续的衰减周期中将这个长度乘以 T_mult;见下图的形容。

为了遵照[1]的术语,SGDR 的步长或者在每个周期后参与。但与[1]不同的是,SGDR 不是三角形的(即每个周期只是衰减学习率)。

在 CIFAR10/100 上的试验中可以看到,与阶梯式衰减调度相比,SGDR 学习率调度可以更快地取得良好的模型功能 —— SGDR 具备良好的恣意时期功能。每个衰减周期后失掉的模型体现良好,并在延续的衰减周期中继续变得更好。

在这些初步结果之外,钻研经过在每个衰减周期完结时失掉 "快照" 而构成的模型集成。详细来说可以在SGDR 调度中的每个衰减周期后保留模型形态的正本。而后在训练成功后,在推理时平均每个模型的预测,构成一个模型集成。

经过以这种形式构成模型集成,可以在 CIFAR10 上清楚降低测试失误率;见下图。

此外,SGDR 的快照仿佛提供了一组具备不同预测的模型。以这种形式构成集成实践上优于将独立的、齐全训练的模型参与集成的惯例方法。

超融合:经常使用大学习率十分极速地训练神经网络[3]

[3]中的作者钻研了一种幽默的训练神经网络的方法,可以将训练速度提高一个数量级。基本方法(最后在[8]中概述)是执行单个三角形学习率周期,其中最大学习率较大,而后在训练完结时准许学习率衰减到该周期的最小值以下;见下图的说明。

此外动量以与学习率相反的方向循环(通常在[0.85, 0.95]的范围内)。这种联结循环学习率和动量的方法被称为 "1cycle"。[3]中的作者标明,它可以用来成功 "超融合"(即十分极速地收敛到高功能解)。

例如在 CIFAR10 上的试验中看到,与基线学习率战略相比,1cycle 可以用少 8 倍的训练迭代次数成功更好的功能。经常使用不同的 1cycle 步长可以进一步减速训练,虽然准确率水平取决于步长。

可以在一些不同的架构和数据集上观察到相似的结果。其中 1cycle 再次在令人惊讶的大批训练周期中发生良好的功能。

目前还不清楚超融合能否可以在少量的试验设置中成功,由于[3]中提供的试验在规模和种类上都有些有限。虽然如此,咱们或者都会赞同,超融合现象十分幽默。理想上,这个结果是如此幽默,以致于它甚至被 fast.ai 社区推行和深化钻研。

REX:从新扫视带有改良调度的预算训练[4]

在[4]中,作者思索了在不同预算制度(即小、中、大训练周期数)下正确调度学习率的疑问。你或者会想:为什么要思索这种设置?通常状况下,最佳训练周期数并不是事前知道的。但咱们或者正在经常使用一个固定的资金预算,这会限制可以执行的训练周期数。

为了找到最佳的预算无法知学习率调度,咱们必定首先定义将要思索的或者学习率调度的空间。在[4]中,经过将学习率调度分解为两个组成局部来成功这一点:

这样的分解可以用来形容简直一切固定结构的学习率调度。上方形容了不同轮廓和采样率组合。采样率越高,调度越凑近基础轮廓。

[4]中的作者思索了具备不同采样率和三种函数轮廓的学习率调度:指数(即发生阶梯式调度)、线性和 REX(即[4]中定义的陈腐轮廓)。

作者在 CIFAR10 上训练 Resnet20/38,驳回不同的采样率和轮廓组合。在这些试验中可以看到阶梯式衰减调度(即具备低采样率的指数轮廓)只要在低采样率和许多训练周期的状况下才体现良好。每次迭代采样的 REX 调度在一切不同的周期设置中都体现良好。

之前的上班标明,线性衰减调度最适宜低预算训练设置(即用更少的周期启动训练)[9]。在[4]中,咱们可以看到 REX 实践上是一个更好的选用,由于它防止了在训练的早期过早地衰减学习率。

[4]中的作者还思索了各种盛行的学习率调度,如下图所示。

在各种畛域和训练周期预算下测试了这些调度。当在一切试验中汇总功能时,咱们失掉如下所示的结果。

REX 在不同的预算制度和试验畛域中成功了令人震惊的分歧功能。没有其余学习率调度在试验中凑近相正比例的前 1/3 名次,这标明 REX 是一个良好的畛域/预算无法知的学习率调度。

除了 REX 的分歧性之外,这些结果还通知咱们一些更普遍的物品:罕用的学习率战略在不同的试验设置中泛化才干不好。每个调度(即使是 REX,虽然水平较小)只在少数状况下体现最好,这标明为任何特定设置选用适当的学习率战略十分关键。

正确处置学习率可以说是训练神经网络最关键的方面。在本文中,咱们了解了几种用于训练深度网络的适用学习率调度战略。钻研这一系列上班提供了便捷易懂、易于实施且高效的论断。其中一些基本论断如下。

正确设置学习率是训练高功能神经网络最关键的方面之一。选用不当的初始学习率或经常使用失误的学习率调度会清楚好转模型功能。

"自动"调度并非总是最好的。 许多试验设置都有一个 "自动" 学习率调度,咱们偏差于在没有太多思索的状况下驳回;例如,用于图像分类的 CNN 训练的阶梯式衰减调度。但咱们也应该看法到,随着试验设置的扭转,这些调度的功能或者会急剧好转;例如,关于预算设置,基于 REX 的调度清楚优于阶梯式衰减。咱们应该一直关注咱们选用的学习率调度,以真正最大化咱们模型的功能。

循环或三角形学习率调度(例如,如[2]或[3]中所示)十分有用,由于:

经常使用循环学习率战略,模型在每个衰减周期完结时到达最佳功能。咱们可以便捷地继续训练恣意数量的周期,直到咱们对网络的功能感到满意。最佳训练量不须要事前知道,这在通常中通常很有用。

虽然学习率战略曾经被宽泛钻研,但仿佛仍有更多的物品有待发现。例如,咱们曾经看到,驳回代替衰减轮廓无利于预算设置[4],循环战略甚至可以在某些状况下用于成功超融合[3]。但是疑问也随之而来:还能发现什么? 仿佛有一些十分幽默的战略(例如,分形学习率[7])尚未被探求。

您可能还会对下面的文章感兴趣: