背景
[作者:
DeepLearningStack,阿里巴巴算法工程師,開源TensorFlow Contributor]
歡迎大家關注我的公眾號,“互聯網西門二少”,我將繼續輸出我的技術干貨~
在分布式訓練時,提高計算通信占比是提高計算加速比的有效手段,當網絡通信優化到一定程度時,只有通過增加每個worker上的batch size來提升計算量,進而提高計算通信占比。然而一直以來Deep Learning模型在訓練時對Batch Size的選擇都是異常敏感的,通常的經驗是Large Batch Size會使收斂性變差,而相對小一點的Batch Size才能收斂的更好。當前學術界和工業界已經有一些論文來論證Large Batch Size對收斂性的影響,甚至提出了一些如何使用Large Batch去提高收斂性的方法,本文將對這些論文的重點和脈絡做一個梳理。
論文脈絡梳理
Large Batch Training是目前學術界和工業界研究的熱點,其理論發展非常迅速。但由於非凸優化和Deep Learning的理論研究本身還處於並將長期處於初級階段,所以即使存在各種各樣的理論解釋和證明,Large Batch Training相關的理論也尚未得到徹底的解釋。為了能夠讓讀者能夠更容易理解Large Batch Training當前的學術發展,也為了讓論文的閱讀更有脈絡,我們把學術界中的相關論文按照觀點的提出順序作為梳理如下。下面列出的每篇論文后面都有其要點,便於讀者閱讀時有個大概的感覺。因為本篇主要梳理Large Batch Training的理論部分,所以會對重點的論文進行分析解釋。
- 《ON LARGE-BATCH TRAINING FOR DEEP LEARNING: GENERALIZATION GAP AND SHARP MINIMA》:這篇論文解釋了Large Batch Training使收斂性變差的原因:使用Large Batch更容易落入Sharp Minima,而Sharp Minima屬於過擬合,所以其泛化性比較差。
- 《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》:這是FaceBook提出的一篇極具爭議性的論文,從實踐上來說它的的復現難度也是比較大的。該論文從實踐的角度出發,在ResNet上提出了一種針對Large batch training的訓練方法,即learning rate scaling rule。當batch size相對於baseline增加N倍時,learning rate也要相應的增加N倍,但也指出batch size的提升有一個upper bound,超過這個值,泛化性依然會變得很差。這篇論文對learning rate scaling rule有一些公式推導,但並不本質,更多的是做了較強的假設。總體來說,這是一篇實驗做得比較solid,但理論基礎並不豐滿的實踐論文。
- 《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》:這是Google發在ICLR 2018上的一篇理論和實驗都比較完善的論文。因為在ResNet上已經有了Learning Rate Scaling Rule的成功經驗,因此該論文從貝葉斯的角度解釋了泛化性和SGD。論文的核心觀點是指出了Batch Training相對於Full Batch Training來說引入了Noise,而Noise具有波動的效果,這在論文里被稱為Flucturate,它可以在更新時在一定程度上偏離Sharp Minima,從而進入Broad Minima,進而有了較好的泛化性,所以Noise起了較大的作用。進一步的,論文中將SGD的更新公式進行進行分析,等價為一個微分方程的定積分結果,通過將SGD更新公式與微分方程進行等價,導出了Flucturate的表達式,確定了影響其值的變動因素,即和Learning Rate與Batch size有關。若把Flucturate看做常量,那么Learning Rate與Batch Size可以近似看做是線性關系,這與論文2中的Learning Rate Scaling Rule一致。總體來說,這篇論文數學理論相對豐滿的解釋了Learning Rate Scaling Rule。
- 《Don't Decay the Learning Rate, Increase the Batch Size》:這是Google發在ICLR 2018上的第二篇論文,這篇論文的實驗和結論非常簡單,但是理論基礎依然來自於論文3,所以閱讀此篇論文之前一定要精度論文3。該論文從推導出的Mini Batch SGD的Flucturate公式出發,提出了一種使用Large Batch Training的加速方法。因為在一個完整的模型訓練過程中,通常會隨着輪數的增加而適當對Learning Rate做Decay。通過論文3中給出的公式,即Flucturate固定時,Learning Rate與Batch Size成正比關系,引發了思考:究竟是Learning Rate本身需要Decay才能使訓練過程繼續,還是Learning Rate的Decay間接影響了Noise的Flucturate才能使訓練過程繼續?通過實驗驗證,真正影響訓練過程的本質是Noise的Flucturate。因此我們考慮到Learning Rate與Batch Size的正比例關系,我們可以固定Learning Rate不變,而將Batch Size增加N倍來縮小Noise的Flucturate。定時增加Batch Size不但可以維持原有方式的Flucturate,還可以加速訓練過程,減少Update的更新頻次,增加計算通信占比,提高加速比。總體來說,該論文基於論文3為理論基礎,提出了一種逐漸增加Batch Size提高計算加速比和收斂加速比的方法。
要點梳理
可以按順序梳理成以下幾個方面
理論基礎
- 從貝葉斯理論角度出發,論證Broad Minima相對於Sharp Minima具有更好的泛化性
- 用貝葉斯理論解釋泛化性是有效的
- 貝葉斯理論與SGD
- 隨機偏微分方程的與Scaling Rule的推導
優化方法
- 使用Large Batch Training提高訓練速度
理論基礎
理論基礎來自於論文《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》,這里只對重點內容進行記錄。
從貝葉斯理論角度出發,論證broad minima相對於sharp minima具有更好的泛化性
內容
這部分公式較多,但確實是貝葉斯的理論基礎,所以盡量以簡單的形式展現出來。首先假設某模型M只有一個參數w,訓練樣本為x,Label為y,那么可以跟據貝葉斯公式直接寫出下面的等式
其中等號右面分母上的第一項可以看做似然函數
一般情況下,我們對模型參數的分布會做高斯假設










