1. 程式人生 > >Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

導致 mage 正常 子網 區域 恢復 利用 局部最優 AMM

1. 摘要

  • 訓練深層的神經網絡非常困難,因為在訓練的過程中,隨著前面層數參數的改變,每層輸入的分布也會隨之改變。這需要我們設置較小的學習率並且謹慎地對參數進行初始化,因此訓練過程比較緩慢。

  • 作者將這種現象稱之為 internal covariate shift,通過對每層的輸入進行歸一化來解決這個問題。

  • 引入 BN 後,我們可以不用太在意參數的初始化,同時使用更大的學習率,而且也會有正則化的效果,在一些情況下可以不用再使用 Dropout。

2. 介紹

因為網絡中每一層的輸入都受到前面所有層參數的影響,因此參數的一個小的改變將會隨著網絡加深而被逐漸放大。在這樣的情況下,每一層網絡都需要一直去適應新的輸入分布,訓練過程也就變得很慢。

考慮如下的網絡計算

技術分享圖片

\(F_1\)\(F_2\) 是任意的變換,\(\Theta_1\)\(\Theta_2\) 是需要學習的參數。學習 \(\Theta_2\) 可以看作是輸入 \(x=F_1(u, \Theta_1)\) 被傳入子網絡

技術分享圖片

因此,如果 \(x\) 的分布保持不變的話, \(\Theta_2\) 就不用去重新適應來補償 \(x\) 分布的變化。

另一方面,如果我們采用 Sigmoid 激活函數的話,隨著網絡加深,我們很容易落入到飽和區域,容易產生梯度消失現象,減緩訓練過程。但是,如果我們能夠確保非線性輸入的分布維持穩定的話,優化就不容易陷入到飽和區域,從而能夠加速訓練。

3. 小批量歸一化

針對每一層的所有輸入進行白化代價非常高並且不是處處可微,因此作者進行了兩個必要的簡化。

第一,我們獨立地歸一化一層中的每一個特征,讓它們具有零均值標準方差。針對一個 \(d\) 維的輸入 \(x=(x^{(1)}...x^{(d)})\),我們將分別對每一維進行歸一化。

技術分享圖片

但是,這樣簡單地歸一化每個輸入會改變當前層網絡的表達能力。比如,歸一化 Sigmoid 函數的輸入將會使它們落入激活函數的線性區域。為了解決這個問題,我們要保證嵌入到網絡中的變換能夠表示恒等變換。對此,我們引入一對參數 \(\gamma^{(k)}, \beta^{(k)}\) 來對歸一化後的值再進行縮放和平移。

技術分享圖片

這樣,通過設定 \(\gamma^{(k)}=\sqrt {Var[x^{(k)}]}, \beta^{(k)}=E[x^{(k)}]\)如果原始激活值是最優的話,我們也能夠恢復到原有狀態

第二,用小批量樣本來產生對每個激活值均值和方差的估計。針對 \(m\) 個樣本的小批量,歸一化變換如下所示:

技術分享圖片

在訓練過程中,我們需要計算 BN 變換參數的梯度來進行反向傳播,根據鏈式法則,有

技術分享圖片

因此,BN 在網絡中引入了對激活值的歸一化,並且是一個可微的變換。這樣,每一層都可以在同樣的分布上持續學習而不用擔心內部偏移問題,所以可以加速訓練過程。最後,在歸一化後學習到的仿射變換允許網絡表示恒等變換,因此也保留了網絡的容量也即表示能力。

4. 測試

雖然對小批量的激活值進行歸一化在訓練時是非常有效的,但在測試時卻是不必要也不可取的,我們想讓輸出只確定地依賴於輸入。因此,一旦訓練好了一個網絡,我們用訓練時總體的均值和方差來進行歸一化。

技術分享圖片

忽略 \(\epsilon\),這些歸一化後的激活值就具有了和訓練時一樣的零均值和標準方差。我們采用無偏的方差估計

技術分享圖片

