均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN
碼字不易,歡迎給個(gè)贊!
歡迎交流與轉(zhuǎn)載,文章會(huì)同步發(fā)布在公眾號(hào):機(jī)器學(xué)習(xí)算法工程師(Jeemy110)
目前主流的深度學(xué)習(xí)模型都會(huì)采用BN層(Batch Normalization)來(lái)加速模型訓(xùn)練以及提升模型效果,對(duì)于CNN模型,BN層已經(jīng)上成為了標(biāo)配。但是BN層在訓(xùn)練過(guò)程中需要在batch上計(jì)算中間統(tǒng)計(jì)量,這使得BN層嚴(yán)重依賴batch,造成訓(xùn)練和測(cè)試的不一致性,當(dāng)訓(xùn)練batch size較小,往往會(huì)惡化性能。GN(Group Normalization)通過(guò)將特征在channel維度分組來(lái)解決這一問(wèn)題,GN在batch size不同時(shí)性能是一致的,但對(duì)于大batch size,GN仍然難以匹敵BN。這里我們要介紹的是谷歌提出的一種新的歸一化方法FRN,和GN一樣不依賴batch,但是性能卻優(yōu)于BN和GN。
從BN到GN
訓(xùn)練數(shù)據(jù)進(jìn)行歸一化處理有助于模型的優(yōu)化,對(duì)于深度模型來(lái)說(shuō),歸一化中間特征同樣有助于訓(xùn)練,BN層就是最常用的歸一化方法。BN層通過(guò)計(jì)算batch中所有樣本的每個(gè)channel上的均值和方差來(lái)進(jìn)行歸一化,其計(jì)算方式如下所示:
以CNN模型為例,中間特征的維度為[B, H, W, C],BN首先在計(jì)算在(N H, W)維度上的均值
和方差,然后各個(gè)通道上(C維度)進(jìn)行標(biāo)準(zhǔn)歸一化。最后對(duì)歸一化的特征進(jìn)行放縮和平移(scale and shift),這里和是可學(xué)習(xí)的參數(shù)(參數(shù)大小為C)。BN的一個(gè)問(wèn)題是訓(xùn)練時(shí)batch size一般較大,但是測(cè)試時(shí)batch size一般為1,而均值和方差的計(jì)算依賴batch,這將導(dǎo)致訓(xùn)練和測(cè)試不一致。BN的解決方案是在訓(xùn)練時(shí)估計(jì)一個(gè)均值和方差量來(lái)作為測(cè)試時(shí)的歸一化參數(shù),一般對(duì)每次mini-batch的均值和方差進(jìn)行指數(shù)加權(quán)平均來(lái)得到這個(gè)量。雖然解決了訓(xùn)練和測(cè)試的不一致性,但是BN對(duì)于batch size比較敏感,當(dāng)batch size較小時(shí),模型性能會(huì)明顯惡化。對(duì)于一個(gè)比較大的模型,由于顯存限制,batch size難以很大,比如目標(biāo)檢測(cè)模型,這時(shí)候BN層可能會(huì)成為一種限制。
解決BN上述問(wèn)題的另外一個(gè)方向是避免在batch維度進(jìn)行歸一化,這樣當(dāng)然就不會(huì)帶來(lái)訓(xùn)練和測(cè)試的不一致性問(wèn)題。這些方法包括Layer Normalization (LN),Instance Normalization (IN)以及最新的Group Normalization(GN),這些方法與BN的區(qū)別可以從圖1中看出來(lái):
圖1 不同的歸一化方法對(duì)比這些方法處理方式和BN類似,但是歸一化的維度不一樣,BN是在(N, H, W)維度上,LN是在(H,W,C)維度上,IN是在(H,W)維度上,GN更巧妙,其通過(guò)對(duì)C分組,此時(shí)特征可以從[N, H, W, C]變成[N, H, W, G, C/G],GN的計(jì)算是在[H, W, G]維度上。LN,IN以及GN都沒有在B維度上進(jìn)行歸一化,所以不會(huì)有BN的問(wèn)題。相比之下,GN是更常用的,GN和BN的效果對(duì)比如圖2所示:
圖2 ResNet50模型采用BN和GN在ImageNet上不同batch size下的性能差異從圖中可以看到GN基本不受batch size的影響,而BN在batch size較小時(shí)性能大幅度惡化,但是在較大batch size,BN的效果是稍好于GN的。
解決BN在小batch性能較差的另外一個(gè)方向是直接降低訓(xùn)練和測(cè)試之間不一致性,比較常用的方法是Batch Renormalization (BR),它主要的思路是限制訓(xùn)練過(guò)程中batch統(tǒng)計(jì)量的值范圍。另外的一個(gè)解決辦法是采用多卡BN方法訓(xùn)練,相當(dāng)于增大batch size。
FRN
谷歌的提出的FRN層包括歸一化層FRN(Filter Response Normalization)和激活層TLU(Thresholded Linear Unit),如圖3所示。FRN層不僅消除了模型訓(xùn)練過(guò)程中對(duì)batch的依賴,而且當(dāng)batch size較大時(shí)性能優(yōu)于BN。
圖3 FRN層結(jié)構(gòu)示意圖其中FRN的操作是(H, W)維度上的,即對(duì)每個(gè)樣例的每個(gè)channel單獨(dú)進(jìn)行歸一化,這里
就是一個(gè)N維度(HxW)的向量,所以FRN沒有BN層對(duì)batch依賴的問(wèn)題。BN層采用歸一化方法是減去均值然后除以標(biāo)準(zhǔn)差,而FRN卻不同,這里沒有減去均值操作,公式中的是的二次范數(shù)的平均值。這種歸一化方式類似BN可以用來(lái)消除中間操作(卷積和非線性激活)帶來(lái)的尺度問(wèn)題,有助于模型訓(xùn)練。 公式里的是一個(gè)很小的正常量,以防止除0。FRN是在H,W兩個(gè)維度上歸一化,一般情況下網(wǎng)絡(luò)的特征圖大小N=HxW較大,但是有時(shí)候可能會(huì)出現(xiàn)1x1的情況,比如InceptionV3和VGG網(wǎng)絡(luò),此時(shí)就比較關(guān)鍵,圖4給出了當(dāng)N=1時(shí)不同下歸一化的結(jié)果。當(dāng)值較小時(shí),歸一化相當(dāng)于一個(gè)符號(hào)函數(shù)(sign function),這時(shí)候梯度幾乎為0,嚴(yán)重影響模型訓(xùn)練;當(dāng)值較大時(shí),曲線變得更圓滑,此時(shí)的梯度利于模型學(xué)習(xí)。對(duì)于這種情況,論文建議采用一個(gè)可學(xué)習(xí)的。對(duì)于不含有1x1特征的模型,論文中采用的是一個(gè)常量值1e-6。值得說(shuō)明的是IN也是在H,W維度上進(jìn)行歸一化,但是會(huì)減去均值,對(duì)于N=1的情況歸一化的結(jié)果是0,但FRN可以避免這個(gè)問(wèn)題。圖4 當(dāng)N=1時(shí)不同e對(duì)FRN歸一化的影響歸一化之后同樣需要進(jìn)行縮放和平移變換,這里的
和也是可學(xué)習(xí)的參數(shù)(參數(shù)大小為C):FRN缺少去均值的操作,這可能使得歸一化的結(jié)果任意地偏移0,如果FRN之后是ReLU激活層,可能產(chǎn)生很多0值,這對(duì)于模型訓(xùn)練和性能是不利的。為了解決這個(gè)問(wèn)題,FRN之后采用的閾值化的ReLU,即TLU:
這里的
是一個(gè)可學(xué)習(xí)的參數(shù)。論文中發(fā)現(xiàn)FRN之后采用TLU對(duì)于提升性能是至關(guān)重要的。FRN層的實(shí)現(xiàn)也是極其容易,在TensorFlow中的實(shí)現(xiàn)代碼如下所示:
defFRN層的效果也是極好的,下圖給出了FRN與BN和GN的效果對(duì)比:
圖5 ResNet50模型采用FRN,BN,GN在ImageNet上不同batch size下的性能差異可以看到FRN是不受batch size的影響,而且效果是超越BN的。論文中還有更多的對(duì)比試驗(yàn)證明FRN的優(yōu)越性。
小結(jié)
BN目前依然是最常用的歸一化方法,GN雖然不會(huì)受batch size的影響,但是目前還沒大范圍采用,不知道FRN的提出會(huì)不會(huì)替代BN,這需要時(shí)間的檢驗(yàn)。
參考
總結(jié)
以上是生活随笔為你收集整理的均值归一化_超越BN和GN!谷歌提出新的归一化层:FRN的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 常用器件选型——电源篇
- 下一篇: 从网页中读取数据 python_数据分析