[論文閱讀] Batch Normalization: Accelerating Deep Network Training By Reducing Internal Covariate Shift
阿新 • • 發佈:2019-01-10
Background
- 存在什麼問題?
- 訓練深度神經網路是比較複雜的,因為每層輸入的分佈在訓練過程中都在變化。如果每層輸入的分佈在不停的變化,那我們就需要不停的調整我們的引數去補償這部分變化,這就使得訓練過程更加緩慢。
- 此外,由於分佈的變化使得使用saturating nonlinearity function變得更加難以訓練。
- 首先我們區分什麼是saturating,什麼是non-saturating
- non-saturating:如果一個函式 或者是 則 是non-saturating的。比如,ReLU
- saturating:如果函式 不是non-saturating,則他就是saturating。比如,sigmoid
- 接下來,為什麼saturating nonlinearity 難以訓練?因為他會面臨梯度消失問題。
- 考慮以sigmoid為啟用函式的一層。 。
- 當我們 增長的時候,我們 趨近於0。這時候就可能會出現梯度消失問題。
- 但是 又被 和之前layer的引數影響,所以有很大可能性梯度會比較小。
- 首先我們區分什麼是saturating,什麼是non-saturating
- 現存的有什麼解決方法?
- 資料分佈—白化操作,PCA Whitening
- 我們可以在每一層輸入之前都使用白化操作將資料對映到0為中心, 不同特徵之間具有相同方差的空間。
- 但是這樣操作計算量很大,並且有時候是不可導的。因為在計算PCA Whitening的過程中,我們需要計算協方差矩陣 ,然後再進行特徵值分解。這樣提取得到了特徵之間無關(decorrelated)的新特徵向量空間。
- 所以,目前我們一般只在預處理階段使用白化操作。
- non-saturating nonlinearity—ReLU
- 上面提到,我們使用saturating nonlinearity會導致梯度消失的問題,所以我們可以使用non-saturating nonlinearity來代替saturating nonlinearity。但是這樣並沒有從本質上改變資料的分佈。我們還是要調整parameter來補償輸入分佈的變化,這就使得我們的訓練更慢。
- 資料分佈—白化操作,PCA Whitening
Method
- 為了normalized 資料分佈,並且簡化計算,使得處處可導。相對於PCA計算向量不同緯度之間的correlation,Batch Normalization 單獨normalized 特徵向量的每個緯度。這是Batch Normalization和PCA 白化的一個重要不同。
- LeCun et al.提出了 ,但是隻使用這個可能會降低模型的表達能力。比如說我們使用non-linear的sigmoid,在輸入之前經過這個transform處理後,會使得我們的sigmoid有點趨近於linear的transform。
- 為了解決該問題,作者定義了 , 來強化模型的表達能力。
- 總結一下,在訓練過程中,我們使用如下的流程來計算normalization。
- 此外,作者也給出了反向傳播的公式,如下所示。
- 上面描述了在訓練階段normalization的過程。但是在測試(inference)階段我們應該怎麼處理呢?關鍵在於怎麼計算 ,我們知道在訓練階段我們通過減去batch 內的均值除以方差可以得到 ,但是在測試階段我們沒有batch,或者batch的分佈和訓練時候不一樣。那麼我們怎麼處理呢?作者提出了同樣的處理方式 ,不過 無偏估計量來表示。然後再 。
- 此外還有以下幾點需要注意
- 文中說為了避免saturating 啟用函式的梯度消失問題,BN一般放在啟用函式之前
- 和 是針對每一個特徵有一對。比如說我們通過全連線層的輸出是512緯的,那麼BN層就有512對 和 。針對卷積層的情況, 和 也是針對每一個特徵有一對。假設說我們Convolutional layer的輸出是 ,那麼BN層就有512對 和 。不過計算均值 的