###好好好########學習率和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等爲代表

原理上各種改進的自適應學習率算法都比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 minimum,而小的batchsize收斂到flat minimum,後者具有更好的泛化能力。兩者的區別就在於變化的趨勢,一個快一個慢,如下圖,造成這個現象的主要原因是小的batchsize帶來的噪聲有助於逃離sharp minimum。

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.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章