(九)批量歸一化

2021-08-20 11:30:56 字數 1227 閱讀 6223

1、引入

對輸入資料做了歸一化處理,就是將每個特徵在所有樣本上的值轉歸一化成均值0方差1。這樣我們保證訓練資料裡數值都同樣量級上,從而使得訓練的時候數值更加穩定。對於淺層模型來說,通常資料歸一化預處理足夠有效。輸出數值在只經過幾個神經層後通常不會出現劇烈變化。但對於深層神經網路來說,情況一般比較複雜。因為每一層裡都對輸入乘以權重後得到輸出。當很多層這樣的相乘累計在一起時,乙個輸出資料較大的改變都可以導致輸出產生巨大變化,從而帶來不穩定性。

批量歸一化層的提出是針對這個情況。它將乙個批量裡的輸入資料進行歸一化然後輸出。如果我們將批量歸一化層放置在網路的各個層之間,那麼就可以不斷的對中間輸出進行調整,從而保證整個網路的中間輸出的數值穩定性。

2、批量歸一化層

均值和方差 μ←

1n∑i

=1nx

i,μ ←1

n∑i=

1nxi

,σ2←

1n∑i

=1n(

xi−μ

)2. σ2←

1n∑i

=1n(

xi−μ

)2.對於資料點 xi

x

i,對它的每乙個特徵維進行歸一化: xi

^←xi

−μσ2

+ϵ−−

−−−√

, xi^

←xi−

μσ2+

ϵ,這裡ϵ是乙個很小的常數保證不除以0。在上面歸一化的基礎上,批量歸一化層引入了兩個可以學習的模型引數,拉公升引數 γ 和偏移引數 β(通道數是6時候,他們是大小為6的向量)。它們是長為p(這裡p是指特徵的數目,在圖中即使通道數6)的向量,作用在xi

^ xi

^上: 這裡y=

y1,…

,yn y=y

1,…,

yn是批量歸一化層的輸出

訓練的時候使用較大的批量大小來獲取更好的計算效能,這時批量內樣本均值和方差的計算都較為準確。但在**的時候,我們可能使用很小的批量大小,甚至每次我們只對乙個樣本做**,這時我們無法得到較為準確的均值和方差。對此,解決方法的訓練批量歸一化層時候維護乙個移動平滑的樣本均值和方差,儲存起來在**時使用。

批歸一化(Batch Normalization)

深度學習 批歸一化 batch normalization bn是由google於2015年提出,這是乙個深度神經網路訓練的技巧,它不僅可以加快了模型的收斂速度,而且更重要的是在一定程度緩解了深層網路中 梯度瀰散 的問題,從而使得訓練深層網路模型更加容易和穩定。所以目前bn已經成為幾乎所有卷積神經網...

批量歸一化

批量歸一化實際上也是乙個層,可以直接呼叫torch的api。我們在訓練頂部的層,實際上幹的就是在擬合底部層。所以頂部的層會收斂的很快,但是底部的層資料變化後,頂部又要重新進行訓練。乙個簡單的實現就是將分布的均值和方差進行固定。這個實現也很簡單。mu frac sum x text sigma fra...

小結6 批量歸一化和殘差網路 凸優化 梯度下降

殘差網路 稠密連線densenet 凸優化梯度下降 處理後的任意乙個特徵在資料集中所有樣本上的均值為0 標準差為1。標準化處理輸入資料使各個特徵的分布相近 利用小批量上的均值和標準差,不斷調整神經網路中間輸出,從而使整個神經網路在各層的中間輸出的數值更穩定。參考 伯禹課程 殘差網路 resnet 深...