1. 程式人生 > >CS231n課程筆記5.3:Batch Normalization

CS231n課程筆記5.3:Batch Normalization

CS231n簡介

Batch Normalization

1. 原理

BN(Batch Normalization)的原理很簡單,就是對於給定輸入做一個減均值除方差的歸一化(可以這麼做的原因是上訴歸一化操作可導,即可以做BP(反向傳播))。當然這麼做的優劣難於判斷,所以後文給出了改進的BN(實際使用的BN)。
注:訓練過程中使用每個Batch的均值和方差做歸一化,預測過程中則通過訓練資料進行估算(例如可以是訓練過程中均值和方差的平均值)。
BN

2. 目的

BN的目的是使得下一層神經網路(通常是非線性的啟用函式)的輸入是在合理範圍內的(接近於均值為0方差為1的正態分佈),和資料預處理&合理初始化權重矩陣的目的相同(詳見

CS231n課程筆記5.2:資料預處理&權重矩陣初始化)。簡單地講,方差過小,則資料均接近於0,W難於更新;方差過大,則資料均飽和,導數為0,梯度難於傳播;如果均值過大或過小,都會使得資料位於飽和區,導數為0,梯度難於傳播(local gradient為權重×導數)。
BP

3. 改進

上文的歸一化版本的BN有一個假設是非線性函式(如tanh)期待有一個標準正態分佈的輸入。這一假設是否成立有待商榷,所以有了改進版本的BN。即引入兩個引數(不是超引數):均值和方差,使得BN可以輸出任意均值方差的資料(這個均值和方差都是通過學習得到的)。特別的,如果學得的輸出所應該具有的均值和方差都等同於輸入,那麼BN實際上輸入輸出相同,資料流的資料沒有發生變化(從理論上說明加入BN不會使得結果變差)。詳情請參考

CS231n作業筆記2.4:Batchnorm的實現與使用
improved BN

4. 優點

  1. 優化了梯度流動
  2. 允許高learning rate
  3. 減少了對於權重初始化&資料預處理的強依賴
  4. 某種程度的正則化:BN把整個Batch的資料聯絡起來(而不是平行的互不相關的資料),使得學得的模型趨於穩定,不至於大幅晃動