2.3.2 Batch Norm介绍
正則化網絡的激活函數
Batch歸一化會使你的參數搜索變得很容易,使神經網絡對超參數選擇變得更加穩定。超參數范圍會更龐大,工作效率也會更好。也會讓你訓練出更為深層次的神經網絡。下面我們具體介紹一下Batch歸一化
如圖右側的圈圈所示,我們之前已經學過了通過歸一化手段如何將扁平的圈圈變成比較一般的圓形,但是這只是對邏輯回歸而言的,對于神經網絡應該怎么做呢?
我們在歸一化的例子中看到了,如果對x1,x2和x3進行歸一化,那么可以學到更好地w和b,同樣的道理,在神經網絡里,我們要想學到不錯的w3和b3,那么需要對a2進行歸一化處理。
那么問題是對于隱藏層,比如說這里的a2,能否實現歸一化呢?
Batch歸一化就可以做到這一點。實際上我們是對Z2進行的歸一化而不是對a2進行的歸一化。下面我們來介紹一下如何進行歸一化
如圖所示,假設你又一些隱藏單元,從z1一直到zm,這些都是Z[l]Z[l]層的。
對z實行了正則化之后我們有如下公式:
Z(i)?=γZ(i)norm+βZ(i)?=γZnorm(i)+β
這里 γγ和 ββ是模型的學習參數。我們可以使用梯度下降或者一些其他的梯度下降法。比如說momentum或者Adam來更新這兩個參數,就如同神經網絡的權重一樣。
事實上,如果γ=σ2+????√γ=σ2+ 而β=μβ=μ那么,實際上這個式子就可以精確地轉化為Z_norm的形式。
Batch歸一化的好處就是他適用的歸一化過程不僅是輸入層,同樣也適用于隱藏層。
需要注意的是我們通過調節γγ和ββ,可以讓正則化后為標準正太分布,也可以不是標準正態分布,這樣就像右下圖中,我們如果用sigmoid函數來擬合的話,如果是標準正態分布就只能停留在線性段,而如果不是標準正態分布就可以更好的利用非線性區域。這里,均值和方差有γγ和ββ這兩個參數共同來控制。
將Batch Norm擬合進神經網絡
我們之前看了Batch Norm在單一層的神經網絡進行正則化,那么現在我們看看在多層是如何實現的。
如圖所示,這就是Batch歸一化的實踐方法。
在現實中,Batch歸一化通常是和mini-batch一起使用的。也就是將batch分成mini-batch然后按照上面的步驟進行計算。
需要注意的是,如上圖的下半部分所示z=wa+b,但是如果我們對Z進行歸一化,比如說零均值和標準方差進行歸一化,那么得到的結果是無論b是多少,都要被減去。因為你在計算歸一化的過程中你要計算z的均值,然后再減去均值。所以在mini-batch中增加任何常數,值都不會發生改變。因為加的任何常數都會被均值減去所抵消。因此,如果進行歸一化的話,可以不寫常數b。
Z(i)?=γZ(i)norm+βZ(i)?=γZnorm(i)+β
最后我們用這個公式,轉而就用γγ和ββ來控制了。我們不用b而轉而用ββ,說明控制參數會影響偏置條件。
最后我們來做一個總結
Batch Norm為什么奏效
Batch歸一化起作用的一個原因是通過歸一化輸入特征值x可以獲得范圍內的值,起到加速學習的作用。但是還有更深層次的原因,我們一起來看一下:
batch歸一化有效的另外一個原因是他可以使網絡中比較深層次的網絡更能經受住變化。
如圖所示,我們執行貓的圖片分類任務,那么可能左側用黑貓訓練的結果,并不能用于很好的識別其他啊顏色的貓。
使你的數據改變分布(就是上面說的用黑貓也能識別其他貓)這種事情有一個奇怪的名字叫covariate shift這個想法就是如果你學到了x到y的映射,此時如果x的分布發生了改變,那么可能需要重新訓練你的算法了。那么這個問題如何應用到神經網絡中?
如圖所示的一個神經網絡,我們遮住前面的部分,只從第三層開始。如果我們只看第三層的話,我們希望學出w和b來很好的擬合將輸入a映射到y。然而事實上是前面還有兩層w和b,如果前面兩層的w和b發生了變化,那么輸入的a也會發生變化,這就會影響到第三層的w和b,于是我們可以說,a是在不斷變化過程中,是一個covariate shift問題。
batch歸一化做的,就是減少這些隱藏層值分布變化數量。如上圖的下部分所示,我們繪制了z1和z2的平面圖。batch歸一化說的是z1和z2的值可以改變,而這兩個數的確會變化,只要神經網絡一更新參數,這兩個數就會發生變化。而batch歸一化可以保證,無論z1和z2怎么變化,他們的均值和方差保持不變。
batch歸一化做的是限制前層的更新,會影響數值的分布情況。它的作用是減弱前層參數的作用與后層參數作用之間的聯系,他使得網絡中每一層都可以自己學習,稍稍獨立于其它層,有助于更好的進行學習。因為他們被同一個均值和方差限制,導致后面的層學起來會更容易一些。
batch歸一化還有一個作用,他有一點正則化的效果
在mini-batch上計算均值和方差而不是在整個數據集上計算均值和方差的話容易會引起一點噪音。所以縮放從Z[l]Z[l]到(^z[l])(^z[l])也有一定的噪音。Dropout有噪音的原因是因為它隨機加了一些0.batch的話,計算的均值和偏差也都是有噪音的。
所以batch有輕微的正則化效果(regularization)效果。因為給隱藏層增加了噪音,這迫使后部單元不過分依賴于任何一個隱藏單元。當然,如果你用較大的mini-batch,比如說512的話,減少了噪音,也就減少了正則化效果。
測試時的Batch Norm
Batch歸一化將你的數據以mini-batch的形式進行處理。但在測試時你可能需要對每一個樣本逐一進行處理。我們看一下如何通過調整網絡來做到這一點。
如圖所示,左側是我們在訓練集中的每一個mini-batch所用的公式,然而在測試集的時候,我們不能這么做。
如圖右側所示,在測試集中你需要用一個指數加權平均來估計。這個平均函數涵蓋了所有的mini-batch。假設對于L層,我們有mini-batch X1,X2等等,在L層訓練X1的時候,你就得到了μLμL,其他訓練也是這樣的。正如我們之前計算溫度得到的指數加權平均θ1θ1等,你會得到這些穩定向量的最新平均值。用同樣的方法,我們也可以得到μμ和σσ的每一層的值。
總結一下,μμ和σσ是在整個mini-batch上計算出來的,但是在測試時,你可能需要逐一處理樣本,方法是根據你的訓練集估計μμ和σσ。方法有很多種,理論上你可以在網絡上運行整個訓練集來得到μμ和σσ,但實際操作中我們通常用到指數加權平均來追蹤訓練過程中看到的μμ和σσ,也會用指數加權平均來估計μμ和σσ。然后用測試集的μμ和σσ來進行你所需單元的z的值得調整。
吳教主深度學習和神經網絡課程總綱
總結
以上是生活随笔為你收集整理的2.3.2 Batch Norm介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2.3.1 为超参数选择合适的范围
- 下一篇: 2.3.3 Softmax回归介绍