目錄
一、引言
二、Convariate shift
三、算法
1、算法公式
?2、訓練中的BN算法? ? ? ?
3、測試和推理中的BN算法
四、BN算法在網(wǎng)絡(luò)中的作用
1、優(yōu)點
2、缺點
五、論文
一、引言
????????傳統(tǒng)的神經(jīng)網(wǎng)絡(luò),只是在將樣本x輸入到輸入層之前對x進行標準化處理,以降低樣本間的差異性。BN是在此基礎(chǔ)上,不僅僅只對輸入層的輸入數(shù)據(jù)x進行標準化,還對每個隱藏層的輸入進行標準化。
????????我們在圖像預處理過程中通常會對圖像進行標準化處理,也就是image normalization,使得每張輸入圖片的數(shù)據(jù)分布能夠統(tǒng)均值為u,方差為h的分布。這樣能夠加速網(wǎng)絡(luò)的收斂。但是當一張圖片輸入到神經(jīng)網(wǎng)絡(luò)經(jīng)過卷積計算之后,這個分布就不會滿足剛才經(jīng)過image normalization操作之后的分布了,可能適應了新的數(shù)據(jù)分布規(guī)律,這個時候?qū)?shù)據(jù)接入激活函數(shù)中,很可能一些新的數(shù)據(jù)會落入激活函數(shù)的飽和區(qū),導致神經(jīng)網(wǎng)絡(luò)訓練的梯度消失,如下圖所示當feature map的數(shù)據(jù)為10的時候,就會落入飽和區(qū),影響網(wǎng)絡(luò)的訓練效果。這個時候我們引入Batch Normalization的目的就是使我們卷積以后的feature map滿足均值為0,方差為1的分布規(guī)律。在接入激活函數(shù)就不會發(fā)生這樣的情況。
?
? ? ??????????上面只是舉例說明, 那在理論上為什么需要對每個隱藏層的輸入進行標準化呢?或者說這樣做有什么好處呢?這就牽涉到一個Covariate Shift問題。
二、Convariate shift
????????Convariate shift是BN論文作者提出來的概念,指的是具有不同分布的輸入值對深度網(wǎng)絡(luò)學習的影響。當神經(jīng)網(wǎng)絡(luò)的輸入值的分布不同時,我們可以理解為輸入特征值的scale差異較大,與權(quán)重進行矩陣相乘后,會產(chǎn)生一些偏離較大的差異值;而深度學習網(wǎng)絡(luò)需要通過訓練不斷更新完善,那么差異值產(chǎn)生的些許變化都會深深影響后層,偏離越大表現(xiàn)越為明顯;因此,對于反向傳播來說,這些現(xiàn)象都會導致梯度發(fā)散,從而需要更多的訓練步驟來抵消scale不同帶來的影響,也就是說,這種分布不一致將減緩訓練速度。
????????而BN的作用就是將這些輸入值進行標準化,降低scale的差異至同一個范圍內(nèi)。這樣做的好處在于一方面提高梯度的收斂程度,加快模型的訓練速度;另一方面使得每一層可以盡量面對同一特征分布的輸入值,減少了變化帶來的不確定性,也降低了對后層網(wǎng)絡(luò)的影響,各層網(wǎng)絡(luò)變得相對獨立,緩解了訓練中的梯度消失問題。
三、算法
1、算法公式
????????????????? ?一般將bn層放在卷積層(Conv)和激活層(例如Relu)之間。需要對Conv后的每層數(shù)據(jù)進行歸一化。下面的算法是針對某一個層的,每層都采取相應的算法。
?2、訓練中的BN算法? ? ? ?
????????訓練的時候BN層是以每個channel來計算均值和方差,比如是如的是64*32*32*3,3代表channel,當前假如是rgb,64是batchsize。首先在r,g,b上各層上分別求出當前圖像所有像素點的均值和方差,然后在batch上求平均,得到該組batch數(shù)據(jù)的局部數(shù)據(jù)均值和方差。然后引入bn層中的權(quán)重α和偏執(zhí)β。可學習參數(shù)α、β是一個1*channel維度的。
3、測試和推理中的BN算法
?????????測試和推理的時候如果依舊按照bn的公式算當前batch的均值和方差,如果測試圖片batch一般為1,那么就大大降低模型的泛化能力,這和訓練是要求batch盡可能大的初衷是不一致的。這里借用一句話:某一個樣本經(jīng)過測試時應該有確定的輸出,如果在測試時也是用測試數(shù)據(jù)的means和var,那么樣本的輸出會隨所處batch的不同,而有所差異。即batch的隨機性導致了樣本測試的不確定性。所以使用固定的在訓練中得出的mean和var,在測試和推理的時候使用的均值和方差為訓練數(shù)據(jù)通過指數(shù)滑動平均(ExponentialMovingAverage)EMA估算整個訓練數(shù)據(jù)集的樣本均值和方差的全局值。
四、BN算法在網(wǎng)絡(luò)中的作用
????????BN算法像卷積層,池化層、激活層一樣也輸入一層,BN層添加在激活函數(shù)前,對激活函數(shù)的輸入進行歸一化,這樣解決了輸入數(shù)據(jù)發(fā)生偏移和增大的影響。
1、優(yōu)點
(1)可以增加訓練速度,防止過擬合:如果沒有歸一化,每一層訓練后的數(shù)據(jù)分布都不同,網(wǎng)絡(luò)需要更大的開銷去學習新的分布,造成網(wǎng)絡(luò)模型更加復雜,因此容易發(fā)生過擬合,網(wǎng)絡(luò)收斂也比較慢。
(2)可以避免激活函數(shù)進入非線性飽和區(qū),從而造成梯度彌散問題。
(3)不用理會擬合中的droupout、L2正則化項的參數(shù)選擇,采用BN算法可以省去這兩項或者只需要小的L2正則化約束。原因,BN算法后,參數(shù)進行了歸一化,原本經(jīng)過激活函數(shù)沒有太大影響的神經(jīng)元分布變得明顯,經(jīng)過一個激活函數(shù)以后,神經(jīng)元會自動削弱或者去除一些神經(jīng)元,就不用再對其進行dropout。另外就是L2正則化,由于每次訓練都進行了歸一化,就很少發(fā)生由于數(shù)據(jù)分布不同導致的參數(shù)變動過大,帶來的參數(shù)不斷增大。
(4)由于因為BN具有提高網(wǎng)絡(luò)泛化能力的特性,可以減少了你可以移除dropout比例和正則化參數(shù),這樣減少繁瑣的調(diào)參。
(5)可以省LRN局部歸一化層。
2、缺點
(1)batch_size較小的時候,效果差
(2)BN 在RNN中效果比較差,RNN的輸入是長度是動態(tài)的
(3)就是在測試階段的問題,均值和方差的計算可能與訓練集的相差較大
五、論文
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift文章來源:http://www.zghlxwxcb.cn/news/detail-400880.html
https://arxiv.org/abs/1502.03167文章來源地址http://www.zghlxwxcb.cn/news/detail-400880.html
到了這里,關(guān)于神經(jīng)網(wǎng)絡(luò)中的常用算法-BN算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!