學習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:爲最大學習率,也就是學習率一開始會慢慢增加到指定的最大學習率,然後開始減小。