分析方法相同,不再贅述。
小結
這一部分作者從貝葉斯理論出發,從公式上推導出了Occam Razor的結論,並且論證了落入Sharp Minima的模型泛化性較差的原因,同時也得出了正則項對Sharp Minima具有懲罰作用。
用貝葉斯理論解釋泛化性是有效的
內容
這里作者借鑒了論文《Understanding deep learning requires rethinking generalization》中的實驗來從貝葉斯理論解釋泛化性,與ICLR 2017的這篇Best Paper使用的Deep Learning Model不同,作者使用了最簡單的線性模型進行實驗,原因是線性模型在計算Bayesian Evidence的時候比Deep Learning簡單很多。具體的實驗配置可以參考論文,這里直接給出圖表。
注:Bayesian Evidence實際上是Log Bayesian Evidence,對上面的結果取了對數。
這個實驗主要是為了證明Bayesian Evidence的曲線和Test Cross Entropy的變化趨勢是一致的,並且也復現了《Understanding deep learning requires rethinking generalization》中呢Deep Learning Model的結果。

小結
這一節中的實驗證明,使用貝葉斯理論解釋泛化性是有效的,並且得出了預期一致的結果。
貝葉斯理論與SGD
內容
在得出Bayesian Evidence和泛化性是強相關關系的結論之后,作者再次對SGD產生了思考。因為無論是Large Batch還是Small Batch,他們都是Full Batch的近似結果,所以都會引入Noise。作者認為造成不同Batch Size產生不同泛化性的根本原因是Noise的Flucturate程度。一定程度的Noise可以逃離Sharp Minima,帶領模型進入Bayesian Evidence較大的區域,即Broad Minima區域;而Batch Size越大,Noise的Flucturate就越小,就很容易陷入Sharp Minima。(這部分的公式推導在這里先不給出,因為這不是這篇文章的重點,有興趣的同學可以關注這篇論文的附錄A)這說明SGD的更新規則本身就帶有了一些正則化效果,這個正則化的效果很大程度上來自於SGD本身引入的Noise。這與ICLR 2017 Best Paper《Understanding deep learning requires rethinking generalization》觀察到的現象和得出的結論一致,該篇文章中主要思考的一個問題是,SGD在訓練完全部樣本之后,為什么不是記住所有的樣本,而是還學到了一些泛化性?
回到這篇論文,作者認定一定存在一個最佳Batch Size,這個Batch Size既沒有使模型進入Sharp Minima區域,又有一定的復雜性,使之讓當前的模型效果最好。於是做了不同的實驗,得到以下結果。


