全面解讀Group Normbalization-(吳育昕-何凱明 重磅之作)
作者:劉威威
編輯:李雪冬
前 言
Face book AI research(FAIR)
吳育昕-凱明聯合推出重磅新作
Group Normbalization(GN),提出使用
Group Normalization
(https://arxiv.org/abs/1803.08494)
替代深度學習里程碑式的工作Batchnormalization,
筆者見獵心喜,希望和各位分享此工作,本文將從以下三個方面為讀者詳細解讀此篇文章:
What's wrong with BN ?
How GN work ?
Why GN work ?
注:本文謹代表筆者觀點,文中若有不足指出及疏忽之處,誠請批評指正
What is Group Normbalization
一句話概括,GroupNormbalization(GN)是一種新的深度學習歸一化方式,可以替代BN。
眾所周知,BN是深度學習中常使用的歸一化方法,在提升訓練以及收斂速度上發揮了重大的作用,是深度學習上里程碑式的工作,但是其仍然存在一些問題,而新提出的GN解決了BN式歸一化對batch size依賴的影響。詳細的BN介紹可以參考我的另一篇部落格(https://blog.csdn.net/qq_25737169/article/details/79048516)。
So, BN到底出了什麼問題, GN又厲害在哪裡?
2What's wrong with BN
BN全名是BatchNormalization,見名知意,其是一種歸一化方式,而且是以batch的維度做歸一化,那麼問題就來了,此歸一化方式對batch是independent的,過小的batch size會導致其效能下降,一般來說每GPU上batch設為32最合適,但是對於一些其他深度學習任務batch size往往只有1-2,比如目標檢測,影象分割,視訊分類上,輸入的影象資料很大,較大的batchsize視訊記憶體吃不消。那麼,對於較小的batchsize,其performance是什麼樣的呢?如下圖:
橫軸表示每個GPU上的batch size大小,從左到右一次遞減,縱軸是誤差率,可見,在
另外,BatchNormalization是在batch這個維度上Normalization,但是這個維度並不是固定不變的,比如訓練和測試時一般不一樣,一般都是訓練的時候在訓練集上通過滑動平均預先計算好平均-mean,和方差-variance引數,在測試的時候,不在計算這些值,而是直接呼叫這些預計算好的來用,但是,當訓練資料和測試資料分佈有差別是時,訓練機上預計算好的資料並不能代表測試資料,這就導致在訓練,驗證,測試這三個階段存在inconsistency。
既然明確了問題,解決起來就簡單了,歸一化的時候避開batch這個維度是不是可行呢,於是就出現了layer normalization和instance normalization等工作,但是仍比不上本篇介紹的工作GN。
3How GN Work
GN本質上仍是歸一化,但是它靈活的避開了BN的問題,同時又不同於Layer
從左到右一次是BN,LN,IN,GN
眾所周知,深度網路中的資料維度一般是[N, C, H, W]或者[N, H, W,C]格式,N是batch size,H/W是feature的高/寬,C是feature的channel,壓縮H/W至一個維度,其三維的表示如上圖,假設單個方格的長度是1,
那麼其表示的是[6, 6,*, * ]
上圖形象的表示了四種norm的工作方式:
BN在batch的維度上norm,歸一化維度為[N,H,W],對batch中對應的channel歸一化;
LN避開了batch維度,歸一化的維度為[C,H,W];
IN 歸一化的維度為[H,W];
而GN介於LN和IN之間,其首先將channel分為許多組(group),對每一組做歸一化,及先將feature的維度由[N, C, H, W]reshape為[N, G,C//G , H, W],歸一化的維度為[C//G , H, W]
事實上,GN的極端情況就是LN和I N,分別對應G等於C和G等於1,作者在論文中給出G設為32較好
由此可以看出,GN和BN是有很多相似之處的,程式碼相比較BN改動只有一兩行而已,論文給出的程式碼實現如下:
defGroupNorm(x, gamma, beta, G, eps=1e-5):
# x: input features with shape [N,C,H,W]
# gamma, beta: scale and offset, with shape [1,C,1,1]
# G: number of groups for GN
N, C, H, W = x.shape
x = tf.reshape(x,[N, G, C // G, H, W])
mean,var= tf.nn.moments(x,[2,3,4], keep dims=True)
x =(x - mean)/ tf.sqrt(var+ eps)
x = tf.reshape(x,[N, C, H, W])
return x * gamma + beta
其中beta 和gama引數是norm中可訓練引數,表示平移和縮放因子.
從上述norm的對比來看,不得不佩服作者四兩撥千斤的功力,僅僅是稍微的改動就能擁有舉重若輕的效果。
4Why GN work
上面三節分別介紹了BN的問題,以及GN的工作方式,本節將介紹GN work的原因。
傳統角度來講,在深度學習沒有火起來之前,提取特徵通常是使用SIFT,HOG和GIST特徵,這些特徵有一個共性,都具有按group表示的特性,每一個group由相同種類直方圖的構建而成,這些特徵通常是對在每個直方圖(histogram)或每個方向(orientation)上進行組歸一化(group-wise norm)而得到。而更高維的特徵比如VLAD和Fisher Vectors(FV)也可以看作是group-wisefeature,此處的group可以被認為是每個聚類(cluster)下的子向量sub-vector。
從深度學習上來講,完全可以認為卷積提取的特徵是一種非結構化的特徵或者向量,拿網路的第一層卷積為例,卷積層中的的卷積核filter1和此卷積核的其他經過transform過的版本filter2(transform可以是horizontal flipping等),在同一張影象上學習到的特徵應該是具有相同的分佈,那麼,具有相同的特徵可以被分到同一個group中,按照個人理解,每一層有很多的卷積核,這些核學習到的特徵並不完全是獨立的,某些特徵具有相同的分佈,因此可以被group。
導致分組(group)的因素有很多,比如頻率、形狀、亮度和紋理等,HOG特徵根據orientation分組,而對神經網路來講,其提取特徵的機制更加複雜,也更加難以描述,變得不那麼直觀。另在神經科學領域,一種被廣泛接受的計算模型是對cell的響應做歸一化,此現象存在於淺層視覺皮層和整個視覺系統。
作者基於此,提出了組歸一化(Group Normalization)的方式,且效果表明,顯著優於BN、LN、IN等。
GN的歸一化方式避開了batchsize對模型的影響,特徵的group歸一化同樣可以解決的問題,並取得較好的效果。
5
Show Time
以resnet50為base model,batchsize設定為32在imagenet資料集上的訓練誤差(左)和測試誤差(右)
GN沒有表現出很大的優勢,在測試誤差上稍大於使用BN的結果。
可以很容易的看出,GN對batch size的魯棒性更強
同時,作者以VGG16為例,分析了某一層卷積後的特徵分佈學習情況,分別根據不使用Norm 和使用BN,GN做了實驗,實驗結果如下:
統一batch size設定的是32,最左圖是不使用norm的conv5的特徵學習情況,中間是使用了BN結果,最右是使用了GN的學習情況,相比較不使用norm,使用norm的學習效果顯著,而後兩者學習情況相似,不過更改小的batch size後,BN是比不上GN的。
作者同時做了實驗展示了GN在object detector/segmentation 和video classification上的效果,詳情可見原文,此外,作者在paper最後一節中大致探討了discussion and future work, 實乃業界良心。
小結本文從三個方面分析了BN的drawback,GN的工作機制,GN work的背後原理,希望對讀者有所幫助。
end
機器學習演算法全棧工程師
一個用心的公眾號
進群,學習,得幫助
你的關注,我們的熱度,
我們一定給你學習最大的幫助