論文筆記:Batch Normalization

論文原文鏈接:https://arxiv.org/abs/1502.03167

Abstract

深度神經網絡訓練過程中前面層參數的變化會導致每一層輸入分佈發生改變,這使得網絡訓練變得複雜。這個問題還使得網絡需要以較低的學習率和仔細的參數初始化,從而降低了訓練速度,同時當採用飽和非線性激活函數時網絡訓練變得異常複雜。我們將這種現象叫做internal convariate shift,並且通過標準化每一層輸入來解決這個問題。該方法從以下兩點展現了自身的優勢:(1)將標準化過程變成網絡模型的一部分;(2)針對每一個mini-batch訓練樣本進行標準化。Batch Normalization讓我們可以使用比原來更大的初始學習率並且不用太在意初始化,有的時候甚至可以忽略掉Dropout。通過應用於一個最好的圖像分類模型,Batch Normalization用原來1/14的訓練次數達到了和原來一樣的準確率,並且以明顯的優勢擊敗了傳統的模型。我們用加了Batch Normalization網絡刷新了當前最好的ImageNet分類記錄,top-5錯誤率爲4.82%,超過了人類的識別率。

Introduction

該部分先介紹了深度學習在衆多領域取得的巨大成功。然後指出用mini-batch相比於單個樣本訓練的優勢:(1)用一個batch的樣本對所有訓練樣本梯度的估計比單個樣本估計結果更好更穩定;(2)用一個包含m個訓練樣本的batch訓練在主流計算平臺上比單個樣本訓練效率更高。接着文章又指出,雖然用隨機梯度下降法更簡單更高效,但是它需要對模型的超參數進行仔細地調整,尤其是學習率和初始化。進一步分析了網絡訓練過程中網絡每一層輸入分佈的變化會降低訓練的速度,增加訓練的複雜度。最後文章中提出一個觀點:固定分佈的網絡輸入可以有效處理internal convariate shift現象,對模型訓練有積極的影響。進而引出了文章的核心內容——Batch Normalization。

Towards Reducing Internal Covariate Shift

該部分首先指出文章的目的是降低網絡的Internal Covariate Shift,並以此引出解決思路是固定每一層輸入的分佈。接着文章又談到前人做的一些工作,在每一次次訓練中加入白化(關於白化的好處,我覺得博客http://blog.csdn.net/elaine_bao/article/details/50890491中分析得很直觀),改進網絡結構或改變優化算法,但這會影響梯度算法的性能(文中也舉例說明了爲什麼性能會下降,但這邊我自己也沒太能理解,有看懂的還望賜教)。最後文中指出,對每一層進行白化操作是不可取的,因爲白化需要計算協方差、求逆等運算,計算量太大,而且在反向傳播階段白化不一定可導,於是文章做了權衡,引出了針對mini-batch的標準化過程。

Normalization via Mini-Batch Statistics

針對網絡中的某一層,Batch Normalization先將該層輸入按每一個輸入維度標準化成零均值和單位方差,即:


BN_1

上式中,x(k) 表示某一層輸入的第k 個維度,它對應的期望和方差是根據整個訓練集計算出來的。但這種標準化存在兩個問題,第一個是該標準化弱化了原有網絡的表達能力,文中也舉了sigmoid 激活函數的例子來說明問題(標準化使得網絡只用了sigmoid 函數0附近的近似線性部分),第二個問題是求每一次計算運用整個訓練集計算量太大,這一點很不實際 。

針對第一個問題,文中在每一層的第k 個維度上引入兩個可訓練參數γ(k)β(k) 分別用於對標準化後的輸入做尺度變換和平移變換來近似增強模型的表達能力,即:


BN_2

針對第二個問題,文中在隨機梯度訓練中用一個mini-batch的樣本來代替全部訓練樣本。這樣原來的標準化可以用改進的算法1來表示:


BN_algorithm

但上面只是正向傳播過程,文中緊接着也給出了反向傳播的推導(鏈式法則):


BN_BP

可以看出,該過程也是可導的,因此可進行正常的反向傳播過程。

到這裏Batch Normalization 還沒有結束。想想看,在訓練過程中用一個batch的數據來標準化沒有問題,但是在測試過程中,我們爲了保證測試結果僅取決於模型的輸入(相當於同一個測試集每次的測試結果要要保證一致性),所以一旦模型訓練完成,我們在網絡的每一層將用整個數據集輸入的期望和方差來代替mini-batch。即:


這裏寫圖片描述
這裏寫圖片描述

需要說明的是,用樣本估計整體的期望和方差都要是無偏估計,因此估計方差前面需要乘mm1

最後完整的Batch Normalization算法表示如下:


這裏寫圖片描述

在該章的第2部分,文中給出了將Batch Normalization應用於卷積神經網絡的方法,通過在激活函數前加入Batch Normalization過程,並且同一個特徵圖的所有神經元採用相同的標準化方法(和權值共享有點像),batch size由原來的m 變成mpq ,其中(p,q) 是特徵圖的大小。而參數γ(k)β(k) 也是一個特徵圖對應一個(而不是一個神經元對應一個)。其他地方基本不變。

在這一章的最後一部分,文中簡單分析了Batch Normalization能夠允許網絡採用更大的學習率,進而加快網絡訓練的收斂速度,這一點在實驗部分有對比。

Experiments and Conclusion

在實驗部分,文中主要針對前面提到的各種關於Batch Normalization的優勢做對比實驗,如網絡訓練過程中輸入分佈變化對比(相對於原始網絡)、採用Batch Normalization前後和增大學習率前後的收斂速度和準確率對比以及最後的在ImageNet數據集上的性能對比(最好的結果是BN-Inception ensemble,Top-5 error = 4.82%),這一塊可以看論文原文,分析得很詳細,這裏就不再贅述了。

發佈了56 篇原創文章 · 獲贊 214 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章