CS231n課程筆記5.3:Batch Normalization
阿新 • • 發佈:2019-02-06
CS231n簡介
Batch Normalization
1. 原理
BN(Batch Normalization)的原理很簡單,就是對於給定輸入做一個減均值除方差的歸一化(可以這麼做的原因是上訴歸一化操作可導,即可以做BP(反向傳播))。當然這麼做的優劣難於判斷,所以後文給出了改進的BN(實際使用的BN)。
注:訓練過程中使用每個Batch的均值和方差做歸一化,預測過程中則通過訓練資料進行估算(例如可以是訓練過程中均值和方差的平均值)。
2. 目的
BN的目的是使得下一層神經網路(通常是非線性的啟用函式)的輸入是在合理範圍內的(接近於均值為0方差為1的正態分佈),和資料預處理&合理初始化權重矩陣的目的相同(詳見 CS231n課程筆記5.2:資料預處理&權重矩陣初始化)。簡單地講,方差過小,則資料均接近於0,W難於更新;方差過大,則資料均飽和,導數為0,梯度難於傳播;如果均值過大或過小,都會使得資料位於飽和區,導數為0,梯度難於傳播(local gradient為權重×導數)。
3. 改進
上文的歸一化版本的BN有一個假設是非線性函式(如tanh)期待有一個標準正態分佈的輸入。這一假設是否成立有待商榷,所以有了改進版本的BN。即引入兩個引數(不是超引數):均值和方差,使得BN可以輸出任意均值方差的資料(這個均值和方差都是通過學習得到的)。特別的,如果學得的輸出所應該具有的均值和方差都等同於輸入,那麼BN實際上輸入輸出相同,資料流的資料沒有發生變化(從理論上說明加入BN不會使得結果變差)。詳情請參考 CS231n作業筆記2.4:Batchnorm的實現與使用。
4. 優點
- 優化了梯度流動
- 允許高learning rate
- 減少了對於權重初始化&資料預處理的強依賴
- 某種程度的正則化:BN把整個Batch的資料聯絡起來(而不是平行的互不相關的資料),使得學得的模型趨於穩定,不至於大幅晃動。