筆記:batch normalization:accelerating deep network training by reducing internal covariate shift

概述:訓練機器學習系統時,一個一般的假設是它每次的輸入的分佈是穩定的。如果不滿足這個假設,就是covariate shift,這個通常通過domian adaption解決。在訓練一個複雜的機器學習系統時,同樣要求這個sub-network對應的輸入(activation)分佈(distribution)是穩定的,如果不滿足這個假設,就是本文提出的internal covariate shift(ICS)。本文CNN訓練中,存在的ICS問題提出batch normalizaiton,一方面通過normalization使得每個網絡層的輸入儘量保持穩定的分佈(均值爲0以及單位方差),另一方面通過一個線性變化(transform)使得該層的輸入在表達能力上也同時保持較好的效果。
對於CNN訓練中存在的ICS問題,在原文中通過一個帶sigmoid activation function的層進行了說明,具體而言:首先這個中間層的輸入是原始數據在先網絡(preceding network)上變化後的結果,所以這層的輸入首先是跟它前面的網絡參數有很大關聯,這樣的話前面網絡參數的變化必然帶來這層在輸入上的變化,而且這個網絡深度越深,這種現象就會被擴大(amplify),從而導致輸入的不穩定;另一方面,對於一個sigmoid激活函數,它的導數隨着自變量絕對值增大而減小,輸入x的很多維上的梯度往往太小而導致梯度不能有效的傳播(saturation problem and gradient descent)。之前,解決這個問題的方法包括 using Rectified linear units,care initialization以及small learning rate。這往往導致的問題就是學習速度太慢並且學習的效果太依賴於初始化。如果能夠保持每層輸入的分佈穩定, 那麼這個問題就能很好的解決,本文從這個角度提出了batch normalization。除了保持輸入數據的穩定性之外,BN技術還能消除梯度算法中梯度與參數大小和初始值之間的關係,同時regularized the model並且減少對dropout的需求。文章通過實驗驗證,通過BN技術,可以顯著提高學習的效率,同時也能提高模型的性能。
關於數據白化(whitening)的介紹參考UFLDL:http://ufldl.stanford.edu/wiki/index.php/Whitening
對於每層的輸入單獨進行白化的過程的弊端主要有兩點:代價太高,同時不一定可導。本文基於白化進行了兩個簡化,從而提出了batch normalization。batch normalization可以分爲兩個步驟:normalization與linear transform。這個操作在訓練階段都是基於mini-batch的,對每個維度進行。下面從這兩個方面介紹BN:
1)normalize:這個步驟使得每個dimension上面的分佈穩定:在一個mini-batch上符合零均值以及單位方差的分佈。具體操作文章用下面的式子表示:
normalization
需要注意的地方在於這個是在一個mini-batch上的操作,其中的統計特徵的計算(均值和方差)也都是基於mini-batch的。
2)上面的normalization會改變輸入的表達能力,因此在normalization操作後增加了一個transform的操作,對於第k維,執行下面的線性變換:
linear transform
這上面從x到y的變換成爲batch normalization,它在文章用下面算法表示:
batch normalization
理解的時候需要注意的地方是:這兒的activation可以理解爲一個維度。BN操作這裏也是dimensionality independent。這裏的gamma和beta參數也是需要另外學習的。在反向傳播過程中,這個變換的梯度可以通過鏈導法則導出來,文章給出瞭如下公式:
backpropagation
在inference階段與training不同在於,這個transform在全部的數據(populations)上進行。文章用algorithm2表示:
algorithm2
接下來文章討論如何在卷積網絡中使用BN算法技術。BN技術實際可以用在任何層來輸入前面來使得這層網絡的輸入分佈變得穩定,從而提高整個模型的訓練速度。卷積網絡每層的變換一般可以看成一個仿射然後加上一個非線性映射,公式表示如下:
layer transform
其中u表示這層的輸入,W*u+b就是仿射(affinity transformation,就是線性變換);g就是非線性變化(nonlinearity)。作者在3.2部分討論了兩個在CNN網絡中應用BN技術時應該注意的問題:
a) 何時使用BN操作:要麼對輸入u使用,要麼對x=W*u+b使用。W*u+b通常而言,分佈上更加符合對稱、非稀疏的分佈,也就是分佈上更加符合高斯分佈,所以文章在x=W*u+b上使用BN技術。在使用BN技術中,由於會對輸入做零均值的normalization,所以可以將x中的常數項b忽略掉,也就是將原來的網絡變形爲下面的式子:
new layer
另外一點是這裏的變換都是在一個維度(activation)上面討論的,每個維度是相互獨立的。
b)對於卷積網絡而言,我們希望BN在對每個feature map進行normalization時使用同樣的映射,所以在卷積層使用的normalization參數都是從一個mini-batch上所有樣本學習。這與Inference階段的改變是相似的。
由於還沒動手做實驗,單純看了文章,難免理解有錯誤,多多指正。

Reference:
[1]Ioffe S, Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[J]., 2015.
[2]https://www.zhihu.com/question/38102762 知乎上的分析,非常地道
[3]http://blog.csdn.net/happynear/article/details/44238541C
[4]http://blog.csdn.net/happynear/article/details/44238541
[5]http://ufldl.stanford.edu/wiki/index.php/Whitening;很正的關於deep learning的學習資料。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章