学习率调整CLR
作者:互联网
三种 Cyclical Learning Rate (CLR)
周期性学习率遵从从小到大再从大到小,然后又是从小到大再从大到小,如此这般循环下去。
1个Cycle定义为从小到大再从大到小的变化。1个Cycle由两个step_size组成,见下图1:
对于CLR,需要设定一个最大的学习率(max_lr) 和一个最小的学习率(base_lr), 整个学习率在训练期间会在这两个限定值之间来回振荡。
按照振荡的方式不同,这里介绍三种CLR。
1.第一种CLR命名为"triangular",每一个Cycle的max_lr是不变的,也即为图1所示情况。
2.第二种CLR命名为"triangular2",每一个Cycle的max_lr会逐渐减半,如下图2所示。
3.第三种CLR命名为"exp_range",每一个Cycle的max_lr随着Cycle指数下降,如下图3所示。
对于第一种Triangular型周期性学习率,由于即便到了训练的末期,其学习率仍然可以达到最大或者比较大的一个值,
因此就有可能会使得原本已经训练到了最优的模型又跳出最优点位置,使得模型的训练结果变得不太稳定。
因此后面的trainglar2 和 exp_rangle两种类型的周期性学习率可以保证避免这种不稳定性问题。
1. batch_size: 每一批同时输入模型进行前向和反向传播的数据量;
2. iteration: 表示每一轮(epoch)中,参数更新的次数,它等于 “总的样本数/batch_size”(向上取整)。
学习率在每一个iteration都是变化的。不要把它理解为在某一段iterations区间它是不变的,进入下一个区间它才变化。
3. Cycle: 它表示学习率从base_lr增大到max_lr,再从max_lr减少到base_lr所需要的iteration数目。
通常1个Cycle所包含的iteration数目比一轮(epoch)训练所包含的iteration要多。
也就是说,经过几个epoch才完成1个Cycle。
4. step_size: 半个Cycle所需要的iterations, CLR的发明者Leslie Smith建议,1个step_size可以取 (2-8)*training_iterations_in_epoch。
而前面提到的Adrian Rosebrock发现在大部分情形下,取4或者8就足以得到不错的结果。
也就是说通常step_size也要跨越4个或者8个epoch。
比如,num_epochs=96, step_size=8, 那么: 1 cycle = 96/(8*2) = 6 。
也就是说在96轮迭代中,一共有6个学习率调整周期。
个人理解:通常设置的 num_epochs 能够被 2*step_size 整除,这样才能保证最后一个iteration对应的学习率最小,从而保证模型收敛于一个局部最优解。
————————————————
原文链接:https://blog.csdn.net/qwertyu_1234567/article/details/103859465
标签:iteration,学习,调整,step,lr,size,CLR,Cycle 来源: https://www.cnblogs.com/realyuan2022/p/16466731.html