標籤:
論文題目:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
首先看看部落格http://blog.csdn.net/happynear/article/details/44238541中最開始介紹的:
為什麼中心化,方差歸一化等,可以加快收斂?
補充一點:輸入x集中在0周圍,sigmoid更可能在其未飽和地區,梯度相對更大一些,收斂更快。
Abstract
1.深層網路訓練時,由於模型參數在不斷修改,所以各層的輸入的機率分布在不斷變化,這使得我們必須使用較小的學習率及較好的權重初值,導致訓練很慢,同時也導致使用saturating nonlinearities 啟用函數(如sigmoid,正負兩邊都會飽和)時訓練很困難。
這種現象加 internal covariate shift ,解決辦法是:對每層的輸入進行歸一化。
本文方法特點是 :making normalization a part of the model architecture and performing the normalization for each training mini-batch
Batch Normalization 讓我們可以使用更大的學習率,初值可以更隨意。它起到了正則項的作用,在某些情況下,有它就不需要使用Dropout了。
在Imagenet上, achieves the same accuracy with 14 times fewertraining steps
Introduction
1. SGD:
用minibatch去近似整個訓練集的梯度,在並行計算下,m個合成一個batch計算比單獨計算m次快很多。2.SGD雖然簡單高效,但是需要調節很多超參,學習率,初值等。各層權重參數嚴重影響每層的輸入,輸入的小變動隨著層數加深不斷被放大。這帶來一個問題:各層輸入分布的變動導致模型需要不停地去擬合新的分布。當一個學習系統的輸入分布是變化的時,即訓練集的樣本分布和測試集的樣本分布不一致,訓練的模型就很難有較好的泛化能力,這叫做 covariate shift (Shimodaira, 2000),解決辦法是domain adaptation (Jiang, 2008).和遷移學習。BN想把輸入的均值方差正常化,使輸入分布一致,但是僅均值、方差一樣的分布就一定一樣嗎?但是思路是這樣,而且效果好。 也可以不只關注學習系統整體,而關注它的內部,如一個subnetwork或 a layer:損失函數為:sub-network的損失函數為:SGD: is exactly equivalent to that for a stand-alone network F2 with input x.輸入X的分布保持不變的話,參數就不需要 readjust 去補償X分布的變化。注意Sigmoid 函數的特性,當輸入不集中在 0 附近時(飽和時),梯度會非常小,訓練會很慢。然而,輸入x受前面層的參數的影響,這些參數的變化很可能導致x過早變化到sigmoid函數的飽和地區,收斂減慢。這種影響隨著深度增加而加大。ReLU和好的初值、更小的學習率可以解決梯度消失的問題。但是,要是我們能讓輸入更穩定,就不太可能 get stuck in the saturated regime,訓練也會加快。 3.這種深度網路內部,參數不斷變化導致的各層輸入分布的變化 稱為 Internal Covariate Shift.Batch Normalization a.保持各層輸入的均值和方差穩定,來減弱 internal covariate shift;b.也讓梯度受參數及其初值的減小;c.它也算作正則項,減少對Dropout的依賴;d.它讓卡在飽和地區的機率降低,以便可以使用 saturating nonlinearitiesTowards Reducing Internal Covariate Shift1.網路輸入白化會加快收斂 (LeCun et al., 1998b; Wiesler & Ney, 2011) 並不是直接在每層正常化這麼簡單,如果模型的最佳化求梯度時不考慮到歸一化的話,會影響模型,就是你最佳化半天學到了某種分布,一正常化,就把這它破壞了。 2.正常化與某個樣本的各層輸入及所有樣本的各層輸入都有關(對某個正常化時用到了所有樣本):在反向傳導時,求導需考慮下面兩項:這樣基於整個訓練集的白化是非常耗時的,因為白化需要計算 x 的共變數矩陣及白化部分,還需計算BP演算法中的求導。但是基於某個或者部分樣本進行正常化又會changes the representation ability of a network所以本文在minibatch內歸一化,再用可以學習的 γ 和 β 來擬合minibatch的統計量與整個訓練集統計量之間的關係。Normalization via Mini-Batch Statistics
1.有兩個方面簡化計算:
a.把 x 向量中每個元素當成獨立隨機變數單獨進行正常化,向量中各變數獨立了,也沒有什麼共變數矩陣了。這種正常化在各變數相關的情況下依然能加速收斂,(LeCun et al., 1998b),此外,如果看成向量中變數的聯合機率,需要計算共變數矩陣,如果變數個數大於minibatch中樣本數,共變數矩陣無法復原!!
b.在每個mini-batch中計算得到mini-batch mean和variance來替代整體訓練集的mean和variance. Algorithm 1.
simply normalizing each input of a layer may change what the layer can represent.normalizing the inputs of a sigmoid would constrain them to the linear regime of the nonlinearity
為瞭解決這個問題,we make sure that the transformation inserted in the network can represent the identity transform.也就是用用可以學習的 γ 和 β 去擬合出與原先等價的變換。
採用 normalize via mini-batch statistics ,the statistics used for normalization can fully participate in the gradient backpropagation
Batch Normalizing Transform:
只要minibatch中的樣本採樣與同一分布,正常化後的輸入 x 期望為0,方差為1,把規範後的 x 進行線性變換得到 y 作為後續層的輸入,可以發現 後續層的輸入具有固定的均值和方差的。儘管 正常化後的 x 的聯合分布在訓練過程中會改變(源於第一個簡化,本文的正常化是把 x 向量中各個變數當作獨立的,單獨正常化的,所以他們的聯合分布並不穩定,只是單獨是穩定的),但還是可以使訓練加速。
2.最佳化中也需要對 BN 變換的兩個參數進行最佳化,鏈式法則求導就可以了:
BN 變換是可微的,通過BN變換,可以減弱輸入分布的 internal covariate shift ,並且學習到這個線性變換讓 BN變換 與網路本來的變換 等價,preserves the network capacity
Training and Inference with Batch-Normalized Networks
1.使用BN,把網路中各層輸入 x 變為 BN(x)即可。可以使用SGD及其各種變種訓練。
2.訓練時候在minibatch內正常化非常高效,但是推斷時就不需要而且不應該這樣了。推斷是我們希望輸出只取決於輸入,所以正常化中的期望、方差用全部資料計算:
就是各minibatch的方差求平均,minibatch數量為m。
注意:推斷時,均值和方差是固定的,那麼正常化這步線性變換可以和 γ、β 這步線性變換 合成 一個線性變換。訓練BN網路步驟如下:
Batch-Normalized Convolutional Networks
1. BN 可以用於任意層的 activations,但是把 BN 加在 W u +b 之後,非線性啟用函數之前更好!
因為前層的 activations (這層的輸入 u)是非線性輸出的,其分布很可能在訓練中變化;而 W u +b 更可能有 a symmetric, non-sparse distribution, that is “more Gaussian”
(Hyv¨arinen & Oja, 2000); 正常化它更有可能得到穩定的 activations 分布。
2. 注意 b 可以不管,因為減均值時 b 會被消掉,b 的作用其實被 β 代替了,所以:
BN是對 x =W u 的每一維單獨正常化
3.對卷積層,正常化也該保持卷積特性,即 相同feature map,不同 location 的元素 用相同方式正常化:
a mini-batch of size m and feature maps of size p × q, m*p*q個元素一起正常化!每個 feature map 有一對 γ β。
Batch Normalization enables higher learning rates
1.太大的學習率可能導致 梯度爆炸或消失以及卡在局部極值,BN可以防止參數小變換被逐層放大,通過修改 γ、β可以最佳化 activations的變化。
一般來說,大學習率增加參數的scale,在BP中放大了梯度,導致模型爆炸。然而使用了 BN,每層的BP不受其參數影響:
The scale does not affect the layer Jacobian nor, consequently, the gradient propagation.
而且:大權重會導致更小的梯度,所以BN可以穩定參數的增長。
2.BN還可以使 layer Jacobians 的奇異值接近 1 .這更利於訓練 (Saxe et al.,2013).
論文中有在高斯、獨立且變換為線性等條件下,可以推出來,但是說實話假設有點太苛刻,有點強行解釋的味道,論文也提出更普適的結論需後續研究。
Batch Normalization regularizes the model
1.使用BN後,訓練時對於單個樣本與整個minibatch綜合考慮了,training network no longer producing deterministic values for a given training example
這有利於提升網路的泛化能力,可以代替 Dropout
ExperimentsActivations over time
在mnist上用3個隱層,每層100個的神經元的網路進行實驗,初值為高斯,sigmoid函數,迭代50000次,minibatch為60個樣本,損失為交叉熵。
(a)可以看到,加BN測試精度更高,而且最開始就達到了較高的精度;
(b,c)可以明顯看到加BN後分布更加穩定。圖中三條線為{15,50,85}分位元。
後面的實驗就看論文了。
論文筆記-Batch Normalization