批歸一化(Batch Normalization)詳細解釋筆記

批歸一化(Batch Normalization)的詳細解釋

​ 以前在神經網絡訓練中,只是對輸入層數據進行歸一化處理,卻沒有在中間層進行歸一化處理。要知道,雖然我們對輸入數據進行了歸一化處理,但是輸入數據經過矩陣乘法以及非線性運算之後,其數據分佈很可能被改變,而隨着深度網絡的多層運算之後,數據分佈的變化將越來越大。如果我們能在網絡的中間也進行歸一化處理,是否對網絡的訓練起到改進作用呢?答案是肯定的。

​ 這種在神經網絡中間層也進行歸一化處理,使訓練效果更好的方法,就是批歸一化Batch Normalization(BN)。

1. 批歸一化(BN)算法的優點

下面總結一下BN算法的優點:

  1. 減少了人爲選擇參數。在某些情況下可以取消 dropout 和 L2 正則項參數,或者採取更小的 L2 正則項約束參數;
  2. 減少了對學習率的要求。現在我們可以使用初始很大的學習率或者選擇了較小的學習率,算法也能夠快速訓練收斂;
  3. 可以不再使用局部響應歸一化。BN 本身就是歸一化網絡(局部響應歸一化在 AlexNet 網絡中存在)
  4. 破壞原來的數據分佈,一定程度上緩解過擬合(防止每批訓練中某一個樣本經常被挑選到,文獻說這個可以提高 1% 的精度)。
  5. 減少梯度消失,加快收斂速度,提高訓練精度。

2. 批歸一化(BN)算法流程

下面給出 BN 算法在訓練時的過程

輸入:上一層輸出結果 X=x1,x2,...,xmX = {x_1, x_2, ..., x_m},學習參數 γ,β\gamma, \beta

算法流程:

  1. 計算上一層輸出數據的均值

μβ=1mi=1m(xi) \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i)

其中,m是此次訓練樣本 batch 的大小。

  1. 計算上一層輸出數據的標準差

σβ2=1mi=1m(xiμβ)2 \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2

  1. 歸一化處理,得到

x^i=xi+μβσβ2+ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon}

其中 ϵ\epsilon 是爲了避免分母爲 0 而加進去的接近於 0 的很小值

  1. 重構,對經過上面歸一化處理得到的數據進行重構,得到

yi=γx^i+β y_i = \gamma \hat x_i + \beta

其中,γ,β\gamma, \beta 爲可學習參數。

注:上述是 BN 訓練時的過程,但是當在投入使用時,往往只是輸入一個樣本,沒有所謂的均值 μβ\mu_{\beta} 和標準差 σβ2\sigma_{\beta}^2。此時,均值 μβ\mu_{\beta} 是計算所有 batch μβ\mu_{\beta} 值的平均值得到,標準差 σβ2\sigma_{\beta}^2 採用每個batch σβ2\sigma_{\beta}^2 的無偏估計得到。

3. 批歸一化和羣組歸一化比較

名稱 特點
批量歸一化(Batch Normalization,以下簡稱 BN) 可讓各種網絡並行訓練。但是,批量維度進行歸一化會帶來一些問題——批量統計估算不準確導致批量變小時,BN 的誤差會迅速增加。在訓練大型網絡和將特徵轉移到計算機視覺任務中(包括檢測、分割和視頻),內存消耗限制了只能使用小批量的 BN。
羣組歸一化 Group Normalization (簡稱 GN) GN 將通道分成組,並在每組內計算歸一化的均值和方差。GN 的計算與批量大小無關,並且其準確度在各種批量大小下都很穩定。
比較 在 ImageNet 上訓練的 ResNet-50上,GN 使用批量大小爲 2 時的錯誤率比 BN 的錯誤率低 10.6% ;當使用典型的批量時,GN 與 BN 相當,並且優於其他標歸一化變體。而且,GN 可以自然地從預訓練遷移到微調。在進行 COCO 中的目標檢測和分割以及 Kinetics 中的視頻分類比賽中,GN 可以勝過其競爭對手,表明 GN 可以在各種任務中有效地取代強大的 BN。

4. Weight Normalization和Batch Normalization比較

​ Weight Normalization 和 Batch Normalization 都屬於參數重寫(Reparameterization)的方法,只是採用的方式不同。

​ Weight Normalization 是對網絡權值WW 進行 normalization,因此也稱爲 Weight Normalization;

​ Batch Normalization 是對網絡某一層輸入數據進行 normalization。

​ Weight Normalization相比Batch Normalization有以下三點優勢:

  1. Weight Normalization 通過重寫深度學習網絡的權重W的方式來加速深度學習網絡參數收斂,沒有引入 minbatch 的依賴,適用於 RNN(LSTM)網絡(Batch Normalization 不能直接用於RNN,進行 normalization 操作,原因在於:
  • RNN 處理的 Sequence 是變長的;
  • RNN 是基於 time step 計算,如果直接使用 Batch Normalization 處理,需要保存每個 time step 下,mini btach 的均值和方差,效率低且佔內存)。
  1. Batch Normalization 基於一個 mini batch 的數據計算均值和方差,而不是基於整個 Training set 來做,相當於進行梯度計算式引入噪聲。因此,Batch Normalization 不適用於對噪聲敏感的強化學習、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 對通過標量gg和向量vv對權重WW進行重寫,重寫向量vv 是固定的,因此,基於 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪聲。
  2. 不需要額外的存儲空間來保存 mini batch 的均值和方差,同時實現 Weight Normalization 時,對深度學習網絡進行正向信號傳播和反向梯度計算帶來的額外計算開銷也很小。因此,要比採用 Batch Normalization 進行 normalization 操作時,速度快。 但是 Weight Normalization 不具備 Batch Normalization 把網絡每一層的輸出 Y 固定在一個變化範圍的作用。因此,採用 Weight Normalization 進行 Normalization 時需要特別注意參數初始值的選擇。

5. Batch Normalization在什麼時候用比較合適

​ 在CNN中,BN應作用在非線性映射前。在神經網絡訓練時遇到收斂速度很慢,或梯度爆炸等無法訓練的狀況時可以嘗試BN來解決。另外,在一般使用情況下也可以加入BN來加快訓練速度,提高模型精度。

​ BN比較適用的場景是:每個mini-batch比較大,數據分佈比較接近。在進行訓練之前,要做好充分的shuffle,否則效果會差很多。另外,由於BN需要在運行過程中統計每個mini-batch的一階統計量和二階統計量,因此不適用於動態的網絡結構和RNN網絡。

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