學習率和batchsize如何影響模型的性能?


【AI不惑境】學習率和batchsize如何影響模型的性能?

96 

大家好,這是專欄《AI不惑境》的第四篇文章,講述學習率以及batchsize與模型性能的關系。

進入到不惑境界,就是向高手邁進的開始了,在這個境界需要自己獨立思考。如果說學習是一個從模仿,到追隨,到創造的過程,那么到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能不再有答案,更多的是激發大家一起來思考。

作者&編輯 | 言有三

前幾期我們講述了數據,模型的深度,寬度對深度學習模型性能的影響,這一次我們講述學習率和batchsize對模型性能的影響,在實踐中這兩個參數往往一起調整。

 

1 為什么說學習率和batchsize

目前深度學習模型多采用批量隨機梯度下降算法進行優化,隨機梯度下降算法的原理如下,

 

n是批量大小(batchsize),η是學習率(learning rate)。可知道除了梯度本身,這兩個因子直接決定了模型的權重更新,從優化本身來看它們是影響模型性能收斂最重要的參數。

學習率直接影響模型的收斂狀態,batchsize則影響模型的泛化性能,兩者又是分子分母的直接關系,相互也可影響,因此這一次來詳述它們對模型性能的影響。

 

2 學習率如何影響模型性能?

通常我們都需要合適的學習率才能進行學習,要達到一個強的凸函數的最小值,學習率的調整應該滿足下面的條件,i代表第i次更新。

 

第一個式子決定了不管初始狀態離最優狀態多遠,總是可以收斂。第二個式子約束了學習率隨着訓練進行有效地降低,保證收斂穩定性,各種自適應學習率算法本質上就是不斷在調整各個時刻的學習率。

學習率決定了權重迭代的步長,因此是一個非常敏感的參數,它對模型性能的影響體現在兩個方面,第一個是初始學習率的大小,第二個是學習率的變換方案。

2.1、初始學習率大小對模型性能的影響

初始的學習率肯定是有一個最優值的,過大則導致模型不收斂,過小則導致模型收斂特別慢或者無法學習,下圖展示了不同大小的學習率下模型收斂情況的可能性,圖來自於cs231n。

 

那么在不考慮具體的優化方法的差異的情況下,怎樣確定最佳的初始學習率呢?

通常可以采用最簡單的搜索法,即從小到大開始訓練模型,然后記錄損失的變化,通常會記錄到這樣的曲線。

 

隨着學習率的增加,損失會慢慢變小,而后增加,而最佳的學習率就可以從其中損失最小的區域選擇。

有經驗的工程人員常常根據自己的經驗進行選擇,比如0.1,0.01等。

隨着學習率的增加,模型也可能會從欠擬合過度到過擬合狀態,在大型數據集上的表現尤其明顯,筆者之前在Place365上使用DPN92層的模型進行過實驗。隨着學習率的增強,模型的訓練精度增加,直到超過驗證集。

 

2.2、學習率變換策略對模型性能的影響

學習率在模型的訓練過程中很少有不變的,通常會有兩種方式對學習率進行更改,一種是預設規則學習率變化法,一種是自適應學習率變換方法。

2.2.1 預設規則學習率變化法

常見的策略包括fixed,step,exp,inv,multistep,poly,sigmoid等,集中展示如下:

 

筆者之前做過一個實驗來觀察在SGD算法下,各種學習率變更策略對模型性能的影響,具體的結果如下:

 

從結果來看:

step,multistep方法的收斂效果最好,這也是我們平常用它們最多的原因。雖然學習率的變化是最離散的,但是並不影響模型收斂到比較好的結果。

其次是exp,poly。它們能取得與step,multistep相當的結果,也是因為學習率以比較好的速率下降,雖然變化更加平滑,但是結果也未必能勝過step和multistep方法,在這很多的研究中都得到過驗證,離散的學習率變更策略不影響模型的學習。

inv和fixed的收斂結果最差。這是比較好解釋的,因為fixed方法始終使用了較大的學習率,而inv方法的學習率下降過程太快。

關於以上內容的完整分析結果,可以查看往期文章:

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

從上面的結果可以看出,對於采用非自適應學習率變換的方法,學習率的絕對值對模型的性能有較大影響,研究者常使用step變化策略。

目前學術界也在探索一些最新的研究方法,比如cyclical learning rate,示意圖如下:

 

實驗證明通過設置上下界,讓學習率在其中進行變化,可以在模型迭代的后期更有利於克服因為學習率不夠而無法跳出鞍點的情況。

確定學習率上下界的方法則可以使用LR range test方法,即使用不同的學習率得到精度曲線,然后獲得精度升高和下降的兩個拐點,或者將精度最高點設置為上界,下界設置為它的1/3大小。

 

