學習fastai中一直對fit_one_cycle有一些不懂,今天在學習中明白了其中道理。
fit_one_cycle在訓練中,先使用較大的學習率,在逐漸減國小習率。
首先,在學習的過程中逐漸增大學習率目的是為了不至于陷入局部最小值,邊學習邊計算loss。
其次,當loss曲線向上揚即變大的時候,開始減國小習率,慢慢的趨近梯度最小值,loss也會慢慢減小。就如下圖:
注:圖為課程中的圖,我借鑒來解釋。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9EVWuZkMaBHcYRGM5cVWwh2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzATO5MDNyUTMyIjMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
該圖x軸為疊代次數,y軸為學習率
該圖x軸為疊代次數,y軸為loss
結合兩個圖可以看出:
- 學習率首先逐漸變大,loss逐漸變小
- 當學習率達到訓練時給的參數時,開始下降。
- 随着學習率不斷降低,loss也開始降低。
這個算法被稱為:learning rate annealing(學習率退火算法)。
在實際應用中,舉個例子:
learn.fit_one_cycle(4, max_lr=slice(1e-2))
參數1:為epoch
參數2:為最大學習率,也就是學習率一開始會慢慢增加到指定的最大學習率,然後開始減小。