Deep Learning中的Large Batch Training相關理論與實踐

背景

[做者: 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的理論部分,因此會對重點的論文進行分析解釋。
  • 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,那麼能夠跟據貝葉斯公式直接寫出下面的等式
其中等號右面分母上的第一項能夠看作似然函數
通常狀況下,咱們對模型參數的分佈會作高斯假設
因此有
能夠看出這個公式就是模型訓練中Loss Function的主要部分,前面一項H(w;M)是Cost,然後面一項是正則項。咱們要最小化Loss Function,本質上是最大化C(w;M)這一項。假設咱們訓練了兩組模型參數,如何判斷哪個模型的泛化性更好?這裏使用以下公式來判斷。
等式右面的第二項是對模型的偏好因子,在這裏應該均設置爲1,消除偏置的影響。右邊第一項咱們叫作Bayesian Evidence Ratio,它描述了訓練樣本改變了咱們對模型先驗偏好的程度。爲了計算這個比值,咱們須要計算分子和分母。
使用泰勒展開式對C(w;M)在最優值w_0附近進行近似展開,獲得以下式子。
至此,咱們能夠對上述公式的結果進行分析。上述公式中最後一項其實就是Occam Factor。經過分析咱們也知道二階導數正負衡量的是函數的凹凸性,而二階導數的大小衡量和曲率相關。當C''(w_0)越大時,該位置附近就越彎曲,越接近sharp minima,進而致使P(y|x;M)的機率越低,這符合Occam Razor的原則,越簡單的模型泛化性越好,這是由於簡單的模型是在Broad Minima上。也能夠提升正則係數對C''(w_0)進行懲罰,從而控制Occam factor,提升泛化性。當擴展到多個參數後,該公式以下所示。
分析方法相同,再也不贅述。

小結

這一部分做者從貝葉斯理論出發,從公式上推導出了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區域,又有必定的複雜性,使之讓當前的模型效果最好。因而作了不一樣的實驗,獲得如下結果。
這些實驗其實就是驗證不一樣Batch Size訓練出的模型在test集上的表現,並說明存在一個最佳的Batch Size,使用它訓練出的模型,其泛化性優於其餘Batch Size訓練出的模型。

小結

這一部分從對貝葉斯與泛化性的思考入手,進而嘗試解釋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加速訓練的目的。截止到目前,這些理論方面的論證和解釋依然處於蓬勃發展之中,將來還會有更深刻研究在學術界中出現。
相關文章
相關標籤/搜索