批歸一化(Batch Normalization)的詳細解釋
以前在神經網絡訓練中,隻是對輸入層資料進行歸一化處理,卻沒有在中間層進行歸一化處理。要知道,雖然我們對輸入資料進行了歸一化處理,但是輸入資料經過矩陣乘法以及非線性運算之後,其資料分布很可能被改變,而随着深度網絡的多層運算之後,資料分布的變化将越來越大。如果我們能在網絡的中間也進行歸一化處理,是否對網絡的訓練起到改進作用呢?答案是肯定的。
這種在神經網絡中間層也進行歸一化處理,使訓練效果更好的方法,就是批歸一化Batch Normalization(BN)。
1. 批歸一化(BN)算法的優點
下面總結一下BN算法的優點:
- 減少了人為選擇參數。在某些情況下可以取消 dropout 和 L2 正則項參數,或者采取更小的 L2 正則項限制參數;
- 減少了對學習率的要求。現在我們可以使用初始很大的學習率或者選擇了較小的學習率,算法也能夠快速訓練收斂;
- 可以不再使用局部響應歸一化。BN 本身就是歸一化網絡(局部響應歸一化在 AlexNet 網絡中存在)
- 破壞原來的資料分布,一定程度上緩解過拟合(防止每批訓練中某一個樣本經常被挑選到,文獻說這個可以提高 1% 的精度)。
- 減少梯度消失,加快收斂速度,提高訓練精度。
2. 批歸一化(BN)算法流程
下面給出 BN 算法在訓練時的過程
輸入:上一層輸出結果 X = x 1 , x 2 , . . . , x m X = {x_1, x_2, ..., x_m} X=x1,x2,...,xm,學習參數 γ , β \gamma, \beta γ,β
算法流程:
- 計算上一層輸出資料的均值
μ β = 1 m ∑ i = 1 m ( x i ) \mu_{\beta} = \frac{1}{m} \sum_{i=1}^m(x_i) μβ=m1i=1∑m(xi)
其中,m是此次訓練樣本 batch 的大小。
- 計算上一層輸出資料的标準差
σ β 2 = 1 m ∑ i = 1 m ( x i − μ β ) 2 \sigma_{\beta}^2 = \frac{1}{m} \sum_{i=1}^m (x_i - \mu_{\beta})^2 σβ2=m1i=1∑m(xi−μβ)2
- 歸一化處理,得到
x ^ i = x i + μ β σ β 2 + ϵ \hat x_i = \frac{x_i + \mu_{\beta}}{\sqrt{\sigma_{\beta}^2} + \epsilon} x^i=σβ2
+ϵxi+μβ
其中 ϵ \epsilon ϵ 是為了避免分母為 0 而加進去的接近于 0 的很小值
- 重構,對經過上面歸一化處理得到的資料進行重構,得到
y i = γ x ^ i + β y_i = \gamma \hat x_i + \beta yi=γx^i+β
其中, γ , β \gamma, \beta γ,β 為可學習參數。
注:上述是 BN 訓練時的過程,但是當在投入使用時,往往隻是輸入一個樣本,沒有所謂的均值 μ β \mu_{\beta} μβ 和标準差 σ β 2 \sigma_{\beta}^2 σβ2。此時,均值 μ β \mu_{\beta} μβ 是計算所有 batch μ β \mu_{\beta} μβ 值的平均值得到,标準差 σ β 2 \sigma_{\beta}^2 σβ2 采用每個batch σ β 2 \sigma_{\beta}^2 σβ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 是對網絡權值 W W W 進行 normalization,是以也稱為 Weight Normalization;
Batch Normalization 是對網絡某一層輸入資料進行 normalization。
Weight Normalization相比Batch Normalization有以下三點優勢:
- Weight Normalization 通過重寫深度學習網絡的權重W的方式來加速深度學習網絡參數收斂,沒有引入 minbatch 的依賴,适用于 RNN(LSTM)網絡(Batch Normalization 不能直接用于RNN,進行 normalization 操作,原因在于:
- RNN 處理的 Sequence 是變長的;
- RNN 是基于 time step 計算,如果直接使用 Batch Normalization 處理,需要儲存每個 time step 下,mini btach 的均值和方差,效率低且占記憶體)。
- Batch Normalization 基于一個 mini batch 的資料計算均值和方差,而不是基于整個 Training set 來做,相當于進行梯度計算式引入噪聲。是以,Batch Normalization 不适用于對噪聲敏感的強化學習、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 對通過标量 g g g和向量 v v v對權重 W W W進行重寫,重寫向量 v v v 是固定的,是以,基于 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪聲。
- 不需要額外的存儲空間來儲存 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網絡。