Cyclic Learning rate和SGDR-学习率调整策略论文两篇

概述

之前的学习率调整策略可以分为两种,分别是逐渐衰减策略和自适应调整策略。常用的逐渐衰减策略包括阶梯式地衰减(step learning rate decay)和指数衰减(expotianally learning rate decay)策略。阶梯式衰减的例子:初始学习率为0.01,在训练分别执行到50、90和120周期数时将学习率减少为原来的1/10(乘以0.1)。指数衰减就是每个周期都将学习率减少一点,比如减少到原来的0.9。 具有代表性的自适应调整策略便是Ada系列的优化算法(Adagrad、Adadelta、Adam等),这些优化算法一般都包含对初始学习率进行自适应地调整,而且每个可学习参数具有独立的学习率,不像逐渐衰减策略一样,每个参数使用的是公共的全局学习率。除了以上策略,还有其他一些策略同样包含在Pytorch库中,请自行参考。以上两种策略具有一个共同的特点:学习率都是逐渐减小的,其实这么做是有原因的,因为研究社区对神经网络模型的研究认为,随着学习的进行,模型不断接近极值点,这时如果学习率太大的话会造成模型越过极值点或者发散。但是,随着对神经网络参数空间的不断理解,研究者们发现,模型参数空间中存在的大多是鞍点或者表现较差的极小值点,前者会严重影响模型的学习效率,后者会使得模型的最终表现很差。另外,模型应该收敛到参数空间中半径较宽广(broad)区域(吸引盆,basin of attraction)的极值点,这样的点泛化能力较强[1]。

基于以上问题,CLR(Cyclical Learning Rates)[2]和SGDR( Stochastic Gradient Descent with warm Restarts)[3]的作者根据以前的研究发现,训练时偶尔增大学习率(不是持续减少),虽然短期内会造成模型性能表现较差,但是最终训练结果在测试集上表现却比传统的逐渐衰减策略更好。因为这样会让模型以更快的(更大的学习率)速度逃离鞍点,从而加速模型收敛。而且,如果模型收敛到了半径较窄的吸引盆区域的极值点区域(泛化能力差),那么突然增大学习率也可以让模型跳出该极值点区域,从到收敛到不易跳出的较宽的(泛化能力强)吸引盆区域的极值点。另外,这些方法都是与SGD结合使用的,由于目前没有一个广泛被验证的表现比SGD好的自适应优化算法,所以最终的表现应该也是比自适应算法的效果好。CLR和SGDR虽然在学习率的调整上存在些微不同,但是它们有着更大的共同点:周期性以某种方式增大当前学习率到(提前设定的)最大学习率(max lr),并以另外的方式逐渐减小学习率直到(提前设定的)最小学习率。所以我将这两篇论文放在一起总结。

为了突出CLR和SGDR不同于以往的学习率策略,我们将它们归纳为新的学习率策略类别:周期性重启学习率调整策略。两篇论文都用试验说明了周期性地增加学习率对于模型最终的性能是有帮助的。它们的共同点似乎也可以说明,具体地学习率增加和减小策略其实对模型性能的提升贡献并不大,主要的贡献来自学习率的短期增加(两篇论文中都提到多种学习率增减策略)。对比具体两个方法增加学习率的方式,可以将SGDR称为hard restart,因为每次循环开始时学习率都是断崖式增加的,相反,CLR应该称为soft restart。

方法

CLR

CLR实现

CLR的实现很简单,而且很容易集成到目前的大部分模型中,而且不会引入没有额外的计算负担:

  1. 首先确定学习率的上下界(即基础(最小)学习率和最大学习率)、一个循环的步长数(即占用多少个训练step)和学习率增减方式;
  2. 根据增加方式以循环步长的1/2的(step size)在每步训练结束后增加学习率直到达到最大学习率,然后根据减少方式以剩余的1/2周期步长数(step size)在每步训练结束后减少学习率直到最小学习率;
  3. 重复步骤2直到训练结束,下图2为CLR方法的直观表示,其使用了三角式学习率增减方式(线性增加和线性减少)。论文中还给出了CLR的Pytorch实现。
Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第1张图片

从上面的CLR的实现看出,除了确定学习率增减策略外,CLR还需要确定三个超参数,一个是学习率上下界,另一个是一个循环步长。

确定学习率边界

论文中提出使用“LR Range test”的方法确定学习率上下界:先预定义一个较大范围的学习率区间(如[0,2.0]),将模型训练一些周期,训练的每个周期(epoch)从学习率区间的下限线性增加学习率,直到区间上限,然后会得到一个学习率与训练集精度的曲线图(如下图),在该图中选择精度稳定增长的学习率范围作为CLR的学习率上下界(如从图中可以确定的上下界分别为0.001和0.006)。或者根据经验确定区间:学习率上界一般是使模型收敛的最大学习率的2倍,学习率下界一般是上界的1/4到1/3。

Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第2张图片

确定循环步长

作者指出模型的精度其实对循环的步长数是比较鲁棒的,根据他们的实验,循环的步长数一般为一个周期步长数的2~7倍,也就是说一个学习率调整(增和减)循环周期会跨越2到7个训练周期。注意:最好在循环结束时停止训练,此时学习率最小,准确率最高,这一点在SGDR的论文中也有提及。

SGDR

SGDR实现

SGDR其实在论文中并没有以概述提到的问题为切入点来引出SGDR,而是从warm restart在非梯度优化算法中的应用获得灵感,将其应用在梯度优化算法中。SGDR的学习率调整策略:

  1. 先确定学习率的上下界和循环周期步长(作者没有在论文中给出具体确定上下界和循环周期步长方法,只是给出了这些超参数的不同值的组合试验结果,而且论文中也尝试了将循环周期步长设置为动态增长的试验);
  2. 根据下面的公式,使用最大学习率以循环周期步长(step size)在每步训练结束后减少学习率直到最小学习率,然后将学习率恢复到最大学习率;
Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第3张图片
  1. 重复步骤2直到训练结束,下图为上述以及论文提到的多种学习率调整策略。
Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第4张图片

实验效果

CLR

作者的实验还是比较全面的,使用了不同的模型在不同的数据集上进行了实验,基本上都会有提升,而且模型拟合速度也加快很多。

Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第5张图片
Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第6张图片

另外,作者还将CLR与其他的自适应学习率调整算法进行结合实验,实验表明并没有显著的提升,部分结合还出现了微降,这说明CLR不适合与其他的自适应学习率调整算法结合使用。

Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第7张图片

SGDR

作者在CIFAR-10和CIFAR-100做了对比试验:

Cyclic Learning rate和SGDR-学习率调整策略论文两篇_第8张图片

参考文献

[1] Averaging weights leads to wider optima and better generalization

[2] Cyclical Learning Rates for Training Neural Networks

[3] SGDR: STOCHASTIC GRADIENT DESCENT WITH WARM RESTARTS

你可能感兴趣的:(Cyclic Learning rate和SGDR-学习率调整策略论文两篇)