論文閱讀:《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》
Batch Normalization作為最近一年來DL的重要成果,已經(jīng)廣泛被證明其有效性和重要性。雖然有些細(xì)節(jié)處理還解釋不清其理論原因搂蜓,但是實踐證明好用才是真的好,別忘了DL從Hinton對深層網(wǎng)絡(luò)做Pre-Train開始就是一個經(jīng)驗領(lǐng)先于理論分析的偏經(jīng)驗的一門學(xué)問宅粥。機(jī)器學(xué)習(xí)領(lǐng)域有個很重要的假設(shè):IID獨立同分布假設(shè),就是假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)是滿足相同分布的电谣,這是通過訓(xùn)練數(shù)據(jù)獲得的模型能夠在測試集獲得好的效果的一個基本保障秽梅。那BatchNorm的作用是什么呢?BatchNorm就是在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中使得每一層神經(jīng)網(wǎng)絡(luò)的輸入保持相同分布的辰企。
一风纠、“Internal Covariate Shift”問題
從論文名字可以看出况鸣,BN是用來解決“Internal Covariate Shift”問題的牢贸,那么首先得理解什么是“Internal Covariate Shift”?論文首先說明Mini-Batch SGD相對于One Example SGD的兩個優(yōu)勢:梯度更新方向更準(zhǔn)確镐捧;并行計算速度快潜索;(為什么要說這些?因為BatchNorm是基于Mini-Batch SGD的懂酱,所以先夸下Mini-Batch SGD竹习,當(dāng)然也是大實話);然后吐槽下SGD訓(xùn)練的缺點:超參數(shù)調(diào)起來很麻煩列牺。(作者隱含意思是用BN就能解決很多SGD的缺點)
接著引入covariate shift的概念:如果ML系統(tǒng)實例集合<X,Y>中的輸入值X的分布老是變整陌,這不符合IID假設(shè),網(wǎng)絡(luò)模型很難穩(wěn)定的學(xué)規(guī)律,這不得引入遷移學(xué)習(xí)才能搞定嗎泌辫,我們的ML系統(tǒng)還得去學(xué)習(xí)怎么迎合這種分布變化啊随夸。對于深度學(xué)習(xí)這種包含很多隱層的網(wǎng)絡(luò)結(jié)構(gòu),在訓(xùn)練過程中震放,因為各層參數(shù)不停在變化宾毒,所以每個隱層都會面臨covariate shift的問題,也就是在訓(xùn)練過程中殿遂,隱層的輸入分布老是變來變?nèi)フ╊酰@就是所謂的“Internal Covariate Shift”,Internal指的是深層網(wǎng)絡(luò)的隱層墨礁,是發(fā)生在網(wǎng)絡(luò)內(nèi)部的事情幢竹,而不是covariate shift問題只發(fā)生在輸入層。
然后提出了BatchNorm的基本思想:能不能讓每個隱層節(jié)點的激活輸入分布固定下來呢饵溅?這樣就避免了“Internal Covariate Shift”問題了妨退。
BN不是憑空拍腦袋拍出來的好點子,它是有啟發(fā)來源的:之前的研究表明如果在圖像處理中對輸入圖像進(jìn)行白化(Whiten)操作的話——所謂白化蜕企,就是對輸入數(shù)據(jù)分布變換到0均值咬荷,單位方差的正態(tài)分布——那么神經(jīng)網(wǎng)絡(luò)會較快收斂,那么BN作者就開始推論了:圖像是深度神經(jīng)網(wǎng)絡(luò)的輸入層轻掩,做白化能加快收斂幸乒,那么其實對于深度網(wǎng)絡(luò)來說,其中某個隱層的神經(jīng)元是下一層的輸入唇牧,意思是其實深度神經(jīng)網(wǎng)絡(luò)的每一個隱層都是輸入層罕扎,不過是相對下一層來說而已,那么能不能對每個隱層都做白化呢丐重?這就是啟發(fā)BN產(chǎn)生的原初想法腔召,而BN也確實就是這么做的,可以理解為對深層神經(jīng)網(wǎng)絡(luò)每個隱層神經(jīng)元的激活值做簡化版本的白化操作扮惦。
現(xiàn)在BN基本上成為CNN類網(wǎng)絡(luò)的標(biāo)配臀蛛,它通過縮放每一層Feature map值至均值0,方差1崖蜜,讓Feature map的分布在訓(xùn)練過程中不要發(fā)生大的變化浊仆,以此來加速網(wǎng)絡(luò)的收斂。論文提到豫领,這個就是受CV里面“白化Whitening”的啟發(fā)抡柿,Whitening在很多圖像處理中運用。
二等恐、BatchNorm的本質(zhì)思想
BN的基本思想其實相當(dāng)直觀:因為深層神經(jīng)網(wǎng)絡(luò)在做非線性變換前的激活輸入值(就是那個x=WU+B洲劣,U是輸入)隨著網(wǎng)絡(luò)深度加深或者在訓(xùn)練過程中备蚓,其分布逐漸發(fā)生偏移或者變動,之所以訓(xùn)練收斂慢囱稽,一般是整體分布逐漸往非線性函數(shù)的取值區(qū)間的上下限兩端靠近(對于Sigmoid函數(shù)來說星著,意味著激活輸入值WU+B是大的負(fù)值或正值),所以這導(dǎo)致反向傳播時低層神經(jīng)網(wǎng)絡(luò)的梯度消失粗悯,這是訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)收斂越來越慢的本質(zhì)原因虚循,而BN就是通過一定的規(guī)范化手段,把每層神經(jīng)網(wǎng)絡(luò)任意神經(jīng)元這個輸入值的分布強(qiáng)行拉回到均值為0方差為1的標(biāo)準(zhǔn)正態(tài)分布样傍,其實就是把越來越偏的分布強(qiáng)制拉回比較標(biāo)準(zhǔn)的分布横缔,這樣使得激活輸入值落在非線性函數(shù)對輸入比較敏感的區(qū)域,這樣輸入的小變化就會導(dǎo)致?lián)p失函數(shù)較大的變化衫哥,意思是這樣讓梯度變大茎刚,避免梯度消失問題產(chǎn)生,而且梯度變大意味著學(xué)習(xí)收斂速度快撤逢,能大大加快訓(xùn)練速度膛锭。
其實一句話就是:對于每個隱層神經(jīng)元,把逐漸向非線性函數(shù)映射后向取值區(qū)間極限飽和區(qū)靠攏的輸入分布強(qiáng)制拉回到均值為0方差為1的比較標(biāo)準(zhǔn)的正態(tài)分布蚊荣,使得非線性變換函數(shù)的輸入值落入對輸入比較敏感的區(qū)域初狰,以此避免梯度消失問題。因為梯度一直都能保持比較大的狀態(tài)互例,所以很明顯對神經(jīng)網(wǎng)絡(luò)的參數(shù)調(diào)整效率比較高奢入,就是變動大,就是說向損失函數(shù)最優(yōu)值邁動的步子大媳叨,也就是說收斂地快腥光。BN說到底就是這么個機(jī)制,方法很簡單糊秆,道理很深刻武福。
BN在訓(xùn)練過程和推理過程計算步驟是一樣的,區(qū)別在于均值方差的來源痘番。訓(xùn)練時來自于當(dāng)前mini-batch統(tǒng)計而來捉片;而推理時是通過整個之前的訓(xùn)練過程得到,因此是fix的夫偶。對于Mini-Batch SGD來說界睁,一次訓(xùn)練過程里面包含m個訓(xùn)練實例觉增,其具體BN操作就是對于隱層內(nèi)每個神經(jīng)元的激活值來說兵拢,進(jìn)行如下變換:
這里t層某個神經(jīng)元的x(k)不是指原始輸入,就是說不是t-1層每個神經(jīng)元的輸出逾礁,而是t層這個神經(jīng)元的線性激活x=WU+B说铃,這里的U才是t-1層神經(jīng)元的輸出访惜。變換的意思是:某個神經(jīng)元對應(yīng)的原始的激活x通過減去mini-Batch內(nèi)m個實例獲得的m個激活x求得的均值E(x)并除以求得的方差Var(x)來進(jìn)行轉(zhuǎn)換吭服。
經(jīng)過這個變換后某個神經(jīng)元的激活x形成了均值為0葛假,方差為1的正態(tài)分布,目的是把值往后續(xù)要進(jìn)行的非線性變換的線性區(qū)拉動抡砂,增大導(dǎo)數(shù)值幼苛,增強(qiáng)反向傳播信息流動性窒篱,加快訓(xùn)練收斂速度。但是這樣會導(dǎo)致網(wǎng)絡(luò)表達(dá)能力下降舶沿,為了防止這一點墙杯,每個神經(jīng)元增加兩個調(diào)節(jié)參數(shù)(scale和shift),這兩個參數(shù)是通過訓(xùn)練來學(xué)習(xí)到的括荡,用來對變換后的激活反變換高镐,使得網(wǎng)絡(luò)表達(dá)能力增強(qiáng),即對變換后的激活進(jìn)行如下的scale和shift操作畸冲,這其實是變換的反操作:
BN在訓(xùn)練階段的前向過程如下:
Mini-batch就是指在一個計算device上嫉髓,一次計算的圖片張數(shù)(假設(shè)數(shù)據(jù)是圖片),在這個Mini-batch上統(tǒng)計出均值mean邑闲、方差variance算行,然后做normalize,最后為了讓Feature Map可以縮放苫耸,又重新引入了較為簡單的和
纱意。在數(shù)量上,每一個輸出的channel會各有1個mean鲸阔,var偷霉,
和
。BN的訓(xùn)練反向如果不想細(xì)看也可以不看褐筛,因為BN整個過程是可微的类少,因此在當(dāng)前的framework下都可以自動完成反向傳播。過程如下:
BN所處的位置:一般是緊跟在Conv或者FC層之后晃痴,激活函數(shù)之前残吩,即Conv - BN - Scale - Relu。當(dāng)然倘核,也有一些論文研究BN到底應(yīng)該放在哪泣侮,目前看也并沒有必然,畢竟BN只是起了一個歸一化的作用紧唱,不同地方對不同網(wǎng)絡(luò)有好有壞活尊。BN有一個很大的作用就是:宣布了從12年Alexnet開始的Local Response Normalization層的結(jié)束隶校,從BN之后基本沒有再用LRN層了(這個層計算真的很變扭)。
批標(biāo)準(zhǔn)化卷積(Convolutional)網(wǎng)絡(luò)
批標(biāo)準(zhǔn)化可以應(yīng)用于網(wǎng)絡(luò)的任何激活集合深胳。這里我們專注于仿射變換和元素級非線性組成的變換:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?其中W和b是模型學(xué)習(xí)的參數(shù),g(?)是非線性例如sigmoid或ReLU铜犬。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 這個公式涵蓋了全連接層和卷積層舞终。我們在非線性之前通過標(biāo)準(zhǔn)化
加入BN變換。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 偏置b可以忽略癣猾,因為它的效應(yīng)將會被后面的中心化取消权埠,所以
批標(biāo)準(zhǔn)化可以提高學(xué)習(xí)率
標(biāo)量a??
原始網(wǎng)路和批標(biāo)準(zhǔn)化網(wǎng)絡(luò)
加速BN網(wǎng)絡(luò)(Accelerating BN Networks)
簡單的將批標(biāo)準(zhǔn)化添加到網(wǎng)絡(luò)并不能充分利用我們的方法攘蔽。為此我們進(jìn)行了以下修改
# Increase learning rate??提高學(xué)習(xí)率
# Remove Dropout 刪除Dropout?
# Reduce the weight regularization? 減少
權(quán)重正則化
# Accelerate the learning rate decay? 加速學(xué)習(xí)率衰減
# Remove Local Response Normalization??刪除局部響應(yīng)歸一化
# Shuffle training examples more thoroughly? 更徹底的攪亂訓(xùn)練樣本
# Reduce the photometric distortions?減少光度失真
單網(wǎng)絡(luò)分類(Single-Network Classification)
實驗(experiments)
Inception: the network described at the beginning of Section 4.2(a new variant of the Inception network), trained with the initial learning rate of 0.0015.
BN-Baseline: Same as Inception with Batch Normalization before each nonlinearity.
BN-x5: Inception with Batch Normalization and the modifications in Sec. 4.2.1. The initial learning rate was increased by a factor of 5, to 0.0075. The same learning rate increase with original Inception caused the model parameters to reach machine infinity.
BN-x30: Like BN-x5, but with the initial learning rate 0.045 (30 times that of Inception).
BN-x5-Sigmoid: Like BN-x5, but with sigmoid nonlinearity instead of ReLU. We also attempted to train the original Inception with sigmoid, but the model remained at the accuracy equivalent to chance.
附錄(appendix)
BatchNorm為什么NB呢,關(guān)鍵還是效果好呐粘。①不僅僅極大提升了訓(xùn)練速度满俗,收斂過程大大加快;②還能增加分類效果作岖,一種解釋是這是類似于Dropout的一種防止過擬合的正則化表達(dá)方式唆垃,所以不用Dropout也能達(dá)到相當(dāng)?shù)男Ч虎哿硗庹{(diào)參過程也簡單多了痘儡,對于初始化要求沒那么高辕万,而且可以使用大的學(xué)習(xí)率等。總而言之沉删,經(jīng)過這么簡單的變換渐尿,帶來的好處多得很,這也是為何現(xiàn)在BN這么快流行起來的原因矾瑰。
一塊很基礎(chǔ)的Layer設(shè)計——歸一化層
Batch Normalization
Layer Normalization
Instance Normalization
Group Normalization
Weight Normalization
Batch Renormalization
Spectral Normalization for GAN
歸一化層砖茸,目前主要有這幾個方法,Batch Normalization(2015年)殴穴、Layer Normalization(2016年)凉夯、Instance Normalization(2017年)、Group Normalization(2018年)采幌、Switchable Normalization(2018年)劲够;將輸入的圖像shape記為[N, C, H, W],這幾個方法主要的區(qū)別就是在:batchNorm是在batch上休傍,對NHW做歸一化征绎,對小batchsize效果不好;
layerNorm在通道方向上尊残,對CHW歸一化炒瘸,主要對RNN作用明顯;
instanceNorm在圖像像素上寝衫,對HW做歸一化顷扩,用在風(fēng)格化遷移;
GroupNorm將channel分組慰毅,然后再做歸一化隘截;
SwitchableNorm是將BN、LN汹胃、IN結(jié)合婶芭,賦予權(quán)重,讓網(wǎng)絡(luò)自己去學(xué)習(xí)歸一化層應(yīng)該使用什么方法着饥。
根據(jù)BN和IN的定義犀农, BN是增加樣本間的差異,IN是提高對亮度宰掉,色調(diào)變化的魯棒性呵哨。
DSBN
可用于無監(jiān)督中的域適應(yīng)UDA方法中,其實就是把輸入的數(shù)據(jù)分成源域和目標(biāo)域分別輸入到不同的BN層轨奄。
參考資料:論文翻譯
https://blog.csdn.net/xbinworld/article/details/78945691