训练过程acc_AI 深度学习训练tricks总结(均有实验支撑)
『運籌OR帷幄』轉載
作者:Jones@知乎
作者丨Jones@知乎來源丨h(huán)ttps://zhuanlan.zhihu.com/p/261999668編輯丨極市平臺編者按
?本文作者模擬復現(xiàn)了自己在深度學習訓練過程中可能遇到的多種情況,并嘗試解決這些問題,文章圍繞學習率、動量、學習率調(diào)整策略、L2正則、優(yōu)化器展開。>>加入極市CV技術交流群,走在計算機視覺的最前沿
深度模型是黑盒,而且本次并沒有嘗試超深和超寬的網(wǎng)絡,所以結論只能提供一個先驗,并不是標準答案!同時不同的任務也可能導致不同,比如分割,所以必須具體問題具體分析!
Abstract;Key-words;Motivation
前陣子參加了幾個CV的比賽,發(fā)現(xiàn)了這樣的問題:雖然了解的理論知識不算特別少,跑了的實驗和paper代碼也還可以,但是實際搞起來總會出現(xiàn)一些奇怪的問題,然后解決起來也是有點難受,于是就打算盡可能地把遇到的情況模擬復現(xiàn)出現(xiàn),嘗試解決并解釋(但是解釋原因只能自圓其說,畢竟黑盒實驗),以免之后遇到類似的情況沒有解決的思路。
這個黃金周,乖乖地在研究所做了幾天實驗,主要圍繞著這下幾個關鍵字:
學習率;動量;學習率調(diào)整策略;L2正則;優(yōu)化器
(所有的結論都有實驗支撐,但是有一部分實驗數(shù)據(jù)給我搞沒了....555)
Thinking
在這些實驗以及一些資料(主要是吳恩達的《Machine Learning Yearning》),總結了以下幾條基本準則:
- 模型的表達能力(深度和寬度)
- 學習率
- 優(yōu)化器
- 學習率調(diào)整策略
2. 模型過擬合的影響因素:
- 數(shù)據(jù)量(數(shù)據(jù)增強可以增加數(shù)據(jù)量)
- 正則化
稍微解釋一下:模型的表達能力對模型是否過擬合的確有起到一定的影響,但是選擇合適的正則化強度可以有效的減緩這個影響!所以我沒有把模型的表達能力列入為過擬合的影響因素。而且吳恩達的書中(《Machine Learning Yearning》)也表達了類似的想法(很開心,和大佬有一樣的想法)。
實驗環(huán)境
Resnet-18
Cifar-10
Details
學習率和動量我會放在一起說,因為我發(fā)現(xiàn)這兩個東西就是天生的couple。了解深度學習的小伙伴應該知道,學習率過大和過小都會存在問題:
學習率過大會導致模型無法進入局部最優(yōu)甚至導致模型爆炸(不能收斂)
學習率過小會導致模型訓練慢,進而浪費時間
那有沒有辦法讓模型訓練得又快又能收斂呢?有!
我經(jīng)過四個實驗得出以下結論:
使用較大的學習率+大的動量可以加快模型的訓練且快速收斂
實驗設計如下(我忘記保存實驗圖了,對不起!):
實驗一:
小學習率+小動量
結果:模型訓練速度慢,雖然收斂但是收斂速度很慢,驗證集上性能很穩(wěn)定
實驗二:
小學習率+大動量
結果:模型訓練速度慢,雖然收斂但是收斂速度很慢,驗證集上性能很穩(wěn)定
實驗三:
大學習率+小動量
結果:模型訓練速度快,雖然很難收斂而且驗證集上性能波動很大,說明了模型很不穩(wěn)定
實驗四:
大學習率+大動量
結果:模型訓練速度快,同時收斂得也很快,而且驗證集上性能很穩(wěn)定
我覺得這個原因,可以從兩個角度來解釋,一個是向量加法的特殊性;另一個是從集成模型的角度來解釋。第一個角度我這里就不說了,因為我不想畫圖。。,我從第二個角度來說:
大的學習率意味著不穩(wěn)定,但是因為這個學習率也是可以讓模型往正確的優(yōu)化方向上走,所以你可以理解大的學習率為一個弱的機器學習模型;當你采用大的動量的時候,意味著本次學習率對最終模型優(yōu)化起的作用要小,也就是說采用大動量 -> 單次損失函數(shù)的占比低,那就相當于我這個模型的優(yōu)化是由本次+過去很多次學習率(弱機器學習模型)計算出來的綜合結果,那是不是就是一個集成模型呢~so,效果就比較好了。
隨便提一嘴,當模型很不穩(wěn)定的時候,如果某個瞬間出現(xiàn)較好的結果,比如準確率98%,那也不能說明這個模型在這個瞬間是好模型,因為這個時候你的模型很有可能是對驗證集過擬合了!不信你可以劃分出一個測試集試試(我之前參加腦PET識別比賽的時候就在地方摔過)。
2. 學習率調(diào)整策略
以前我是幾乎不用學習率調(diào)整策略的,因為我覺得很扯,效果不大,但是前陣子和一小哥打華錄杯的時候看他用了余弦退火有不錯的效果,就決定也試試,結論是:真香!
對不起的是,這里我也忘記保存實驗圖了,對不起!
我嘗試了3種學習率調(diào)整策略,分別為:1.ReduceLROnPlateau;2. 余弦退火;3. StepLR
結論:
- 三種策略都很不錯的
- 余弦退火使用的時候,最大學習率和最小學習率相差的數(shù)量級不要太大(比如1e-1和1e-4),不然會導致在該快的時候太慢,在該慢的時候太快,特別的接近最優(yōu)解的時候,太大就直接跑偏(圖1)【Acc圖中,灰色的曲線是驗證集上的準確率,這里我L2沒調(diào)好,所以過擬合了,可以忽略這點】
- 余弦退火我推薦在warm-up的時候可以用,之后可以改一下
- ReduceLROnPlateau我覺得是三個里面最優(yōu)的,可以根據(jù)訓練的情況動態(tài)調(diào)整(也出現(xiàn)了一些玄妙的情況(mode參數(shù)),我后面會說),需要注意的地方是,用這個的時候最好設置一下最小學習率,不然后期會因為學習率衰減得過小導致模型訓練不到。
- StepLR就很傳統(tǒng),也挺好用的,但是靈活度不如ReduceLROnPlateau。
3. L2正則
正則主要分兩種,一種是L1,一種是L2,因為pytorch自帶L2,所以我就只用了L2(嘻嘻),直接上結論:
- L2千萬不要調(diào)太大,不然特別難訓練(難訓練/訓練不到的標記就是驗證集上的性能一直在較低的水平波動,不如10% -> 12% ->9%),這就說明我們的模型并沒有學到什么東西
- L2也不能太小,不然過擬合得挺嚴重的,大概1e-2可以有不錯的效果(resnet18)
- 即使正確地使用正則化強度,也會導致驗證集前期不穩(wěn)定甚至呈現(xiàn)訓練不到的現(xiàn)象,但是之后就會穩(wěn)定下來!不要慌!(如圖2,Acc中,灰色的曲線是模型在驗證集上的準確率)
4. 優(yōu)化器
優(yōu)化器部分我就存圖了!
其實這里不單單測試了優(yōu)化器,應該是優(yōu)化器+學習率策略+momentum
其實我想做的事情就是找到一個最優(yōu)解可以作為我的先驗知識(害,人話就是:就是我想知道哪種搭配比較好,以后就先試試這種搭配)
我做了幾組實驗:
第一組:
- SGD(大的初始學習率) + momentum(大動量) +StepLR + L2(每隔70個epoch,學習率衰減為之前的0.1)
- Adam(大的初始學習率) +StepLR + L2(每隔70個epoch,學習率衰減為之前的0.1)
- AdamW(大的初始學習率) +StepLR + L2(每隔70個epoch,學習率衰減為之前的0.1)
結論(圖3):
- SGD+momentum在大學習率+大動量的時候效果更好;
- 不管是SGD還是Adam還是AdamW,學習率的調(diào)整都對他們有幫助
第二組:
- ReduceLROnPlateau(mode='min') + SGD(大學習率) + momentum(大動量) + L2
- ReduceLROnPlateau(mode='max') + SGD(大學習率) + momentum(大動量) + L2
- 余弦退火 + SGD(大學習率) + momentum(大動量) + L2
先解釋一下ReduceLROnPlateau的兩種模式:min和max
當模型為min的時候,如果指標A在一段時間內(nèi)沒有減小的話,則學習率衰減。
當模型為max的時候,如果指標A在一段時間內(nèi)沒有增大的話,則學習率衰減。
ReduceLROnPlateau我選擇mode為min模式的時候,指標的是acc,很有意思的是,其收斂速度非常快(比mode為max更快),我猜測原因應該是:
當acc有所上升的時候,說明這個優(yōu)化方向是正確的,這個時候優(yōu)化的速度應該放緩!但是在這個實驗中,其最優(yōu)解比mode為max模式差(min模式下的最優(yōu)解為0.916,max為0.935)。原因應該有兩個:
1. 是因為lr的衰減速度過快,以至于后面學習率過低,訓練不動;(后來我做了實驗證明了就是這個原因!)
2. 因為一遇到可優(yōu)化的地方就減少學習率,所以極有可能使得模型過早進入局部最優(yōu)點(但是我后來覺得這個原因站不住腳哈哈哈,因為就算使用其他優(yōu)化器,同樣會存在陷入局部最優(yōu)的問題,所以這個點不重要,但是為了保留從實驗到筆記的思考過程,我還是不把這點刪掉了。)
對于原因1,我之后做了實驗進行驗證,實驗思路就是減小學習率衰減周期和衰減系數(shù)的值/設置最小學習率,保證后期學習率不會過小,最終的解決了最優(yōu)解的問題。
圖4結論(圖4):
- 帶有momentum的SGD加余弦退火收斂更快且更加穩(wěn)定(其他兩個也不賴!)
- 學習率最好設定好下限,不然后期會訓練不動
第三組:
- StepLR+ SGD(大學習率) + momentum(大動量) + L2(圖5)
- Adam + L2(圖6)
結論:
- SGD+momentum的話,這東西對學習率還是很敏感的,所以平時最好還是別單純只用它,最好加上一些其他的策略(余弦/ReduceLROnPlateau)。
- 純Adam非常垃圾,- -我給它的初值是1e-3,然而和之前的結果相比不管從穩(wěn)定性還是收斂速度來講都很差勁。
順便提一下:我也有嘗試模擬退火+Adam,但是因為退火的幅度過大,所以效果更不好(我的鍋)。下次再試試正常幅度的退火。
心得:
從上述實驗可以看出monument非常非常重要,讓有點垃圾的SGD一下子就上天了(怪不得論文里都喜歡用這對couple),這時候再加上一些學習率調(diào)整策略(退火/ReduceLROnPlateau)就可以直接上天了,不說了,以后我就先首發(fā)這對組合。Adam相對于SGD來講,的確好上不少,但是相比較于最優(yōu)組合(SGD+momentum+學習率調(diào)整策略),就弱了一點。(在叉燒哥的群里有位高通的大佬和我說可以試試用nadam,因為nadam可以理解為Adam+monument,但是因為pytorch官方?jīng)]相應的api,我就懶得試了,不過我相信應該很猛!)
歡迎社會各界加入『運籌OR帷幄』算法知識星球!
隨著算法相關專業(yè)熱度的提升,考研讀博、留學申請、求職的難度也在相應飆升,『運籌OR帷幄』建立了【算法社區(qū)】知識星球,涵蓋運籌學、數(shù)據(jù)科學、人工智能、管理科學、工業(yè)工程等相關專業(yè),集結社區(qū)50W+專業(yè)受眾的力量,提供給大家一個共同的學習交流平臺,結交志同道合的伙伴。
# 加入知識星球,您將收獲以下福利?#
● 依托『運籌OR帷幄』50w+專業(yè)受眾和50+細分領域碩博微信群的算法技術交流
● 與國內(nèi)外Top名校教授|博士和名企研發(fā)高管一起交流算法相關技術干貨
● 海量學界|業(yè)界(獨家內(nèi)推)招聘|實習機會發(fā)布,申請|求職面試經(jīng)驗交流
● 數(shù)學模型|算法|論文|學習資料分享與提問,倡導同行交流,尋找志同道合的“隊友”
● 每月開展一次“人氣話題”和“人氣回答”評選,百元紅包獎勵分享和互動
● 每月一次“領讀人”帶隊Paper|教學視頻|原創(chuàng)技術推文等線上Meetup小組學習
● 享受『運籌OR帷幄』各大城市線下Meetup免費入場資格,拓展人脈
相關文章推薦
了解了深度學習的小trick后,如果你想繼續(xù)在CV領域有所建樹,歡迎閱讀下面文章。
點擊藍字標題,即可閱讀《AI|圖像分割研究者的煩惱與未來》
本文福利
可以在?本公眾號后臺?回復關鍵詞:“?DS?”獲取大量由我平臺編輯精心整理的數(shù)據(jù)科學資料,如果覺得有用,?請勿吝嗇你的留言和贊哦!
—— 完 ——
文章須知
文章作者:Jones@知乎
責任編輯:書生
審核編輯:阿春
微信編輯:玖蓁
本文轉載自公眾號?極市平臺(ID:extrememart)
原文鏈接:深度學習訓練tricks總結(均有實驗支撐)
總結
以上是生活随笔為你收集整理的训练过程acc_AI 深度学习训练tricks总结(均有实验支撑)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ant war包_java利用
- 下一篇: css 透明度_如何使用CSS实现精美视