天天看點

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

Background

Covariance shift

——when the input distribution to a learning system changes, it is said to experience covariance shift.

當這種現象發生在多層神經網絡之間時,即前面層參數的改變,使得後面層的輸入分布發生改變時,就叫Internal covariance shift。

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

前面層的參數變化會影響目前層的輸入分布,缺點有二:

1.大大減慢目前層的參數學習速度(目前層也是一個learning system,一旦其輸入的分布改變,就要調整參數來适應這種分布);

2.若使用sigmoid激活函數,目前層的輸入可能會處于sigmoid函數的非線性飽和區域,進而導緻梯度消失現象。在BN出現以前,通常采用ReLU(x)=max(0,x)激活函數或使用較小的learning rate來解決這個問題。

是以我們想到,如果前面層的輸出activation(即目前層的輸入input)的分布是一定的呢?那樣就會減少下一層輸入陷入sigmoid飽和非線性區域的可能,梯度不再容易消失,進而加快訓練速度。

Whitening

對某一層的輸出activations進行白化操作(零均值、機關方差、去相關),可以使得這些activations的分布保持恒定,進而減小internal covariance shift對下一層的影響。

其缺點在于:

1.expensive computation

2.not everywhere differentiable

為了解決這個問題,作者在Batch_normalization中提出了兩個簡化做法。

Normalization via Mini-batch statistics

BN包括兩個重要的操作:

1.normalization:零均值化、機關方差

2.scale and shift:引入兩個參數,進而使得BN操作可以代表一個恒等變換(相當于BN transform的輸入和輸出是一樣的,也就是不改變輸入分布)

表示如下:

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

對某一layer,其輸入x的次元(即前一層的activations個數)為d,則需要對每一維(即每一個activation)分别進行normalization:

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

然而,僅僅對每個輸入進行normalization會改變輸入的分布,例如,若使用的是sigmoid激活函數,則對輸入的normalization會将其限制在sigmoid函數的線性區域,為了解決這個問題,我們在normalization操作後面加上一個如下所示的線性變換(linear transform),使得整個Batch normalization具有表達恒等變換的能力。

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

對每一個前一層的輸出activation,都要學習自己的gama、beta。

當每個activation的gama和beta都按如下當時取值時,輸入的activations經過BN操作後分布不變,此時,BN就相當于一個恒等變換了。

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

整個BN算法架構如下:

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

反向傳播

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

推導過程如下:

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

Testing

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

Batch-Normalized Convolutional Networks

正如卷積神經網絡裡,同一個feature map裡面的多個units是由同一個kernel在input image的不同區域滑動得到的,當在卷積神經網絡裡加入BN操作時,同一個feature map的activations也用同樣的normalization方式,也就是說,對一個具有n個feature maps的activation layer,隻需要學習n個gama-beta參數對。

加入BN後

加入BN操作的神經網絡,可以設定更大的learning rate、去掉dropout層、減少L2正則化。

實驗

某一層的輸出activations的分布随着訓練時間的增長而變化的曲線:

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

可以看出,加入BN後,分布更加穩定,減弱了internal covariance shift。

繼續閱讀