雷鋒網按:作者羅恆,地平線機器人技術資深算法研究員。2011年博士畢業於上海交通大學,後隨Yoshua Bengio從事博士後研究,2014年加入百度深度學習實驗室,參與深度學習在搜索中應用、PaddlePaddle研發等工作。2016年加入地平線機器人公司,負責深度學習模型壓縮與加速。
訓練更深的神經網絡近年來一直是深度學習領域的重要趨勢之一,2015年初Google提出的Batch Normalization 算法使得深層神經網絡訓練更加穩定,加快了收斂的速度,甚至同時起到了正則化的作用。本期羅老師將為大家分析Batch Normalization背後的動機和原理,以及後續的發展。
1.引言
現在正是神經網絡的第三次研究的熱潮,與之前兩次不同,這次神經網絡(深度學習)在很多實際問題上取得了巨大的成功,吸引了越來越多的人投身其中。剛開始接觸神經網絡的同學們,往往發現無從下手,有很多理論的文章,但是似乎對實際用處不大。談論最多的往往是各種各樣的tricks。
Batch Normalization [1] 是近年來最火爆的tricks之一,幾乎成了前向神經網絡的標配。在我看來,BN主要做的比較好的是在恰當的地方做標準化(Normalization),在矩陣乘之後,在激活之前;BN的參數和使得輸出仍舊保持一定的靈活性;為什麼這兩方面比較重要下面我會做些分析。最後我會簡單討論一些把BN應用到RNN的工作。
2. 升降桌和中心極限定理
在開始之前先來個廣告,地平線機器人最近搬家了,我發現所有的桌子都換成了電動升降桌,如下圖
前面的數字是桌面的高度,精確到毫米,那兩個三角可以調節升還是降,但是經常調完了之後出現「78.3」、「77.9」之類的數字,而我更喜歡整數「78」,我最常用的策略就是當接近78的時候,交替地(為了對符號均勻採樣)快速地按(力爭每次按擊獨立)上升、下降,很快數字就會停到了78。這是因為按照中心極限定理,我壓了一堆均值接近0的隨機數(+0.1, -0.2, +0.3之類的),那麼這些隨機數的累加和(桌子的最終高度)會服從正態分布,我會很大概率見到0,也就是整數的高度。這裡也就引出了今天介紹Batch Normalization的一個角度,一些隨機數的累加和很可能服從正態分布(Normal distribution),中心極限定理。
3. 神經網絡訓練困難的一個例子
廣告結束,言歸正傳。神經網絡很多年了,一個很大的困難在於比較難訓練。比較難訓練的一個可能原因在於,神經網絡高度冗餘,同一個函數我們可以找到很多很多參數不同的網絡來確切的等價於這個函數,而這些不同參數的網絡有的優化起來很容易,有的則非常困難。比如這樣一個函數,(這是個線性函數,裡面沒有非線性變換,主要是為了簡單。不過當我們用ReLU作為激活函數,當都是正的,當輸入也是正的,下面的分析也都可以保持正確),我們發現,和表達的函數完全一樣,但是當我們做sgd的時候後者的優化會變得十分困難。假如些X=1,損失函數傳來的梯度是(損失函數希望網絡能輸出個小的y),對於第二組參數代表的網絡求得的梯度為,如果拿這個去更新第二組參數,那麼數值小的參數改變巨大,大的參數則幾乎不變,訓練過程將會變得非常不穩定。
4. BN的動機和成功的原因
訓練神經網絡,通常是用反向傳播算法(BP)+隨機梯度下降(SGD),具體到一個具體的第L層連接神經元i和神經元j的參數的更新就是,通常我們會希望這個更新比較穩定。因此,首先有很多的工作在於選擇自適應的學習率,對於上面的例子如果我們能夠找到非常適合的各個參數大小不同的學習率,訓練過程依舊可以變得很穩定;其次,也有些tricks可以看做穩定從網絡上層回傳的錯誤,比如隨機shuffle訓練數據,當樣本不均衡時做些採樣;第三類工作則是穩定(其中,是某個非線性函數)。之前有過工作直接對來標準化,效果有限。BN的結果之所以更好,可能作對了兩個地方,第一,正像我們之前講的,一堆隨機數的和()更接近一個正態分布,在這個和上來做標準化更加容易使得通過非線性之後依然保持穩定,對於使用sigmoid非線性的時候,對於一個mini batch而言大概接近68%的值在[0.27 0.73]之間,95%的值在[0.12 0.88]之間,這當然很好,基本都在sigmoid函數的線性部分,不會出現飽和的情況(這裡的梯度不會接近0),這樣的好處就是訓練在一開始可以變得很快,如下圖。但是問題在於假如真的始終是接正態分布,那麼這些神經元就很難達到它的飽和區域。
BN的作者引入的可能是為了解決這個問題,但是我覺得可能很難,從的梯度可以看出,這個梯度可能會在一個mini batch內相互抵消,從而變得很小(有興趣的同學可以做實驗看看是不是會比較小)。當然也可能通過在開始初始化的時候把直接設成比較適合的值,不過這就是另一個問題了。從上圖也可以看出,似乎模型的在MNIST上也是underfitting,是否是上面說的原因呢?
不過BN的設計的背景本身就是為了很深的網絡+ReLU這類激活函數。換句話說是如何使得深層ReLU網絡在較大學習率的情況下訓練保持穩定。那麼我們在ReLU的情況下繼續討論,假設來自正態分布,標準化之後(0均值1方差),那麼總會有一半左右的數據通過ReLU之後為0,也就是說當前這個神經元對於後續的計算不在起作用了(但是還是會有關於這些樣本的梯度傳回)。BN的作者引入的可能是為了解決這個問題,從的梯度可以看出,如果有更多的錯誤傳來,則會變小,從而允許更多的樣本向上傳遞非零的信號。在訓練過程中把神經元的平均的非零可視化出來可能也會比較有意思。從這裡的分析,也可以看出來,BN網絡相對而言更加需要全局的徹底的隨機shuffle,如果沒有徹底的shuffle,幾條樣本總是出現在同一個mini batch中,那麼很可能有些樣本對於在經過標準化之後,在很多神經元的輸出總是零,從而難以將信號傳遞到頂層。這可能就是為什麼[1]提到增加了shuffle之後,結果在驗證集上有所變好。同時這也可能為什麼當使用了BN+隨機shuffle之後dropout的作用在下降的一個原因,因為數據隨機的組合,利用mini batch統計量標準化之後,對於特定樣本的特定神經元可能隨機地為0,那麼和dropout的機制有類似的地方。但是如果使用很大的mini batch又會如何呢?
除了上面提到的在適合的地方做標準化、使用和保持靈活性之外,BN把均值和方差的計算也看作整個運算的一部分(參與梯度的計算),從而避免了反向過程中梯度試圖改變均值和方差,然而前向過程的BN層又會取消梯度的這些企圖。
BN取得了很大的成功,同時也暗示了後來的研究方向:首先,梯度消失和爆炸在RNN中更為常見,如何應用BN到RNN;其次,如何克服BN對mini batch的大小敏感;第三如何統一訓練和測試過程等等。
5. 應用BN到RNN的一些工作
BN之後,很快就開始有一些工作嘗試在RNN中加入BN。首先我們來看RNN,,其中的激活函數常用的tanh。在[2]中先嘗試了直接加入BN,,結果不好,即使是在訓練集也會略差(直接加入BN後模型的優化、擬合都出了問題)。[2]又改為,overfitting(訓練集好,驗證集差)。我的理解在於和可能是很不同的正態分布,他們求和之後再做標準化,可能會有害處。[3]中進一步做了如下調整,,這樣將兩個不同的正態分布分別標準化再相加就合理多了。同時[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之外,也可以用於前向全連接的網絡,論文也也給出了比較試驗,如下圖,
從右邊的圖可以看出太小的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的未來。可申請加入「大牛部落」,參加線上直播。
註:本文由大牛講堂發布雷鋒網,如需轉載請聯繫原作者,並註明作者和出處,不得刪減內容。有興趣可以關注公號【地平線機器人技術】,了解最新消息。