期望是根據訓練過程中所有大小為 \(m\) 的小批量樣本計算的,\(\sigma_B^2\) 代表它們的方差。同時,我們使用滑動平均來跟蹤訓練過程中每個小批量的均值和方差。

5. 在全連接和卷積網絡中引入 BN

針對全連接網絡,我們在非線性之前加入 BN 變換,對 \(x=Wu+b\) 進行歸一化。註意到,偏置 \(b\) 可以被忽略,因為在後序的減去均值的過程中它的作用被抵消了。因此,就變成了

\[z=g(Wu+b) \to z=g(BN(Wu))\]

對於 \(x\) 的每一個維度我們學習一對參數 \(\gamma^{(k)}, \beta^{(k)}\)

針對卷積網絡,我們想要歸一化保持卷積的特性,因此,不同樣本的所有位置的同一個特征圖用同樣的方式進行歸一化。對於一個大小為 \(m\) 的小批量樣本和大小為 \(p×q\) 的特征圖,有效的小批次為

\[m'=m\cdot pq\]

對於每一個特征圖我們學習一對參數 \(\gamma^{(k)}, \beta^{(k)}\)

6. BN 允許更高的學習率

在傳統的網絡中,太高的學習率可能會導致梯度消失或者爆炸,也會使網絡陷入在糟糕的局部最優解。但引入 BN 後,它會阻止參數的小的變化被放大成激活值和梯度的更大變化或者次優變化,比如說不會讓訓練陷入到非線性的飽和區域。

BN 也使得訓練對參數的規模更適應。正常情況下,大的學習率會增大參數,然後放大反向傳播的梯度導致模型爆炸。但是,引入 BN 後,反向傳播不受參數的規模影響。實際上,對於標量 \(a\),有

\[x_i = Wu_i\]
\[\mu = \frac{1}{m}\sum_{i=1}^{m}x_i\]
\[\sigma^2 = \frac{1}{m}\sum_{i=1}^{m}(x_i-\mu)^2\]
\[\hat x_i = \frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}}\]
\[y_i =\gamma \hat x_i+\beta=BN[Wu_i]\]

所以,\(BN[Wu] = BN[(aW)u]\)\(\hat x_i\) 求取時分子分母都放大 \(a\) 倍。反向傳播時,有

\[\frac{\partial BN[(aW)u]}{\partial x} = \frac{1}{a} \cdot \frac{\partial BN[Wu]}{\partial x}\]

\[\tag{1}\frac{\partial BN[(aW)u]}{\partial u} = \frac{\partial BN[Wu]}{\partial u}\]
\[\tag{2}\frac{\partial BN[(aW)u]}{\partial (aW)} = \frac{1}{a} \cdot \frac{\partial BN[Wu]}{\partial W}\]

由式 (1) 可以看到,參數的規模不影響梯度的反向傳播。而且,由式 (2) 知,較大的參數將會獲得較小的梯度,BN 能夠穩定參數的增長

7. BN 的正則化效果

當使用 BN 進行訓練時,小批次中的一個樣本會與其他樣本結合在一起被傳入網絡中,網絡不再會為某個給定的訓練樣例生成確定值。在實驗中,作者發現這種效應有利於網絡的泛化。引入 BN 後,Dropout 可以被移除或減少作用。

8. 加速 BN 網絡的訓練

僅僅在網絡中添加 BN 不能充分利用這種方法的優越性,除此之外,作者采用了以下策略:

  • 增大學習率
  • 移除 Dropout
  • 減小 L2 正則化權重
  • 加快學習率衰減
  • 移除局部響應歸一化
  • 更徹底地打亂訓練數據,防止同樣的數據總出現在同一個批次中
  • 減少光度畸變

9. 實驗結果

技術分享圖片

可以看到,在 MNIST 數據集上,引入 BN 後網絡網絡收斂很快,並且輸入的分布更加穩定。

技術分享圖片

在 ImageNet 數據集上,引入 BN 後很快就達到了原來 Inception 網絡取得的準確率。

獲取更多精彩,請關註「seniusen」!

技術分享圖片

Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift