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


這裏寫圖片描述

前面層的參數變化會影響當前層的輸入分佈,缺點有二:
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的輸入和輸出是一樣的,也就是不改變輸入分佈)
表示如下:


這裏寫圖片描述

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


這裏寫圖片描述

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


這裏寫圖片描述

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

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


這裏寫圖片描述

這裏寫圖片描述

整個BN算法框架如下:


這裏寫圖片描述

反向傳播


這裏寫圖片描述

推導過程如下:


這裏寫圖片描述

Testing


這裏寫圖片描述

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的分佈隨着訓練時間的增長而變化的曲線:


這裏寫圖片描述
可以看出,加入BN後,分佈更加穩定,減弱了internal covariance shift。

發佈了43 篇原創文章 · 獲贊 96 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章