【AI不惑境】学习率和batchsize如何影响模型的性能?
大家好,這是專欄《AI不惑境》的第四篇文章,講述學(xué)習(xí)率以及batchsize與模型性能的關(guān)系。
進(jìn)入到不惑境界,就是向高手邁進(jìn)的開(kāi)始了,在這個(gè)境界需要自己獨(dú)立思考。如果說(shuō)學(xué)習(xí)是一個(gè)從模仿,到追隨,到創(chuàng)造的過(guò)程,那么到這個(gè)階段,應(yīng)該躍過(guò)了模仿和追隨的階段,進(jìn)入了創(chuàng)造的階段。從這個(gè)境界開(kāi)始,講述的問(wèn)題可能不再有答案,更多的是激發(fā)大家一起來(lái)思考。
作者&編輯 | 言有三
前幾期我們講述了數(shù)據(jù),模型的深度,寬度對(duì)深度學(xué)習(xí)模型性能的影響,這一次我們講述學(xué)習(xí)率和batchsize對(duì)模型性能的影響,在實(shí)踐中這兩個(gè)參數(shù)往往一起調(diào)整。
?
1 為什么說(shuō)學(xué)習(xí)率和batchsize
目前深度學(xué)習(xí)模型多采用批量隨機(jī)梯度下降算法進(jìn)行優(yōu)化,隨機(jī)梯度下降算法的原理如下,
n是批量大小(batchsize),η是學(xué)習(xí)率(learning rate)。可知道除了梯度本身,這兩個(gè)因子直接決定了模型的權(quán)重更新,從優(yōu)化本身來(lái)看它們是影響模型性能收斂最重要的參數(shù)。
學(xué)習(xí)率直接影響模型的收斂狀態(tài),batchsize則影響模型的泛化性能,兩者又是分子分母的直接關(guān)系,相互也可影響,因此這一次來(lái)詳述它們對(duì)模型性能的影響。
?
2 學(xué)習(xí)率如何影響模型性能?
通常我們都需要合適的學(xué)習(xí)率才能進(jìn)行學(xué)習(xí),要達(dá)到一個(gè)強(qiáng)的凸函數(shù)的最小值,學(xué)習(xí)率的調(diào)整應(yīng)該滿足下面的條件,i代表第i次更新。
第一個(gè)式子決定了不管初始狀態(tài)離最優(yōu)狀態(tài)多遠(yuǎn),總是可以收斂。第二個(gè)式子約束了學(xué)習(xí)率隨著訓(xùn)練進(jìn)行有效地降低,保證收斂穩(wěn)定性,各種自適應(yīng)學(xué)習(xí)率算法本質(zhì)上就是不斷在調(diào)整各個(gè)時(shí)刻的學(xué)習(xí)率。
學(xué)習(xí)率決定了權(quán)重迭代的步長(zhǎng),因此是一個(gè)非常敏感的參數(shù),它對(duì)模型性能的影響體現(xiàn)在兩個(gè)方面,第一個(gè)是初始學(xué)習(xí)率的大小,第二個(gè)是學(xué)習(xí)率的變換方案。
2.1、初始學(xué)習(xí)率大小對(duì)模型性能的影響
初始的學(xué)習(xí)率肯定是有一個(gè)最優(yōu)值的,過(guò)大則導(dǎo)致模型不收斂,過(guò)小則導(dǎo)致模型收斂特別慢或者無(wú)法學(xué)習(xí),下圖展示了不同大小的學(xué)習(xí)率下模型收斂情況的可能性,圖來(lái)自于cs231n。
那么在不考慮具體的優(yōu)化方法的差異的情況下,怎樣確定最佳的初始學(xué)習(xí)率呢?
通常可以采用最簡(jiǎn)單的搜索法,即從小到大開(kāi)始訓(xùn)練模型,然后記錄損失的變化,通常會(huì)記錄到這樣的曲線。
隨著學(xué)習(xí)率的增加,損失會(huì)慢慢變小,而后增加,而最佳的學(xué)習(xí)率就可以從其中損失最小的區(qū)域選擇。
有經(jīng)驗(yàn)的工程人員常常根據(jù)自己的經(jīng)驗(yàn)進(jìn)行選擇,比如0.1,0.01等。
隨著學(xué)習(xí)率的增加,模型也可能會(huì)從欠擬合過(guò)度到過(guò)擬合狀態(tài),在大型數(shù)據(jù)集上的表現(xiàn)尤其明顯,筆者之前在Place365上使用DPN92層的模型進(jìn)行過(guò)實(shí)驗(yàn)。隨著學(xué)習(xí)率的增強(qiáng),模型的訓(xùn)練精度增加,直到超過(guò)驗(yàn)證集。
2.2、學(xué)習(xí)率變換策略對(duì)模型性能的影響
學(xué)習(xí)率在模型的訓(xùn)練過(guò)程中很少有不變的,通常會(huì)有兩種方式對(duì)學(xué)習(xí)率進(jìn)行更改,一種是預(yù)設(shè)規(guī)則學(xué)習(xí)率變化法,一種是自適應(yīng)學(xué)習(xí)率變換方法。
2.2.1 預(yù)設(shè)規(guī)則學(xué)習(xí)率變化法
常見(jiàn)的策略包括fixed,step,exp,inv,multistep,poly,sigmoid等,集中展示如下:
筆者之前做過(guò)一個(gè)實(shí)驗(yàn)來(lái)觀察在SGD算法下,各種學(xué)習(xí)率變更策略對(duì)模型性能的影響,具體的結(jié)果如下:
從結(jié)果來(lái)看:
step,multistep方法的收斂效果最好,這也是我們平常用它們最多的原因。雖然學(xué)習(xí)率的變化是最離散的,但是并不影響模型收斂到比較好的結(jié)果。
其次是exp,poly。它們能取得與step,multistep相當(dāng)?shù)慕Y(jié)果,也是因?yàn)閷W(xué)習(xí)率以比較好的速率下降,雖然變化更加平滑,但是結(jié)果也未必能勝過(guò)step和multistep方法,在這很多的研究中都得到過(guò)驗(yàn)證,離散的學(xué)習(xí)率變更策略不影響模型的學(xué)習(xí)。
inv和fixed的收斂結(jié)果最差。這是比較好解釋的,因?yàn)閒ixed方法始終使用了較大的學(xué)習(xí)率,而inv方法的學(xué)習(xí)率下降過(guò)程太快。
關(guān)于以上內(nèi)容的完整分析結(jié)果,可以查看往期文章:
【模型訓(xùn)練】如何選擇最適合你的學(xué)習(xí)率變更策略
從上面的結(jié)果可以看出,對(duì)于采用非自適應(yīng)學(xué)習(xí)率變換的方法,學(xué)習(xí)率的絕對(duì)值對(duì)模型的性能有較大影響,研究者常使用step變化策略。
目前學(xué)術(shù)界也在探索一些最新的研究方法,比如cyclical learning rate,示意圖如下:
實(shí)驗(yàn)證明通過(guò)設(shè)置上下界,讓學(xué)習(xí)率在其中進(jìn)行變化,可以在模型迭代的后期更有利于克服因?yàn)閷W(xué)習(xí)率不夠而無(wú)法跳出鞍點(diǎn)的情況。
確定學(xué)習(xí)率上下界的方法則可以使用LR range test方法,即使用不同的學(xué)習(xí)率得到精度曲線,然后獲得精度升高和下降的兩個(gè)拐點(diǎn),或者將精度最高點(diǎn)設(shè)置為上界,下界設(shè)置為它的1/3大小。
SGDR方法則是比cyclical learning rate變換更加平緩的周期性變化方法,如下圖,效果與cyclical learning rate類似。
2.2.2 自適應(yīng)學(xué)習(xí)率變化法
自適應(yīng)學(xué)習(xí)率策略以Adagrad,Adam等為代表,我們?cè)诠娞?hào)已經(jīng)說(shuō)得非常多了,這里就不再做原理上的講述,可以查看往期介紹:
【AI初識(shí)境】為了圍剿SGD大家這些年想過(guò)的那十幾招
原理上各種改進(jìn)的自適應(yīng)學(xué)習(xí)率算法都比SGD算法更有利于性能的提升,但實(shí)際上精細(xì)調(diào)優(yōu)過(guò)的SGD算法可能取得更好的結(jié)果,在很多的論文[3-4]中都得到過(guò)驗(yàn)證,我們?cè)趯?shí)驗(yàn)中也多次證明過(guò)這一點(diǎn),如下圖。
2.3、小結(jié)
不考慮其他任何因素,學(xué)習(xí)率的大小和迭代方法本身就是一個(gè)非常敏感的參數(shù)。如果經(jīng)驗(yàn)不夠,還是考慮從Adam系列方法的默認(rèn)參數(shù)開(kāi)始,如果經(jīng)驗(yàn)豐富,可以嘗試更多的實(shí)驗(yàn)配置。
?
3 Batchsize如何影響模型性能?
模型性能對(duì)batchsize雖然沒(méi)有學(xué)習(xí)率那么敏感,但是在進(jìn)一步提升模型性能時(shí),batchsize就會(huì)成為一個(gè)非常關(guān)鍵的參數(shù)。
3.1 大的batchsize減少訓(xùn)練時(shí)間,提高穩(wěn)定性
這是肯定的,同樣的epoch數(shù)目,大的batchsize需要的batch數(shù)目減少了,所以可以減少訓(xùn)練時(shí)間,目前已經(jīng)有多篇公開(kāi)論文在1小時(shí)內(nèi)訓(xùn)練完ImageNet數(shù)據(jù)集。另一方面,大的batch size梯度的計(jì)算更加穩(wěn)定,因?yàn)槟P陀?xùn)練曲線會(huì)更加平滑。在微調(diào)的時(shí)候,大的batch size可能會(huì)取得更好的結(jié)果。
3.2 大的batchsize泛化能力下降
在一定范圍內(nèi),增加batchsize有助于收斂的穩(wěn)定性,但是隨著batchsize的增加,模型的性能會(huì)下降,如下圖,來(lái)自于文[5]。
這是研究者們普遍觀測(cè)到的規(guī)律,雖然可以通過(guò)一些技術(shù)緩解。這個(gè)導(dǎo)致性能下降的batch size在上圖就是8000左右。
那么這是為什么呢?
研究[6]表明大的batchsize收斂到sharp miminum,而小的batchsize收斂到flat mimimum,后者具有更好的泛化能力。兩者的區(qū)別就在于變化的趨勢(shì),一個(gè)快一個(gè)慢,如下圖,造成這個(gè)現(xiàn)象的主要原因是大小的batchsize帶來(lái)的噪聲有助于逃離sharp mininum。
Hoffer[7]等人的研究表明,大的batchsize性能下降是因?yàn)橛?xùn)練時(shí)間不夠長(zhǎng),本質(zhì)上并不少batchsize的問(wèn)題,在同樣的epochs下的參數(shù)更新變少了,因此需要更長(zhǎng)的迭代次數(shù)。
3.3 小結(jié)
batchsize在變得很多時(shí),會(huì)降低模型的泛化能力。在此之下,模型的性能變換隨batch size通常沒(méi)有學(xué)習(xí)率敏感。
?
4 學(xué)習(xí)率和batchsize的關(guān)系
通常當(dāng)我們?cè)黾觔atchsize為原來(lái)的N倍時(shí),要保證經(jīng)過(guò)同樣的樣本后更新的權(quán)重相等,按照線性縮放規(guī)則,學(xué)習(xí)率應(yīng)該增加為原來(lái)的N倍[5]。但是如果要保證權(quán)重的方差不變,則學(xué)習(xí)率應(yīng)該增加為原來(lái)的sqrt(N)倍[7],目前這兩種策略都被研究過(guò),使用前者的明顯居多。
從兩種常見(jiàn)的調(diào)整策略來(lái)看,學(xué)習(xí)率和batchsize都是同時(shí)增加的。學(xué)習(xí)率是一個(gè)非常敏感的因子,不可能太大,否則模型會(huì)不收斂。同樣batchsize也會(huì)影響模型性能,那實(shí)際使用中都如何調(diào)整這兩個(gè)參數(shù)呢?
研究[8]表明,衰減學(xué)習(xí)率可以通過(guò)增加batchsize來(lái)實(shí)現(xiàn)類似的效果,這實(shí)際上從SGD的權(quán)重更新式子就可以看出來(lái)兩者確實(shí)是等價(jià)的,文中通過(guò)充分的實(shí)驗(yàn)驗(yàn)證了這一點(diǎn)。
研究[9]表明,對(duì)于一個(gè)固定的學(xué)習(xí)率,存在一個(gè)最優(yōu)的batchsize能夠最大化測(cè)試精度,這個(gè)batchsize和學(xué)習(xí)率以及訓(xùn)練集的大小正相關(guān)。
對(duì)此實(shí)際上是有兩個(gè)建議:
如果增加了學(xué)習(xí)率,那么batch size最好也跟著增加,這樣收斂更穩(wěn)定。
盡量使用大的學(xué)習(xí)率,因?yàn)楹芏嘌芯慷急砻鞲蟮膶W(xué)習(xí)率有利于提高泛化能力。如果真的要衰減,可以嘗試其他辦法,比如增加batch size,學(xué)習(xí)率對(duì)模型的收斂影響真的很大,慎重調(diào)整。
關(guān)于學(xué)習(xí)率和batch size這次就說(shuō)這么多,感興趣可以自行拓展閱讀。
參考文獻(xiàn)
[1] Smith L N. Cyclical learning rates for training neural networks[C]//2017 IEEE Winter Conference on Applications of Computer Vision (WACV). IEEE, 2017: 464-472.
[2] Loshchilov I, Hutter F. Sgdr: Stochastic gradient descent with warm restarts[J]. arXiv preprint arXiv:1608.03983, 2016.
[3] Reddi S J, Kale S, Kumar S. On the convergence of adam and beyond[J]. 2018.
[4] Keskar N S, Socher R. Improving generalization performance by switching from adam to sgd[J]. arXiv preprint arXiv:1712.07628, 2017.
[5] Goyal P, Dollar P, Girshick R B, et al. Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour.[J]. arXiv: Computer Vision and Pattern Recognition, 2017.
[6] Keskar N S, Mudigere D, Nocedal J, et al. On large-batch training for deep learning: Generalization gap and sharp minima[J]. arXiv preprint arXiv:1609.04836, 2016.
[7] Hoffer E, Hubara I, Soudry D. Train longer, generalize better: closing the generalization gap in large batch training of neural networks[C]//Advances in Neural Information Processing Systems. 2017: 1731-1741.
[8] Smith S L, Kindermans P J, Ying C, et al. Don't decay the learning rate, increase the batch size[J]. arXiv preprint arXiv:1711.00489, 2017.
[9] Smith S L, Le Q V. A bayesian perspective on generalization and stochastic gradient descent[J]. arXiv preprint arXiv:1710.06451, 2017.
?
總結(jié):
學(xué)習(xí)率和batchsize是影響模型性能極其重要的兩個(gè)參數(shù),我們應(yīng)該非常謹(jǐn)慎地對(duì)待。
對(duì)于學(xué)習(xí)率算法,可以選擇Adam等自適應(yīng)學(xué)習(xí)率策略先訓(xùn)練模型看看收斂結(jié)果,再考慮使用SGD等算法進(jìn)一步提升性能。對(duì)于Batchsize,大部分人并不會(huì)使用幾千上萬(wàn)的batchsize,因此也不用擔(dān)心模型性能的下降,用大一點(diǎn)(比如128)的batchsize吧,這樣需要的迭代次數(shù)更少,結(jié)果也更加穩(wěn)定。
下期預(yù)告:跳層連接對(duì)網(wǎng)絡(luò)性能的影響。
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學(xué)習(xí)從棄用windows開(kāi)始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學(xué)AI必備的python基礎(chǔ)
第四期:【AI白身境】深度學(xué)習(xí)必備圖像基礎(chǔ)
第五期:【AI白身境】搞計(jì)算機(jī)視覺(jué)必備的OpenCV入門基礎(chǔ)
第六期:【AI白身境】只會(huì)用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學(xué)深度學(xué)習(xí)你不得不知的爬蟲(chóng)基礎(chǔ)
第八期:?【AI白身境】深度學(xué)習(xí)中的數(shù)據(jù)可視化
第九期:【AI白身境】入行AI需要什么數(shù)學(xué)基礎(chǔ):左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計(jì)算機(jī)視覺(jué)研究方向
第十一期:【AI白身境】AI+,都加在哪些應(yīng)用領(lǐng)域了
第十二期:【AI白身境】究竟誰(shuí)是paper之王,全球前10的計(jì)算機(jī)科學(xué)家
AI初識(shí)境系列完整閱讀
第一期:【AI初識(shí)境】從3次人工智能潮起潮落說(shuō)起
第二期:【AI初識(shí)境】從頭理解神經(jīng)網(wǎng)絡(luò)-內(nèi)行與外行的分水嶺
第三期:【AI初識(shí)境】近20年深度學(xué)習(xí)在圖像領(lǐng)域的重要進(jìn)展節(jié)點(diǎn)
第四期:【AI初識(shí)境】激活函數(shù):從人工設(shè)計(jì)到自動(dòng)搜索
第五期:【AI初識(shí)境】什么是深度學(xué)習(xí)成功的開(kāi)始?參數(shù)初始化
第六期:【AI初識(shí)境】深度學(xué)習(xí)模型中的Normalization,你懂了多少?
第七期:【AI初識(shí)境】為了圍剿SGD大家這些年想過(guò)的那十幾招
第八期:【AI初識(shí)境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識(shí)境】如何增加深度學(xué)習(xí)模型的泛化能力
第十期:【AI初識(shí)境】深度學(xué)習(xí)模型評(píng)估,從圖像分類到生成模型
第十一期:【AI初識(shí)境】深度學(xué)習(xí)中常用的損失函數(shù)有哪些?
第十二期:【AI初識(shí)境】給深度學(xué)習(xí)新手開(kāi)始項(xiàng)目時(shí)的10條建議
AI不惑境系列完整閱讀:
第一期:【AI不惑境】數(shù)據(jù)壓榨有多狠,人工智能就有多成功
第二期:【AI不惑境】網(wǎng)絡(luò)深度對(duì)深度學(xué)習(xí)模型性能有什么影響?
第三期:【AI不惑境】網(wǎng)絡(luò)的寬度如何影響深度學(xué)習(xí)模型的性能?
第四期:【AI不惑境】學(xué)習(xí)率和batchsize如何影響模型的性能?
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續(xù)內(nèi)容將會(huì)不定期奉上,歡迎大家關(guān)注有三公眾號(hào) 有三AI!
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的【AI不惑境】学习率和batchsize如何影响模型的性能?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 揭秘7大AI学习板块,这个星球推荐你拥有
- 下一篇: 【TensorFlow2.0】以后我们再