「模型訓練」如何選擇最適合你的學習率變更策略
作者 | 言有三
編輯 | 言有三
如果讓我投票給深度學習中,最不想除錯,但又必須要小心除錯的引數,毫無疑問會投給學習率,今天就來說說這個。
1 專案背景
我們選擇了GHIM-10k資料集,這是一個影像檢索資料集,包含20個類別,分別是日落,船舶,花卉,建築物,汽車,山脈,昆蟲等自然影像,各個類別擁有較好的多樣性,而類別之間也有比較好的區分度。資料集共10000張影像,每個類別包含500張JPEG格式的大小為400×300或300×400的影像。
如下圖就是其中的煙 花類別。
定義了一個6層的卷積神經網路,網路結構如下:
細節我們就不多說,如果你想復現本文結果,可以傳送關鍵詞“有三AI訓練營12-16”到後臺獲取網路配置等檔案。
2 學習率變更策略
學習率是一個非常重要的引數,可以直接影響模型的收斂與否。不同的學習率變更策略也會影響最終的迭代結果。
下面以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中並不被支援。
究竟這些策略的實際表現結果如何呢?請看下面的實驗結果。
3 實驗結果
下面就展示以上的學習率策略下的實驗結果,由於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相當。
在此問大家一個問題,你覺得上面的模型,收斂到最好的狀態了嗎?不妨留言討論。
4 總結
今天只是小試牛刀,也挖了很多的坑給大家(我們以後會填上的)。如果不是為了刷指標,很多時候,學習率變更策略不太需要精挑細選,比如上面的step和multistep,實際表現差不多,筆者常使用multistep,雖然這確實是個經驗活兒,不過再白痴也總不能傻到用fixed策略去訓練。
否則,其他的提高精度的措施做的再到位,也很可能因此而廢。
至於exp,inv,poly什麼的,鄙人經驗,貌似中看不中用。
那adam怎麼樣呢?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2657084/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何選擇最好最適合你的MacBookMac
- 如何選擇更適合你的 Linux 發行版?Linux
- 【1】人工智慧訓練 - 選擇最優模型人工智慧模型
- 團隊如何選擇合適的Git分支策略?Git
- 知物由學 | 更適合文字分類的輕量級預訓練模型文字分類模型
- 如何選擇最適合自己的伺服器伺服器
- 伺服器如何選擇合適的IO模型伺服器模型
- java培訓機構如何選擇適合自己的Java
- 如何選擇最適合您的代理提供商?
- 企業如何選擇最合適的加密技術加密
- 如何選擇適合你的程式碼風格?
- 機房IP和家庭IP:如何選擇最適合你的網路型別型別
- 選擇合適的推薦系統模型模型
- 如何選擇合適的 BI 工具?
- MySQL中如何選擇合適的備份策略和備份工具MySql
- 如何選擇合適的建站系統
- 技術乾貨:如何選擇最適合自己的RDMA網路卡
- TODO 最適合練習主流框架的應用框架
- 初創公司如何訓練大型深度學習模型深度學習模型
- 深度學習訓練過程中的學習率衰減策略及pytorch實現深度學習PyTorch
- 選擇適合的Node.js授權認證策略Node.js
- 適合AI訓練的遊戲框架AI遊戲框架
- 如何選擇合適的NoSQL資料庫SQL資料庫
- 如何為DMAIC選擇合適的專案AI
- 伺服器如何選擇合適的配置伺服器
- 如何選擇合適自己的伺服器伺服器
- 如何選擇合適的美國伺服器?伺服器
- 如何選擇適合自己的程式語言
- 如何選擇合適的MySQL儲存引擎MySql儲存引擎
- 巨型專案如何選擇合適的框架?框架
- 如何選擇適合你的企業資料管理類產品
- 【Python入門教程】如何選擇合適的Python培訓機構?Python
- 選擇最適合的線上專案管理工具專案管理
- IT專案管理工具推薦:選擇最適合你的優秀工具專案管理
- 如何選擇適合RCD負載箱負載
- 如何選擇最適合的採購付款 (P2P) 解決方案?
- 如何選擇合適的物件儲存?這5個方面你值得思考!物件
- 如何選擇合適的SSL證書型別型別