学习fastai中一直对fit_one_cycle有一些不懂,今天在学习中明白了其中道理。
fit_one_cycle在训练中,先使用较大的学习率,在逐步减小学习率。
首先,在学习的过程中逐步增大学习率目的是为了不至于陷入局部最小值,边学习边计算loss。
其次,当loss曲线向上扬即变大的时候,开始减小学习率,慢慢的趋近梯度最小值,loss也会慢慢减小。就如下图:
注:图为课程中的图,我借鉴来解释。
该图x轴为迭代次数,y轴为学习率
该图x轴为迭代次数,y轴为loss
结合两个图可以看出:
- 学习率首先逐渐变大,loss逐渐变小
- 当学习率达到训练时给的参数时,开始下降。
- 随着学习率不断降低,loss也开始降低。
这个算法被称为:learning rate annealing(学习率退火算法)。
在实际应用中,举个例子:
learn.fit_one_cycle(4, max_lr=slice(1e-2))
参数1:为epoch
参数2:为最大学习率,也就是学习率一开始会慢慢增加到指定的最大学习率,然后开始减小。