小結
這一部分從對貝葉斯與泛化性的思考入手,進而嘗試解釋SGD的特點,從而試圖驗證不同Batch Size對泛化性的影響。Batch Size的選取可以看成是Depth(Sharp)和Breadth(Broad)的Trade off,所以存在一個最佳的Batch Size,在其他超參數固定時使模型達到最好的泛化效果。
隨機偏微分方程的與scaling rule的推導
內容
因為Batch Size的選取,從貝葉斯角度去理解,實際上就是Depth和Breadth的Trade off。所以可以更進一步的對SGD引入的Noise進行分析,進一步去探究這個Noise帶來的Flucturate與哪些因素相關,這就需要和隨機偏微分方程建立聯系了。
首先,將SGD的update公式進行改寫。



其中N代表訓練集的樣本數,ε代表學習率。假設我們用<>代表期望的計算,那么我們有
根據中心極限定理,我們可以得出以下結論
所以標准的Stochastic Gradient Descent可以看成是標准梯度加上一個Noise,這個Noise就是α中的內容。下面進一步研究Noise的性質。
其中,F(w)為梯度的協方差項,δ_ij代表了Indicator,即當i=j時,δ_ij=1,否則等於0。這是因為樣本和樣本之間是相互獨立的關系,所以協方差應該等於0。如果看不懂這個公式可以按照下面的原型推理,一目了然。
根據協方差矩陣的可列可拆的性質,我們求得如下期望。
至此,Noise的統計特性已經全部計算出來,下面需要和隨機偏微分方程進行等價。首先,SGD的Update規則是一個離散的過程,不是連續的過程。如果我們把SGD的每一步想象成為一個連續的可微分的過程,每次Update一個偏微分算子,那么可以將上述學習率為ε的Update公式看成是某個微分方程的定積分結果,下面先介紹這個偏微分方程(這個偏微分方程的產生來自於《Handbook of Stochastic Methods》)。
這里t是連續的變量,η(t)代表了t時刻的Noise,具有如下性質。
因為我們知道Noise的期望必定等於0,而方差會有個波動的Scale,且波動的大小是以F(w)有關,所以這個Scale我們用g來表示,即Flucturate。而SGD的Update規則可以改寫如下所示。
為了探求g的變化因素,我們需要將偏微分方程的最后一項的方差和SGD的α方差對應起來,得到
上面最后的積分公式推導可能會有些迷惑,大概是會迷惑在積分的方差是如何化簡到二重積分這一過程,其實積分符號只是個對連續變量的求和過程,所以依然可以使用協方差的可列可拆的性質,如果還是不習慣,將積分符合和dt換成求和符號再去使用協方差公式即可輕松得到結論。










所以,我們得到了相當重要的結論,這是在一定程度上能夠解釋Learning Rate Scaling Rule的結論。
所以,我們得到了結論,SGD引入了一些Noise,這個Noise具有一定的Flucturate,它的大小是和Batch Size成反比,與Learning Rate成正比。

小結
這一節使用偏微分方程和SGD的更新規則,經過一系列的數學推導,得到了SGD引入的Noise對更新過程的Flucturation大小與Batch size和Learning rate的關系。這是這篇論文十分重要的結論,也是Learning Rate Scaling Rule的理論基石。
理論總結
至此,理論基礎部分梳理完畢,雖然公式較多較為復雜,但是結論卻非常簡單。作者從貝葉斯理論的角度出發,推導出了Occam Razor的形式表達,並從公式上論證了Sharp Minima相對於Broad Minima泛化性差的原因。而后又驗證了Bayesian Evidence和模型泛化性一致的結論,進而從貝葉斯理論的角度對SGD的更新過程進行了猜測:SGD會引入Noise,而正是Noise的Flucturate幫助模型在更新過程中逃離Sharp Minima,進入更高的Bayesian Evidence區域,即Broad Minima,所以指出Batch Size的選擇實際上是Noise Flucturate的調整,本質上是Sharp Minima和Broad Minima的Trade off。最后作者通過將SGD更新公式進行改寫,並聯合偏微分方程,得出了Noise的Fluctruate的形式表達,它Batch Size成反比,和Learning Rate成正比。
之前FAIR發表的論文《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》中提出了Learning Rate Scaling Rule在ResNet上具有很好的效果,該論文在實驗上做的比較充分,但是在理論上並沒有特別Solid,而Google的這篇論文可以作為它的理論基石之一。
優化方法
優化方法來自論文《Don't Decay the Learning Rate, Increase the Batch Size》,這篇論文在理解完前一篇論文之后會顯得非常簡單,完全是一篇實驗性論文,實驗做得較為充分,這里只會對重要內容做個簡單的梳理。
理論基礎公式
對於SGD來說,Flucturation形式表達為
對於Momentum-SGD來說,形式表達為(公式推導來自於langvein動力學)


