循环学习率CLR——Cyclical Learning Rates
目录
一、介绍
二、原理
2.1 如何估算周期长度?
2.2 如何估计合理的最小和最大边界值?
学习率是训练深度神经网络时的重要超参数,本贴介绍了一种设置学习率的方法——循环学习率。它消除了通过实验找到全局学习率最佳值的需要,让学习率在合理的边界值之间循环变化。使用循环学习率可以提高分类精度,通常迭代次数更少。
一、介绍
论文标题:《Cyclical Learning Rates for Training Neural Networks》
期刊:2017 IEEE Winter Conference on Applications of Computer Vision (WACV)
会议时间: 24-31 March 2017
下载地址:Cyclical Learning Rates for Training Neural Networks | IEEE Conference Publication | IEEE Xplore
代码地址:https://github.com/bckenstler/CLR
学习率设置的过大,模型可能很难收敛;如果设置的过小,则参数更新较慢,模型训练速度慢,需要更多轮的迭代才能达到与合理的学习率在更少的迭代轮数上取得相同的效果。
单调下降的学习率的可能弊端:
1.模型以及优化器对初始学习率敏感;
2.初始学习率选择问题:可能需要尝试几十甚至几百次的试验来选定一个较合理的初始值;
3.初始学习率下降时,不能保证模型会收敛到一个局部最小值,可能会收敛在鞍点上。
图1 训练CIFAR-10时的分类准确性。红色曲线显示了使用新学习率策略之一进行训练的结果。
图1显示了训练期间CIFAR-10数据集的测试数据分类准确性。经过70000次操作后,基线(蓝色曲线)的最终准确率达到81.4%。相比之下,可以在25000次迭代内使用CLR方法(红色曲线)来完全训练网络,并达到相同的精度。在训练过程中改变学习率总体上是有益的,因此建议让全局学习率在一个值带内循环变化,而不是将其设置为固定值。此外,这种循环学习率(CLR)方法实际上消除了调整学习率的需要,同时实现了接近最佳的分类精度。此外,与自适应学习率不同,CLR方法基本上不需要额外的计算。
二、原理
自适应学习率:可以依靠局部自适应学习率来代替全局学习率实验,但这样会产生巨大的计算成本。但CLR不具备这种计算成本。自适应学习率与CLR策略有着根本的不同,CLR可以与自适应学习率相结合。
循环学习率:本质是提高学习率可能会产生短期的负面影响,但也会产生长期的有益影响,让学习率在一定范围内变化,而不是采用逐步固定或随指数递减的值。通过设置最小和最大边界,让学习率在这些边界之间循环变化。如图2所示,称为triangular角学习率策略(直线增加然后直线减少)。
图2 triangular学习率策略,蓝线表示在边界之间变化的值,输入参数步长是半个周期内的迭代次数。
CLR方法工作原理:将损失最小化的困难来自鞍点,而不是局部最小值。鞍点具有较小的梯度,会减缓学习过程;提高学习率可以更快速地穿越鞍点。
图1中的红色曲线显示了CIFAR-10上triangular策略的结果。用于创建红色曲线的设置是最小学习率0.001(如原始参数文件中所示)和最大学习率0.006。此外,循环长度(即学习率恢复到初始值之前的迭代次数)设置为4000次迭代(即步长=2000),图1显示精度在每个循环结束时达到峰值。
新学习率策略代码:
local cycle = math.floor(1+epochCounter/(2*stepsize))
local x = math.abs(epochCounter/stepsize-2*cycle+1)
local lr = opt.LR + (maxLR-opt.LR)*math.max(0, (1-x))
其中,opt.LR是指定的较低(即base_lr)学习率,epochCounter是训练的epochs次数,lr是当前用于迭代的学习率。该策略名为triangular,如上所述,定义了两个新的输入参数:stepsize(周期或循环长度的一半)和max_lr(最大学习率边界)。该代码在最小值(base_lr)和最大值(max_lr)之间线性地改变学习率。
除了三角政策(Triangular policy)外,还有两个CLR政策:
- triangular2:除了在每个周期结束时将学习率差异减半外,与三角策略相同。这意味着学习率差异在每个周期后都会下降。
- exp_range:学习率在最小和最大边界之间变化,每个边界值都以
的指数因子下降。
2.1 如何估算周期长度?
循环的长度和输入参数步长可以很容易地根据一个epoch中的迭代次数计算出来。通过将训练图像的数量除以所使用的batchsize来计算epoch。例如,CIFAR-10有50000个训练图像,batchsize为100,因此epoch=50000/100=500次迭代。实验表明,将stepsize设置为一个epoch迭代次数的2-10倍通常是好的。例如,在CIFAR-10训练运行中设置stepsize=8 epoch(如图1所示)会比设置stepsize=2 epoch获得更好的结果。用至少3个周期替换恒定学习率的每一步,可以在很大程度上训练网络权重,运行4个或更多周期将获得更好的性能。此外,最好在循环结束时停止训练,此时学习率达到最小值,精度达到峰值。
2.2 如何估计合理的最小和最大边界值?
可以通过对网络进行几个迭代周期的一次训练来估计合理的最小和最大边界值。这是一次“LR范围测试”;运行模型几个周期,同时让学习率在低LR值和高LR值之间线性增加。
图3 分类精度随8个历元学习率的增加而变化(LR范围检验)
triangular学习率策略提供了一种简单的机制。例如,在Caffe中,将base_lr设置为最小值,将max_lr设置成最大值。将步长和最大迭代次数设置为相同的迭代次数。在这种情况下,学习率将在短期内从最小值线性增加到最大值。接下来,绘制准确性与学习率的关系图。注意精度开始迅速提高的临界点以及精度减慢、发生波动时临界值。此时,将base_lr设置为第一个值,将max_lr设置为后一个值。或者,可以使用经验法则,即最佳学习率通常在收敛的最大学习率的两倍以内,并将base_lr设置为max_lr的或
。
图3显示了使用Caffe提供的架构和超参数,使用CIFAR-10数据集进行此类运行的示例。从图3可以看出,模型立即开始收敛,因此设置基数lr=0.001是合理的。此外,当学习率超过0.006时,精度上升会变得粗糙,最终开始下降,因此设置max_lr=0.006是合理的。