1. 程式人生 > 其它 >Batch Normalization

Batch Normalization

BN回顧

首先Batch Normalization 中的Normalization被稱為標準化,通過將資料進行平和縮放拉到一個特定的分佈。BN就是在batch維度上進行資料的標準化。BN的引入是用來解決 internal covariate shift 問題,即訓練迭代中網路啟用的分佈的變化對網路訓練帶來的破壞。BN通過在每次訓練迭代的時候,利用minibatch計算出的當前batch的均值和方差,進行標準化來緩解這個問題。雖然How Does Batch Normalization Help Optimization 這篇文章探究了BN其實和Internal Covariate Shift (ICS)問題關係不大,本文不深入討論,這個會在以後的文章中細說。

一般來說,BN有兩個優點:

降低對初始化、學習率等超參的敏感程度,因為每層的輸入被BN拉成相對穩定的分佈,也能加速收斂過程。
應對梯度飽和和梯度彌散,主要是對於使用sigmoid和tanh的啟用函式的網路。

當然,BN的使用也有兩個前提:

minibatch和全部資料同分布。因為訓練過程每個minibatch從整體資料中均勻取樣,不同分佈的話minibatch的均值和方差和訓練樣本整體的均值和方差是會存在較大差異的,在測試的時候會嚴重影響精度。
batchsize不能太小,否則效果會較差,論文給的一般性下限是32。

再來回顧一下BN的具體做法:

訓練的時候:使用當前batch統計的均值和方差對資料進行標準化,同時優化優化gamma和beta兩個引數。另外利用指數滑動平均收集全域性的均值和方差。
測試的時候:使用訓練時收集全域性均值和方差以及優化好的gamma和beta進行推理。
可以看出,要想BN真正work,就要保證訓練時當前batch的均值和方差逼近全部資料的均值和方差。

來源:
https://mp.weixin.qq.com/s/Y4St2neLqH14qXxIviRWGw