一、概述
??本文記錄了自己探究batchSize, lr以及Performance之間關系這一問題時做的筆記,組織比較無序。第二、三部分為當時的問題和解答。第四部分為兩篇論文的筆記。最后一部分給出了探究結果的其實——訓練神經網絡時和batchSize以及lr相關的trick。
??順便說下,本文一些重要的參考文獻是Quora, reddit等國外高質量論壇的帖子。如果你需要訪問,務必小心,因為有一定幾率接到“擅自建立,使用非法定信道進行國際聯網”的通知~
二、問題陳列:
- batchSize越小,訓練過程的隨機性(不確定性)越高,即訓練過程中梯度包含的噪聲更多,或者說minibatch的梯度具有越高的方差,進而得出結論,Small batchSize方法具有更好的“探索性”。上述說法只是直覺層面,有無理論證明?
- 為什么batchSize越大,網絡收斂越慢?在一定范圍內batchSize越大,GPU的并行效率不是越高嗎?batchSize和學習率的關系?
- 為什么batchSize大到一定程度以后,validation performance大幅下降?
- 應該如何理解optimization過程中的minimizer?
三、答案:
【更新】:下面的答案有幾處不嚴格的地方:
參考Ian本人的答案:
https://www.quora.com/In-deep-learning-why-dont-we-use-the-whole-training-set-to-compute-the-gradient
-
答案2中說:“100-batch和10000-batch相比,前者的梯度方差是后者的100倍”。這個應該是不對的。不過計算量確實是線性關系。見下面截圖:
Update 1. Ian回答截圖 1 -
并不是訓練時使用整個訓練集(即batchSGD)就能獲得“clean gradient”。真實的梯度應該是在所有可能的樣本點上計算出的梯度,在數據生成分布上的加權和。使用整個訓練集只是相當于用一個很大的minibatch size。見下圖:
Update 2. Ian回答截圖
嘗試解答:
- 答:【嚴格證明有待補充】我們在使用mini-batch SGD訓練NN時,實際上做的事情,是通過mini-batch上的梯度來估計整個訓練集上的梯度。顯然,使用1個樣本(即SGD)相比使用100個樣本的batch,梯度的噪聲要大得多。也就是說,當使用小batch SGD時,我們并不總是沿著loss下降最快(即梯度方向)的方向移動的。相反,如果使用整個數據集作為訓練集(batch SGD),那么我們訓練時的梯度是非常"clean"的,這樣會導致一個問題:優化過程將卡在第一個local minima處。因為此時梯度值為0。
- 答:考慮我們有個包含100, 0000個訓練樣本的數據集。我們考慮兩種方法:batchSize為100和10000的算法來訓練神經網絡,假設使用相同的step size(即學習率)。大體上,梯度計算的復雜度和batchSize成線性關系。故計算10000-batch的梯度的時間,大約為計算100-batch梯度時間的100倍。
這意味著在10000-batch更新參數一步的時間(one step update),100-batch方法可以更新100步參數。由于mini-batch SGD算法參數更新不一定沿著梯度方向(即1中所答),這100個更新steps的“成效”肯定達不到10000-batch那一步更新的100倍。但是至少也能達到10倍以上的“成效”。這就是為什么mini-batch SGD算法要比batch SGD節省大量時間。
注意,剛才我們的假設是100-batch和10000-batch使用相同的學習率。現在我們考慮另一個問題:batchSize和學習率的關系。由于large-batch方法訓練時梯度的方差更小,或者說由于loss下降的方向更嚴格地沿著梯度方向,我們可以選擇更大的batchSize。具體來說,100-batch和10000-batch相比,前者的梯度方差是后者的100倍。理論上這使得我們可以用100倍的學習率來訓練,這樣的話,理論上我們用10000-batch更新1步的速度其實和100-batch更新100步的速度相同。如果是這樣的話,那將是非常理想的。因為大的batchSize會更大程度利用GPU的并行運算能力,極大的提高訓練效率。然而事實上,盡管我們可以對larger batch使用更大的學習率,但是這個學習率是有一個上限的。"the step-size cannot exceed an algorithmic, problem-dependent upper bound which depends on the smoothness of the objective function (typically 1/L, where L is the Lipschitz constant of the "full" gradients)"
答:因為"large-batch methods tend to converge to sharp minimizers of the training and testing functions,而sharp minima lead to poorer generalization"。至于為什么sharp minima導致泛化更差?見Fig. 1。
答:就是loss surface上不同的局部極小值點。有的極小值點附近比較陡,有的比較平坦。參考論文:Visualizing the Loss Landscape of Nural Network中摘要第一句話:
Neural network training relies on our ability to find “good” minimizers of highly non-convex loss functions.
四、論文筆記
篇1:On Large-Batch Training for DL——Gerneralization Gap and Sharp Minima
現象:較大的batchSize(LB methods)會導致驗證集表現和訓練集表現出現明顯鴻溝(訓練集表現沒有影響)。
推測:①LB導致模型過擬合②LB方法容易陷入鞍點③LB缺乏SB的“探索性質”(即SB的引入的隨機性使得優化過程有一定幾率跳過local minima)④SB和LB方法會收斂到具有不同泛華性質的不同的minimizer。
本文可以證明,后兩個推斷是合理的。-
名詞解釋:
①minimizer
與minima
:minimizer本質是function,而minima是minimizer函數值最低點對應的X(parameters)取值。一個在鄰域內變化很小的函數被稱為flat minimizer,反之則是sharp minimizer。minimizer和minima這里應該是相同的意思,指局部極小值點。為什么minimizer sharp了泛化就差?解釋如下:
解釋一:flat minimum只需要用比較低的精度就能描述;sharp minimu需要非常精確的描述。根據MDL(minimum description length)理論,states that statistical models that
require fewer bits to describe (i.e., are of low complexity) generalize better。或者更直觀地,精確的minimu會導致最優點高度敏感,見下圖:
Fig. 1. flat and sharp minimizer的不同泛化能力
②sharpness
:直觀的解釋見上圖。作者也選擇了一個客觀指標來衡量sharpness:理論上最好的指標是" 目標函數f的海森矩陣的模"。然而海森矩陣計算量太大。故選取了一個近似指標:目標函數f在某個小鄰域范圍中可以取得的最大的函數值。 什么是SB方法的“探索性”?
答:SB方法中,梯度中固有的噪聲會push參數更新過程,讓其遠離sharp minimizers(這里不要把minimizer看成全局的。可以理解為不同的局部有不同形狀的minimizer這里的minimizers應該是說,在一個很大的function set(取決于model capacity)中,有一些function是sharp minimizers,另一些是flat minimizers,然后模型最終的優化只會選擇其中一個function。可以這樣理解嗎這里的minimizers是指loss surface上不同的局部極小值點),并且傾向于陷入即使是噪聲也無法讓優化過程跳出的,更平坦的局部極小值。因此,超過一個閾值之后,繼續增大BatchSize會導致梯度噪聲的減小,這樣優化過程就無法跳出那些原本可以跳出的,比較sharper的局部極小值。-
warm-start
在上述分析的基礎上,作者設置了一個實驗:
Fig. 2. warm-start實驗的設計
注意:這個實驗非常重要。作者用小batchSize (SB)和ADAM train了100個epoch,并且將每個100個的訓練結果保存下來。然后使用每一個保存的斷點,換成大的batchSize繼續訓練100個epoch,這樣得到100個warm-started LB solutions。作者比較了這一百個結果,發現如下的規律:
在繼承最開始的幾個epoch訓練的LB模型未表現出泛化性能的提升。與此同時這些模型對應的sharpness維持在較高的水準。然而在經過一定epoch數的warm-starting之后,LB模型的泛化性能顯著提高,同時sharpness下降。也就是說:The SB method has ended its exploration phase and discovered a flat minimizer.
- 其他實驗:本文還做了一些其他實驗試圖減小LB的sharpness,比如數據增強,甚至一些對抗方法。然而這些方法,雖然一定程度上提高了泛化性能,但是并沒有降低模型的sharpness。故作者認為這些方法并沒有解決問題。
篇2 DON’T DECAY THE LEARNING RATE, INCREASE THE BATCH SIZE
??首先要強調一下,這篇文章,還有facebook那篇 Training ImageNet in 1 Hour面向的問題差不多,基本上是超過8個GPU,分布式大規模計算的情景,解決增大batchSize網絡模型變差這樣問題。不過其中的場景和我們實驗室的差別較大,可能其中有很多有用的tricks,但是目前可能還用不上...這里就把兩篇論文中感興趣的points整理在一起:
-
Linear Scaling Rule
Fig. 6. Linear Scaling Rule
??然而知乎上有人提出了自己的實踐經驗,就是說對于異步SGD, 這個Linear Scaling Rule不太適用。
Fig. 7. 知乎上有人提出的質疑
-
??很多人說facebook這篇文章提出的tricks很實用,不過由于時間原因還沒仔細了解,因為我覺得可能當前階段李沐的tricks學習優先級更高一些。以后如果有幸能參與大規模集群開發,再好好學一學facebook的expensive experiment tricks...
-
noise scale
??Google這篇文章中大量使用了Smith & Le論文(看了下,原來是自己的文章...)中提出的一個概念:noise scale。即下圖的公式:
-
noise scale
??由這個式子,作者認為衰減學習率其實和增大BatchSize擁有相同的效果(在滿足N<<B的前提下)。作者在文章中使用不同的training schedule,比如只衰減學習率;只增大batchSize或者兩者混合進行。最終的結果是得到了幾乎一致的訓練曲線。故作者得出結論:與模型表現真正相關的不是學習率,而是noise scale。因為這幾組實驗真正在做的事情,是decay noise scale。
- 模擬退火
??本文提出的一個重要概念:將神經網絡訓練過程類比為物理科學中的模擬退火,其中的“火”指的是溫度,而對應到神經網絡中則是噪聲幅度, 即 2 中的noise scale。以下為詳細分析:
①本博客上面提到,LB方法具有一定探索性,因為其梯度噪聲較大。而隨著訓練過程接近optima,我們必須逐漸減小學習率以抵消梯度的bounce。顯然這符合上面描述的逐漸減小noise的過程。注意這也正是我們常用的策略。因為我們的GPU資源有限,其實batchSize也增大不了多少。
??另外一個非常有趣的事實是,研究者們越來越不傾向于使用較溫和的學習率衰減策略,如平方根或者指數衰減,而傾向于使用sharper的策略,如cosine decay或者step-functions decay。作者認為也可以使用物理科學中的模擬退火現象來類比:
To interpret this shift, we note that it is well known in the physical sciences that slowly annealing the temperature (noise scale) helps the system to converge to the global minimum, which may be sharp. Meanwhile annealing the temperature in a series of discrete steps can trap the system in a “robust” minimum whose cost may be higher but whose curvature is lower. We suspect a similar intuition may hold in deep learning.
②另一個角度來說,batchSize越大,梯度噪聲越小。通過逐步增大batchSize達到模擬退火的效果。
③上面兩點本質上都是在通過減小訓練過程中的noise scale來實現模擬退火。訓練初期使用較大的噪聲,允許模型在一個更大的參數空間中探索,而不會輕易卡在local minima;經歷過這一階段之后,我們可以在一個局部的,更有前景的參數空間中減小noise,并微調我們的參數。 見原文中的論述:
注意,這個描述高度符合篇一中warm-start實驗的做法。
- 有效學習率,momentum系數與訓練啟動期
??這部分中比較有意思的是,作者通過推理給出了noise scale公式的momentum版本。進而提出了兩個概念:有效學習率和 。我們可以簡單看下推導:
??由于accumulate variable 被初始化為0,
在前幾個epoch一致很小,從而導致參數更新幅度
被抑制。直到經過一定數目epoch,才能進入穩定的訓練階段。作者后面繼續推導,找到了這個訓練初期的epoch數目,
。并給出了后續結論:
momentum系數的增大會使得訓練初期需要更多epoch數目來啟動。如果這個數目相比整個訓練過程的epoch數不可以忽略,就需要我們增加額外的epoch數目來補償。
??這里的即有效學習率(effective learning rate)。不過作者好像用這個測度是為了進一步縮小訓練的步數。具體有什么重要意義,沒有深入了解。
??
總結:如何提高神經網絡性能?
-
使用warm-start
Fig. 4. 使用warm-start
【待續】
參考:
Cross Validated
- https://stats.stackexchange.com/questions/316464/how-does-batch-size-affect-convergence-of-sgd-and-why
- https://stats.stackexchange.com/questions/164876/tradeoff-batch-size-vs-number-of-iterations-to-train-a-neural-network?noredirect=1&lq=1
Quora
論文
On Large-Batch Training for DL——Gerneralization Gap and Sharp Minima
Visualizing the Loss Landscape of Neural Nets
DON’T DECAY THE LEARNING RATE, INCREASE THE BATCH SIZE
Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour
其他