Large batch training的優化原理
無論是SGD還是Momentum-SGD,我們都可以發現g與Batch Size成反比,與Learning Rate成正比,而在一般的Deep Learning Model訓練過程中,會在固定輪數對Learning Rate做Decay,這個過程讓作者引發了思考,究竟在訓練過程中,泛化性的提升是由於Learning Rate做Decay導致的,還是g發生變化導致的?如果是后者,那么定時增加Batch Size也應該會達到同樣的效果,因此作者做了幾組實驗。
作者做了三組實驗,一組是標准的對Learning Rate做Decay,一組是固定Rearning Rate不變,在原來發生Learning Rate Decay的輪數將Batch Size擴大N倍(N是Learning Rate Decay的Factor,即與Learning Rate的Decay為相同力度)。另一組是二者的結合Hybrid,即先Learning Rate Decay,后變化Batch Size。實驗證明三者的泛化性曲線相同,所以證明了Learning Rate Decay實際上是對g做了Scale down。然而增加Batch Size不但可以達到同樣的效果,還能提高計算通信占比,並且在整體訓練過程中減少Update的次數,這是Increase Batch Size Training的優化點。

關於Momentum-SGD
在Momentum-SGD的flucturation形式表達中,我們還看到了momentum的作用,即增加m的值可以增加g的值。但是實驗證明,增加m同時擴大batch size得到的泛化性相對於改變learning rate和batch size要差一些。這是因為提高momentum會使Momentum-SGD中的accumulator需要更多的輪數才能到達穩定的狀態,而在到達穩定狀態之前,update的scale是會被supressed的,作者在論文附錄中論證了這一觀點,這里不再詳細贅述。后續的實驗也證明了這一點。

更大Batch Size和消除Warm Up
在論文《Accurate, Large Minibatch SGD:Training ImageNet in 1 Hour》中,作者實驗的最大Batch Size為8192。然而在這篇論文中,作者使用更大的初始Batch Size(最大嘗試到65536)對ImageNet進行訓練,並且在固定的輪數對Noise做Decay(增加Batch Size)。作者消去了Warm Up的過程,但是引入了Mometum的超參調優,當使用更大Batch Size時,不僅調整初始Learning Rate,還增加m值來進一步放大Noise,幫助訓練過程逃離Sharp Minima。實驗效果如下。

小結
此篇論文更像是《A BAYESIAN PERSPECTIVE ON GENERALIZATION AND STOCHASTIC GRADIENT DESCENT》工作的延續,以該篇論證的理論基礎出發,得出了一種提高訓練計算加速比和收斂加速比的方法。結論和實驗比較簡單,但背后的數學推導較為復雜。
總結
工業界的分布式算力提升對Large Batch Training提出了需求,因為增加Batch Size顯然是提高計算通信占比的最佳方式,所以Large Batch Training固有的收斂性問題就成為了學術界研究的重點方向。本文通過梳理近些年來學術界對Large Batch Training的論文研究,從理論角度闡述了Large Batch Training造成收斂性較差的原因——容易陷入Broad Minima。而Google發表的論文從貝葉斯角度給出了另外的解釋——不同Batch Size訓練引入的Noise不同造成Fluctuate也不同,最終導致收斂性的不同。為了驗證這一觀點,Google又從實踐角度給出了驗證——通過固定Learning Rate,逐步增大Batch Size來穩定Fluctuate,達到使用大Batch Size加速訓練的目的。截止到目前,這些理論方面的論證和解釋依然處於蓬勃發展之中,未來還會有更深入研究在學術界中出現。