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

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

96 

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

進入到不惑境界,就是向高手邁進的開始了,在這個境界須要本身獨立思考。若是說學習是一個從模仿,到追隨,到創造的過程,那麼到這個階段,應該躍過了模仿和追隨的階段,進入了創造的階段。從這個境界開始,講述的問題可能再也不有答案,更多的是激發你們一塊兒來思考。函數

做者&編輯 | 言有三性能

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

 

1 爲何說學習率和batchsize測試

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

 

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

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

 

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

一般咱們都須要合適的學習率才能進行學習,要達到一個強的凸函數的最小值,學習率的調整應該知足下面的條件,i表明第i次更新。get

 

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

學習率決定了權重迭代的步長,所以是一個很是敏感的參數,它對模型性能的影響體如今兩個方面,第一個是初始學習率的大小,第二個是學習率的變換方案。

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

初始的學習率確定是有一個最優值的,過大則致使模型不收斂,太小則致使模型收斂特別慢或者沒法學習,下圖展現了不一樣大小的學習率下模型收斂狀況的可能性,圖來自於cs231n。

 

那麼在不考慮具體的優化方法的差別的狀況下,怎樣肯定最佳的初始學習率呢?

一般能夠採用最簡單的搜索法,即從小到大開始訓練模型,而後記錄損失的變化,一般會記錄到這樣的曲線。

 

隨着學習率的增長,損失會慢慢變小,然後增長,而最佳的學習率就能夠從其中損失最小的區域選擇。

有經驗的工程人員經常根據本身的經驗進行選擇,好比0.1,0.01等。

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

 

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.三、小結

不考慮其餘任何因素,學習率的大小和迭代方法自己就是一個很是敏感的參數。若是經驗不夠,仍是考慮從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吧,這樣須要的迭代次數更少,結果也更加穩定。

相關文章
相關標籤/搜索