天天看點

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

雷鋒網(公衆号:雷鋒網)按:作者羅恒,地平線機器人技術資深算法研究員。2011年博士畢業于上海交通大學,後随yoshua bengio從事博士後研究,2014年加入百度深度學習實驗室,參與深度學習在搜尋中應用、paddlepaddle研發等工作。2016年加入地平線機器人公司,負責深度學習模型壓縮與加速。

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

訓練更深的神經網絡近年來一直是深度學習領域的重要趨勢之一,2015年初google提出的batch normalization 算法使得深層神經網絡訓練更加穩定,加快了收斂的速度,甚至同時起到了正則化的作用。本期羅老師将為大家分析batch normalization背後的動機和原理,以及後續的發展。

1.引言

現在正是神經網絡的第三次研究的熱潮,與之前兩次不同,這次神經網絡(深度學習)在很多實際問題上取得了巨大的成功,吸引了越來越多的人投身其中。剛開始接觸神經網絡的同學們,往往發現無從下手,有很多理論的文章,但是似乎對實際用處不大。談論最多的往往是各種各樣的tricks。

batch normalization [1] 是近年來最火爆的tricks之一,幾乎成了前向神經網絡的标配。在我看來,bn主要做的比較好的是在恰當的地方做标準化(normalization),在矩陣乘之後,在激活之前;bn的參數

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

使得輸出仍舊保持一定的靈活性;為什麼這兩方面比較重要下面我會做些分析。最後我會簡單讨論一些把bn應用到rnn的工作。

2. 升降桌和中心極限定理

在開始之前先來個廣告,地平線機器人最近搬家了,我發現所有的桌子都換成了電動升降桌,如下圖

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

前面的數字是桌面的高度,精确到毫米,那兩個三角可以調節升還是降,但是經常調完了之後出現“78.3”、“77.9”之類的數字,而我更喜歡整數“78”,我最常用的政策就是當接近78的時候,交替地(為了對符号均勻采樣)快速地按(力争每次按擊獨立)上升、下降,很快數字就會停到了78。這是因為按照中心極限定理,我壓了一堆均值接近0的随機數(+0.1, -0.2, +0.3之類的),那麼這些随機數的累加和(桌子的最終高度)會服從正态分布,我會很大機率見到0,也就是整數的高度。這裡也就引出了今天介紹batch normalization的一個角度,一些随機數的累加和很可能服從正态分布(normal distribution),中心極限定理。

3. 神經網絡訓練困難的一個例子

廣告結束,言歸正傳。神經網絡很多年了,一個很大的困難在于比較難訓練。比較難訓練的一個可能原因在于,神經網絡高度備援,同一個函數

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

我們可以找到很多很多參數不同的網絡來确切的等價于這個函數,而這些不同參數的網絡有的優化起來很容易,有的則非常困難。比如這樣一個函數,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

(這是個線性函數,裡面沒有非線性變換,主要是為了簡單。不過當我們用relu作為激活函數,當都是正的,當輸入也是正的,下面的分析也都可以保持正确),我們發現,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂
神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

表達的函數完全一樣,但是當我們做sgd的時候後者的優化會變得十分困難。假如些x=1,損失函數傳來的梯度是

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

(損失函數希望網絡能輸出個小的y),對于第二組參數代表的網絡求得的梯度為

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,如果拿這個去更新第二組參數,那麼數值小的參數改變巨大,大的參數則幾乎不變,訓練過程将會變得非常不穩定。

4. bn的動機和成功的原因

訓練神經網絡,通常是用反向傳播算法(bp)+随機梯度下降(sgd),具體到一個具體的第l層連接配接神經元i和神經元j的參數

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

的更新就是

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,通常我們會希望這個更新比較穩定。是以,首先有很多的工作在于選擇自适應的學習率

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,對于上面的例子如果我們能夠找到非常适合的各個參數大小不同的學習率,訓練過程依舊可以變得很穩定;其次,也有些tricks可以看做穩定從網絡上層回傳的錯誤

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,比如随機shuffle訓練資料,當樣本不均衡時做些采樣;第三類工作則是穩定

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

(其中

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

是某個非線性函數)。之前有過工作直接對

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

來标準化,效果有限。bn的結果之是以更好,可能作對了兩個地方,第一,正像我們之前講的,一堆随機數的和(

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

)更接近一個正态分布,在這個和上來做标準化更加容易使得

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

通過非線性

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

之後依然保持穩定,對于使用sigmoid非線性的時候,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

對于一個mini batch而言大概接近68%的值在[0.27 0.73]之間,95%的值在[0.12 0.88]之間,這當然很好,基本都在sigmoid函數的線性部分,不會出現飽和的情況(這裡的梯度不會接近0),這樣的好處就是訓練在一開始可以變得很快,如下圖。但是問題在于假如

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

真的始終是接正态分布,那麼這些神經元就很難達到它的飽和區域。

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

bn的作者引入的

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

可能是為了解決這個問題,但是我覺得可能很難,從

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

的梯度

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

