【模型训练】如何选择最适合你的学习率变更策略
文章首發于微信公眾號《有三AI》
【模型訓練】如何選擇最適合你的學習率變更策略
如果讓我投票給深度學習中,最不想調試,但又必須要小心調試的參數,毫無疑問會投給學習率,今天就來說說這個。
?
01?項目背景
我們選擇了GHIM-10k數據集,這是一個圖像檢索數據集,包含20個類別,分別是日落,船舶,花卉,建筑物,汽車,山脈,昆蟲等自然圖像,各個類別擁有較好的多樣性,而類別之間也有比較好的區分度。數據集共10000張圖像,每個類別包含500張JPEG格式的大小為400×300或300×400的圖像。
如下圖就是其中的煙花類別。
定義了一個6層的卷積神經網絡,網絡結構如下:
細節咱就不多說,如果你想復現本文結果,可以發送關鍵詞“有三AI訓練營12-16”到后臺獲取網絡配置等文件。
?
02?學習率變更策略
學習率是一個非常重要的參數,可以直接影響模型的收斂與否。不同的學習率變更策略也會影響最終的迭代結果。
下面以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中并不被支持。
究竟這些策略的實際表現結果如何呢?請看下面的實驗結果。
?
03?實驗結果
下面就展示以上的學習率策略下的實驗結果,由于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相當。
在此問大家一個問題,你覺得上面的模型,收斂到最好的狀態了嗎?不妨后臺留言討論。
?
04?總結
今天只是小試牛刀,也挖了很多的坑給大家(我們以后會填上的)。如果不是為了刷指標,很多時候,學習率變更策略不太需要精挑細選,比如上面的step和multistep,實際表現差不多,筆者常使用multistep,雖然這確實是個經驗活兒,不過再白癡也總不能傻到用fixed策略去訓練。
否則,其他的提高精度的措施做的再到位,也很可能因此而廢。
至于exp,inv,poly什么的,鄙人經驗,貌似中看不中用。
那adam怎么樣呢?
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
?
?
?
總結
以上是生活随笔為你收集整理的【模型训练】如何选择最适合你的学习率变更策略的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【模型训练】SGD的那些变种,真的比SG
- 下一篇: 【资源总结】“十大深度学习方向” 专栏