卷積神經網路CNN(2)—— BN(Batch Normalization) 原理與使用過程詳解
前言
Batch Normalization是由google提出的一種訓練優化方法。參考論文:Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift
網上對BN解釋詳細的不多,大多從原理上解釋,沒有說出實際使用的過程,這裡從what, why, how三個角度去解釋BN。
What is BN
Normalization是資料標準化(歸一化,規範化),Batch 可以理解為批量,加起來就是批量標準化。
先說Batch是怎麼確定的。在CNN中,Batch就是訓練網路所設定的圖片數量batch_size。
Normalization過程,引用論文中的解釋:
輸入:輸入資料x1…xm(這些資料是準備進入啟用函式的資料)
計算過程中可以看到,
1.求資料均值;
2.求資料方差;
3.資料進行標準化(個人認為稱作正態化也可以)
4.訓練引數γ,β
5.輸出y通過γ與β的線性變換得到新的值
在正向傳播的時候,通過可學習的γ與β引數求出新的分佈值
在反向傳播的時候,通過鏈式求導方式,求出γ與β以及相關權值
Why is BN
解決的問題是梯度消失與梯度爆炸。
關於梯度消失,以sigmoid函式為例子,sigmoid函式使得輸出在[0,1]之間。
事實上x到了一定大小,經過sigmoid函式的輸出範圍就很小了,參考下圖
如果輸入很大,其對應的斜率就很小,我們知道,其斜率(梯度)在反向傳播中是權值學習速率。所以就會出現如下的問題,
在深度網路中,如果網路的啟用輸出很大,其梯度就很小,學習速率就很慢。假設每層學習梯度都小於最大值0.25,網路有n層,因為鏈式求導的原因,第一層的梯度小於0.25的n次方,所以學習速率就慢,對於最後一層只需對自身求導1次,梯度就大,學習速率就快。
這會造成的影響是在一個很大的深度網路中,淺層基本不學習,權值變化小,後面幾層一直在學習,結果就是,後面幾層基本可以表示整個網路,失去了深度的意義。
關於梯度爆炸,根據鏈式求導法,
第一層偏移量的梯度=啟用層斜率1x權值1x啟用層斜率2x…啟用層斜率(n-1)x權值(n-1)x啟用層斜率n
假如啟用層斜率均為最大值0.25,所有層的權值為100,這樣梯度就會指數增加。
How to use BN
先解釋一下對於圖片卷積是如何使用BN層。
這是文章卷積神經網路CNN(1)中5x5的圖片通過valid卷積得到的3x3特徵圖(粉紅色)。這裡假設通道數為1,batch為1,即大小為[1,1,5,5]。特徵圖裡的值,作為BN的輸入,也就是這5x5個數值通過BN計算並儲存γ與β,通過γ,β以及輸入x計算BN層輸出。正向傳播過程如上述,對於反向傳播就是根據求得的γ與β計算梯度。
這裡需要著重說明的細節:
網路訓練中以batch_size為最小單位不斷迭代,很顯然,新的batch_size進入網路,會產生新的γ與β。在caffe的實現中,通過滑動平滑的方式更新γ與β。
結合論文中給出的使用過程進行解釋
輸入:待進入啟用函式的變數
輸出:
1.對於K個啟用函式前的輸入,所以需要K個迴圈。每個迴圈中按照上面所介紹的方法計算γ與β。通過γ,β與輸入x的變換求出BN層輸出。
2.在反向傳播時利用γ與β求得梯度從而改變訓練權值(變數)。
3.通過不斷迭代直到訓練結束,求得關於不同層以及不同batch的γ與β。
4.對於K個啟用函式前的輸入,每個迴圈中,計算該層所有batch的γ與β,並對其做無偏估計得到E[x]與Var[x]。
5.在預測的正向傳播時,使用訓練時最後得到的γ與β,以及其無偏估計,通過圖中11:所表示的公式計算BN層輸出。
至此,BN層的原理與使用過程就解釋完畢,給出的解釋都是本人覺得值得注意或這不容易瞭解的部分,如有錯漏,請指正。
BN層正向傳播之前存在勘誤,博文已經過修改
相關文章
- 卷積神經網路(CNN)詳解卷積神經網路CNN
- 卷積神經網路CNN卷積神經網路CNN
- 【深度學習原理第4篇】卷積神經網路詳解(CNN)深度學習卷積神經網路CNN
- 看懂卷積神經網路(CNN)卷積神經網路CNN
- CNN神經網路之卷積操作CNN神經網路卷積
- tensorflow使用BN—Batch NormalizationBATORM
- 卷積神經網路(CNN)介紹與實踐卷積神經網路CNN
- Tensorflow-卷積神經網路CNN卷積神經網路CNN
- 卷積神經網路(CNN)模型結構卷積神經網路CNN模型
- 直白介紹卷積神經網路(CNN)卷積神經網路CNN
- CNN-卷積神經網路簡單入門(2)CNN卷積神經網路
- 卷積神經網路-2卷積神經網路
- Keras上實現卷積神經網路CNNKeras卷積神經網路CNN
- 卷積神經網路CNN-學習1卷積神經網路CNN
- CNN筆記:通俗理解卷積神經網路CNN筆記卷積神經網路
- BN(Batch Normalization)層的詳細介紹BATORM
- TensorFlow上實現卷積神經網路CNN卷積神經網路CNN
- 【機器學習基礎】卷積神經網路(CNN)基礎機器學習卷積神經網路CNN
- 詳解卷積神經網路(CNN)在語音識別中的應用卷積神經網路CNN
- 卷積神經網路 part2卷積神經網路
- 卷積神經網路卷積神經網路
- 卷積神經網路:Convolutional Neural Networks(CNN)卷積神經網路CNN
- 卷積神經網路(Convolutional Neural Network,CNN)卷積神經網路CNN
- 卷積神經網路(CNN)反向傳播演算法卷積神經網路CNN反向傳播演算法
- Batch Normalization: 如何更快地訓練深度神經網路BATORM神經網路
- 吳恩達《卷積神經網路》課程筆記(1)– 卷積神經網路基礎吳恩達卷積神經網路筆記
- 卷積神經網路—基本部件(2)卷積神經網路
- 神經網路之卷積篇:詳解經典網路(Classic networks)神經網路卷積
- 卷積神經網路數學原理解析卷積神經網路
- 【python實現卷積神經網路】卷積層Conv2D反向傳播過程Python卷積神經網路反向傳播
- 5.2.1 卷積神經網路卷積神經網路
- 卷積神經網路概述卷積神經網路
- 解密卷積神經網路!解密卷積神經網路
- 卷積神經網路初探卷積神經網路
- 卷積神經網路-1卷積神經網路
- 卷積神經網路-3卷積神經網路
- 卷積神經網路(CNN)前向傳播演算法卷積神經網路CNN演算法
- 【深度學習筆記】Batch Normalization (BN)深度學習筆記BATORM