SGDR方法則是比cyclical learning rate變換更加平緩的周期性變化方法,如下圖,效果與cyclical learning rate類似。

 

2.2.2 自適應學習率變化法

自適應學習率策略以Adagrad,Adam等為代表,我們在公眾號已經說得非常多了,這里就不再做原理上的講述,可以查看往期介紹:

【AI初識境】為了圍剿SGD大家這些年想過的那十幾招

原理上各種改進的自適應學習率算法都比SGD算法更有利於性能的提升,但實際上精細調優過的SGD算法可能取得更好的結果,在很多的論文[3-4]中都得到過驗證,我們在實驗中也多次證明過這一點,如下圖。

 

2.3、小結

不考慮其他任何因素,學習率的大小和迭代方法本身就是一個非常敏感的參數。如果經驗不夠,還是考慮從Adam系列方法的默認參數開始,如果經驗豐富,可以嘗試更多的實驗配置。

 

3 Batchsize如何影響模型性能?

模型性能對batchsize雖然沒有學習率那么敏感,但是在進一步提升模型性能時,batchsize就會成為一個非常關鍵的參數。

3.1 大的batchsize減少訓練時間,提高穩定性

這是肯定的,同樣的epoch數目,大的batchsize需要的batch數目減少了,所以可以減少訓練時間,目前已經有多篇公開論文在1小時內訓練完ImageNet數據集。另一方面,大的batch size梯度的計算更加穩定,因為模型訓練曲線會更加平滑。在微調的時候,大的batch size可能會取得更好的結果。

3.2 大的batchsize泛化能力下降

在一定范圍內,增加batchsize有助於收斂的穩定性,但是隨着batchsize的增加,模型的性能會下降,如下圖,來自於文[5]。

 

這是研究者們普遍觀測到的規律,雖然可以通過一些技術緩解。這個導致性能下降的batch size在上圖就是8000左右。

那么這是為什么呢?

研究[6]表明大的batchsize收斂到sharp miminum,而小的batchsize收斂到flat mimimum,后者具有更好的泛化能力。兩者的區別就在於變化的趨勢,一個快一個慢,如下圖,造成這個現象的主要原因是大小的batchsize帶來的噪聲有助於逃離sharp mininum。

 

Hoffer[7]等人的研究表明,大的batchsize性能下降是因為訓練時間不夠長,本質上並不少batchsize的問題,在同樣的epochs下的參數更新變少了,因此需要更長的迭代次數。

3.3 小結

batchsize在變得很多時,會降低模型的泛化能力。在此之下,模型的性能變換隨batch size通常沒有學習率敏感。

 

4 學習率和batchsize的關系

通常當我們增加batchsize為原來的N倍時,要保證經過同樣的樣本后更新的權重相等,按照線性縮放規則,學習率應該增加為原來的N倍[5]。但是如果要保證權重的方差不變,則學習率應該增加為原來的sqrt(N)倍[7],目前這兩種策略都被研究過,使用前者的明顯居多。

從兩種常見的調整策略來看,學習率和batchsize都是同時增加的。學習率是一個非常敏感的因子,不可能太大,否則模型會不收斂。同樣batchsize也會影響模型性能,那實際使用中都如何調整這兩個參數呢?

研究[8]表明,衰減學習率可以通過增加batchsize來實現類似的效果,這實際上從SGD的權重更新式子就可以看出來兩者確實是等價的,文中通過充分的實驗驗證了這一點。

研究[9]表明,對於一個固定的學習率,存在一個最優的batchsize能夠最大化測試精度,這個batchsize和學習率以及訓練集的大小正相關。

對此實際上是有兩個建議:

如果增加了學習率,那么batch size最好也跟着增加,這樣收斂更穩定。

盡量使用大的學習率,因為很多研究都表明更大的學習率有利於提高泛化能力。如果真的要衰減,可以嘗試其他辦法,比如增加batch size,學習率對模型的收斂影響真的很大,慎重調整。

關於學習率和batch size這次就說這么多,感興趣可以自行拓展閱讀。

參考文獻

[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.

 

總結:

學習率和batchsize是影響模型性能極其重要的兩個參數,我們應該非常謹慎地對待。

對於學習率算法,可以選擇Adam等自適應學習率策略先訓練模型看看收斂結果,再考慮使用SGD等算法進一步提升性能。對於Batchsize,大部分人並不會使用幾千上萬的batchsize,因此也不用擔心模型性能的下降,用大一點(比如128)的batchsize吧,這樣需要的迭代次數更少,結果也更加穩定。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM