1. 程式人生 > >caffe學習筆記20-BatchNorm層分析

caffe學習筆記20-BatchNorm層分析

BatchNorm層優點:
    caffe master branch採用的是分離式寫法,conv層扔掉bias,接一個BN層,再接一個帶bias的Scale層。(相當於資料標準化,減均值然後除標準差)
    使用:在cnn 後增加,位於神經元非線性變換(relu)前,基本上大多數網路結構都能很自然地融合進去。
    論文中將Batch Normalization的作用說得突破天際,好似一下解決了所有問題,下面就來列舉一下:
  (1) 可以使用更高的學習率。如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函式有效下降,Batch Normalization將每層、每維的scale保持一致,那麼我們就可以直接使用較高的學習率進行優化。
  (2) 移除或使用較低的dropout。 dropout是常用的防止overfitting的方法,而導致overfit的位置往往在資料邊界處,如果初始化權重就已經落在資料內部,overfit現象就可以得到一定的緩解。論文中最後的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度。
  (3) 降低L2權重衰減係數。 還是一樣的問題,邊界處的區域性最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch Normalization,就可以把這個值降低了,論文中降低為原來的5倍。
  (4) 取消Local Response Normalization層。 由於使用了一種Normalization,再使用LRN就顯得沒那麼必要了。而且LRN實際上也沒那麼work。
  (5) 減少影象扭曲的使用。 由於現在訓練epoch數降低,所以要對輸入資料少做一些扭曲,讓神經網路多看看真實的資料。

總結;
優點:
    1.加速訓練
    2.減小權重的值的尺度的影響
    3.歸一化所帶來的噪聲也有模型正則化的作用

缺點:
    1.那就是在訓練時,因為要對資料進行scale,所以有很多矩陣乘法,導致訓練時間過長。

吐槽:貌似所有的帶來效果收益的操作都是噪聲所帶來的正則化的功勞,正則化是個啥概念?從幾何上可以這樣理解,NN其實就是在一個高維空間上構建了分類面,資料不變的情況下,這個分類面恰好貼合數據,完美fit訓練集,而新增噪聲後,相當於一些資料的位置不停的在變化,使得分類面發生了可包納的資料量增加了,從而增加的泛化能力。說來說去好像是Data Augmentation的功勞。