传统学习率策略:
之前的学习率调整策略可以分为两种,分别是逐渐衰减策略和自适应调整策略。常用的逐渐衰减策略包括阶梯式地衰减(step learning rate decay)和指数衰减(expotianally learning rate decay)策略
阶梯式衰减的例子:初始学习率为0.01,在训练分别执行到50、90和120周期数时将学习率减少为原来的1/10(乘以0.1)。指数衰减就是每个周期都将学习率减少一点,比如减少到原来的0.9。 具有代表性的自适应调整策略便是Ada系列的优化算法(Adagrad、Adadelta、Adam等),这些优化算法一般都包含对初始学习率进行自适应地调整,而且每个可学习参数具有独立的学习率,不像逐渐衰减策略一样,每个参数使用的是公共的全局学习率。
以上两种策略具有一个共同的特点:学习率都是逐渐减小的,其实这么做是有原因的,因为研究社区对神经网络模型的研究认为,随着学习的进行,模型不断接近极值点,这时如果学习率太大的话会造成模型越过极值点或者发散。但是,随着对神经网络参数空间的不断理解,研究者们发现,模型参数空间中存在的大多是鞍点或者表现较差的极小值点,前者会严重影响模型的学习效率,后者会使得模型的最终表现很差。
Cyclical Learning Rates:
训练时偶尔增大学习率(不是持续减少),虽然短期内会造成模型性能表现较差,但是最终训练结果在测试集上表现却比传统的逐渐衰减策略更好。因为这样会让模型以更快的(更大的学习率)速度逃离鞍点,从而加速模型收敛。而且,如果模型收敛到了半径较窄的吸引盆区域的极值点区域(泛化能力差),那么突然增大学习率也可以让模型跳出该极值点区域,从到收敛到不易跳出的较宽的(泛化能力强)吸引盆区域的极值点。
CLR实现
CLR的实现很简单,而且很容易集成到目前的大部分模型中,而且不会引入没有额外的计算负担:
- 首先确定学习率的上下界(即基础(最小)学习率和最大学习率)、一个循环的步长数(即占用多少个训练step)和学习率增减方式;
- 根据增加方式以循环步长的1/2的(step size)在每步训练结束后增加学习率直到达到最大学习率,然后根据减少方式以剩余的1/2周期步长数(step size)在每步训练结束后减少学习率直到最小学习率;
- 重复步骤2直到训练结束,下图2为CLR方法的直观表示,其使用了三角式学习率增减方式(线性增加和线性减少)。
CLR还需要确定三个超参数,一个是学习率上下界,另一个是一个循环步长。?
确定学习率边界
论文中提出使用“LR Range test”的方法确定学习率上下界:先预定义一个较大范围的学习率区间(如[0,2.0]),将模型训练一些周期,训练的每个周期(epoch)从学习率区间的下限线性增加学习率,直到区间上限,然后会得到一个学习率与训练集精度的曲线图(如下图),在该图中选择精度稳定增长的学习率范围作为CLR的学习率上下界(如从图中可以确定的上下界分别为0.001和0.006)。或者根据经验确定区间:学习率上界一般是使模型收敛的最大学习率的2倍,学习率下界一般是上界的1/4到1/3。
确定循环步长
作者指出模型的精度其实对循环的步长数是比较鲁棒的,根据他们的实验,循环的步长数一般为一个周期步长数的2~7倍,也就是说一个学习率调整(增和减)循环周期会跨越2到7个训练周期。注意:最好在循环结束时停止训练,此时学习率最小,准确率最高
?
|