可以看出,這個梯度可能會在一個mini batch内互相抵消,進而變得很小(有興趣的同學可以做實驗看看是不是會比較小)。當然也可能通過在開始初始化的時候把直接設成比較适合的值,不過這就是另一個問題了。從上圖也可以看出,似乎模型的在mnist上也是underfitting,是否是上面說的原因呢?

不過bn的設計的背景本身就是為了很深的網絡+relu這類激活函數。換句話說是如何使得深層relu網絡在較大學習率的情況下訓練保持穩定。那麼我們在relu的情況下繼續讨論,假設

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

來自正态分布,标準化之後(0均值1方差),那麼總會有一半左右的資料通過relu之後為0,也就是說目前這個神經元對于後續的計算不在起作用了(但是還是會有關于這些樣本的梯度傳回)。bn的作者引入的

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

可能是為了解決這個問題,從

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂
神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

可以看出,如果有更多的錯誤傳來,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

則會變小,進而允許更多的樣本向上傳遞非零的信号。在訓練過程中把神經元的平均的非零可視化出來可能也會比較有意思。從這裡的分析,也可以看出來,bn網絡相對而言更加需要全局的徹底的随機shuffle,如果沒有徹底的shuffle,幾條樣本總是出現在同一個mini batch中,那麼很可能有些樣本對于在經過标準化之後,在很多神經元的輸出總是零,進而難以将信号傳遞到頂層。這可能就是為什麼[1]提到增加了shuffle之後,結果在驗證集上有所變好。同時這也可能為什麼當使用了bn+随機shuffle之後dropout的作用在下降的一個原因,因為資料随機的組合,利用mini batch統計量标準化之後,對于特定樣本的特定神經元可能随機地為0,那麼和dropout的機制有類似的地方。但是如果使用很大的mini batch又會如何呢?

除了上面提到的在适合的地方做标準化、使用

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂
神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

保持靈活性之外,bn把均值和方差的計算也看作整個運算的一部分(參與梯度的計算),進而避免了反向過程中梯度試圖改變均值和方差,然而前向過程的bn層又會取消梯度的這些企圖。

bn取得了很大的成功,同時也暗示了後來的研究方向:首先,梯度消失和爆炸在rnn中更為常見,如何應用bn到rnn;其次,如何克服bn對mini batch的大小敏感;第三如何統一訓練和測試過程等等。

5. 應用bn到rnn的一些工作

bn之後,很快就開始有一些工作嘗試在rnn中加入bn。首先我們來看rnn,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,其中的激活函數常用的tanh。在[2]中先嘗試了直接加入bn,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,結果不好,即使是在訓練集也會略差(直接加入bn後模型的優化、拟合都出了問題)。[2]又改為

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,overfitting(訓練集好,驗證集差)。我的了解在于

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂
神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

可能是很不同的正态分布,他們求和之後再做标準化,可能會有害處。[3]中進一步做了如下調整,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

,這樣将兩個不同的正态分布分别标準化再相加就合理多了。同時[3]中還有兩個tricks,第一,不再初始化為1而是初始化為比較小的數,如0.1。我估計這個可能和lstm中大量的sigmoid和tanh有關(有興趣的同學可以自己分析看看);第二,不同的時間步t各自統計自己的mean和std,這個可能對于之前overfitting的一個回應,就是說工作[2]中overfitting的原因在于訓練的時候用來做标準化的統計量(每層每個mini batch計算得到)和測試的過程中使用的統計量(使用訓練中各層共享的、不斷地做moving avearge的統計量)顯著不同。

另外一個在rnn中做normalization比較重要的工作是[4]。layer normalization與bn的機制似乎不太相同,這裡不展開分析了。ln除了可以作用在rnn之外,也可以用于前向全連接配接的網絡,論文也也給出了比較試驗,如下圖,

神經網絡算法Batch Normalization的分析與展望 | 大牛講堂

從右邊的圖可以看出太小的mini batch對于bn無論是在訓練的過程和測試過程中使用訓練過程統計的統計量都造成了危害。從左邊的圖則可以看出,由于ln是對每條樣本做标準化進而失去了上面讨論的bn帶來的正則化效果。

參考文獻

[1] sergey ioffe and christian szegedy. batch normalization: accelerating deep network training by reducing internal covariate shift. icml, 2015.

[2] ce ́sar laurent, gabriel pereyra, phile ́mon brakel, ying zhang, and yoshua bengio. batch normalized recurrent neural networks. arxiv preprint arxiv:1510.01378, 2015.

[3] tim cooijmans, nicolas ballas, ce ́sar laurent, and aaron courville. recurrent batch normalization. arxiv preprint arxiv:1603.09025, 2016.

[4] ba, j. l., kiros, j. r., and hinton, g. e. (2016). layer normalization. arxiv preprint arxiv:1607.06450.

end

本周四(17日)晚19:00-19:45,羅恒博士即将參與大牛直播間線上活動,在“大牛部落”微信群中,為大家線上解答技術問題,并與大家一起展望batch normalization的未來。可申請加入“大牛部落”,參加線上直播。

注:本文由大牛講堂釋出雷鋒網,如需轉載請聯系原作者,并注明作者和出處,不得删減内容。有興趣可以關注公号【地平線機器人技術】,了解最新消息。

本文作者:大牛講堂

繼續閱讀