「模型訓練」如何選擇最適合你的學習率變更策略

AIBigbull2050發表於2019-09-16

作者 | 言有三

編輯 | 言有三

如果讓我投票給深度學習中,最不想除錯,但又必須要小心除錯的引數,毫無疑問會投給學習率,今天就來說說這個。

專案背景

我們選擇了GHIM-10k資料集,這是一個影像檢索資料集,包含20個類別,分別是日落,船舶,花卉,建築物,汽車,山脈,昆蟲等自然影像,各個類別擁有較好的多樣性,而類別之間也有比較好的區分度。資料集共10000張影像,每個類別包含500張JPEG格式的大小為400×300或300×400的影像。

如下圖就是其中的煙 花類別。

「模型訓練」如何選擇最適合你的學習率變更策略

定義了一個6層的卷積神經網路,網路結構如下:

「模型訓練」如何選擇最適合你的學習率變更策略

細節我們就不多說,如果你想復現本文結果,可以傳送關鍵詞“有三AI訓練營12-16”到後臺獲取網路配置等檔案。

學習率變更策略

學習率是一個非常重要的引數,可以直接影響模型的收斂與否。不同的學習率變更策略也會影響最終的迭代結果。

下面以sgd最佳化方法,來介紹各種策略。caffe框架中的策略包括fixed,step,exp,inv,multistep,poly,sigmoid。

「模型訓練」如何選擇最適合你的學習率變更策略

2.1 fixed

fixed,即固定學習率,這是最簡單的一種配置,只需要一個引數。

lr_policy: "fixed"

base_lr: 0.01
「模型訓練」如何選擇最適合你的學習率變更策略

如上圖,在整個的最佳化過程中學習率不變,這是非常少使用的策略,因為隨著向全域性最優點逼近,學習率應該越來越小才能避免跳過最優點。

2.2 step

採用均勻降低的方式,比如每次降低為原來的0.1倍

lr_policy: "step"

base_lr: 0.01
stepsize: 10000
gamma:0.1
「模型訓練」如何選擇最適合你的學習率變更策略

這是非常常用的一個學習率迭代策略,每次將學習率降低為原來的一定倍數,屬於非連續型的變換,使用簡單,而且效果通常較好。

不過從上圖也可以看出,其實學習率的變化一點都不平滑。

2.3 multistep

採用非均勻降低策略,指定降低的step間隔,每次降低為原來的一定倍數。

lr_policy: "multistep"

gamma: 0.5
stepvalue: 10000
stepvalue: 30000
stepvalue: 60000
「模型訓練」如何選擇最適合你的學習率變更策略

這是比step更加複雜的策略,也是採用非連續型的變換,但是變換的迭代次數不均勻,也是非常常用的策略,需要經驗。

2.4 exp

這是一種指數變化,new_lr = base_lr * (gamma^iter),可知這是連續變化,學習率的衰減非常的快,gamma越大則衰減越慢,但是因為caffe中的實現使用了iter作為指數,而iter通常都是非常大的值,所以學習率衰減仍然非常快。

「模型訓練」如何選擇最適合你的學習率變更策略

2.5 inv

new_lr = base_lr * (1 + gamma * iter) ^ (- power),可以看出,也是一種指數變換,引數gamma控制曲線下降的速率,而引數power控制曲線在飽和狀態下學習率達到的最低值。

「模型訓練」如何選擇最適合你的學習率變更策略

2.6 poly

new_lr = base_lr * (1 – iter/maxiter) ^ (power),可以看出,學習率曲線的形狀主要由引數power的值來控制。當power = 1的時候,學習率曲線為一條直線。當power < 1的時候,學習率曲線是凸的,且下降速率由慢到快。當power > 1的時候,學習率曲線是凹的,且下降速率由快到慢。

「模型訓練」如何選擇最適合你的學習率變更策略

2.7 sigmoid

new_lr = base_lr *( 1/(1 + exp(-gamma * (iter - stepsize))))

「模型訓練」如何選擇最適合你的學習率變更策略

引數gamma控制曲線的變化速率。gamma必須小於0才能下降,而這在caffe中並不被支援。

究竟這些策略的實際表現結果如何呢?請看下面的實驗結果。

實驗結果

下面就展示以上的學習率策略下的實驗結果,由於type=sigmoid不能進行學習率的下降,所以不進行對比。學習率的具體變更方式如下。

「模型訓練」如何選擇最適合你的學習率變更策略

訓練資料集大小9000,batchsize=64,可知10000次迭代時,epoch=64*10000/9000>70,在該學習率下應該已經充分訓練了,實驗結果如下。

「模型訓練」如何選擇最適合你的學習率變更策略

「模型訓練」如何選擇最適合你的學習率變更策略

收斂的結果如上,可知道都得到了收斂,但是效果不同。我們在這裡要下幾個結論,雖然只有一個案例,但是根據筆者多年使用經驗,確實如此。

  • step,multistep方法的收斂效果最好,這也是我們平常用它們最多的原因。雖然學習率的變化是最離散的,但是並不影響模型收斂到比較好的結果。
  • 其次是 exp,poly。它們能取得與step,multistep相當的結果,也是因為學習率以比較好的速率下降, 操作的確很騷,不過並不見得能幹過step和multistep。
  • inv和fixed的收斂結果最差。這是比較好解釋的,因為fixed方法始終使用了較大的學習率,而inv方法的學習率下降過程太快,這一點,當我們直接使用0.001固定大小的學習率時可以得到驗證,最終收斂結果與inv相當。

在此問大家一個問題,你覺得上面的模型,收斂到最好的狀態了嗎?不妨留言討論。

「模型訓練」如何選擇最適合你的學習率變更策略

總結

今天只是小試牛刀,也挖了很多的坑給大家(我們以後會填上的)。如果不是為了刷指標,很多時候,學習率變更策略不太需要精挑細選,比如上面的step和multistep,實際表現差不多,筆者常使用multistep,雖然這確實是個經驗活兒,不過再白痴也總不能傻到用fixed策略去訓練。

否則,其他的提高精度的措施做的再到位,也很可能因此而廢。

至於exp,inv,poly什麼的,鄙人經驗,貌似中看不中用。

那adam怎麼樣呢?





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2657084/,如需轉載,請註明出處,否則將追究法律責任。

相關文章