1. 程式人生 > >全面解讀Group Normbalization-(吳育昕-何凱明 重磅之作)

全面解讀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 ?

    注:本文謹代表筆者觀點,文中若有不足指出及疏忽之處,誠請批評指正

1

What is Group Normbalization

一句話概括,GroupNormbalizationGN)是一種新的深度學習歸一化方式,可以替代BN

眾所周知,BN是深度學習中常使用的歸一化方法,在提升訓練以及收斂速度上發揮了重大的作用,是深度學習上里程碑式的工作,但是其仍然存在一些問題,而新提出的GN解決了BN式歸一化對batch size依賴的影響。詳細的BN介紹可以參考我的另一篇部落格(https://blog.csdn.net/qq_25737169/article/details/79048516)。

So, BN到底出了什麼問題, GN又厲害在哪裡?

2

What's wrong with BN

BN全名是BatchNormalization,見名知意,其是一種歸一化方式,而且是以batch的維度做歸一化,那麼問題就來了,此歸一化方式對batchindependent的,過小的batch size會導致其效能下降,一般來說每GPUbatch設為32最合適,但是對於一些其他深度學習任務batch size往往只有1-2,比如目標檢測,影象分割,視訊分類上,輸入的影象資料很大,較大的batchsize視訊記憶體吃不消。那麼,對於較小的batchsize,其performance是什麼樣的呢?如下圖:

640?wx_fmt=png

橫軸表示每個GPU上的batch size大小,從左到右一次遞減,縱軸是誤差率,可見,在

batch較小的時候,GNBN有少於10%的誤差率。

另外,BatchNormalization是在batch這個維度上Normalization,但是這個維度並不是固定不變的,比如訓練和測試時一般不一樣,一般都是訓練的時候在訓練集上通過滑動平均預先計算好平均-mean,和方差-variance引數,在測試的時候,不在計算這些值,而是直接呼叫這些預計算好的來用,但是,當訓練資料和測試資料分佈有差別是時,訓練機上預計算好的資料並不能代表測試資料,這就導致在訓練,驗證,測試這三個階段存在inconsistency

既然明確了問題,解決起來就簡單了,歸一化的時候避開batch這個維度是不是可行呢,於是就出現了layer normalizationinstance normalization等工作,但是仍比不上本篇介紹的工作GN

3

How GN Work

GN本質上仍是歸一化,但是它靈活的避開了BN的問題,同時又不同於Layer 

640?wx_fmt=png

從左到右一次是BNLNINGN 


眾所周知,深度網路中的資料維度一般是[N, C, H, W]或者[N, H, WC]格式,Nbatch sizeH/Wfeature的高/寬,Cfeaturechannel,壓縮H/W至一個維度,其三維的表示如上圖,假設單個方格的長度是1

那麼其表示的是[6, 6*, * ]

上圖形象的表示了四種norm的工作方式:

  • BN在batch的度上norm,一化[N,H,W],batch中對應的channel歸一化;

  • LN避開了batch維度,歸一化的維度為[C,H,W];

  • IN 歸一化的維度為[H,W];

  • GN介於LNIN,其首先將channel為許group),每一一化,及先將feature度由[N, C, H,     W]reshape[N, GC//G , H, W]一化的[C//G , H, W]

事實上,GN的極端情況就是LNI N,分別對應G等於CG等於1,作者在論文中給出G設為32較好

640?wx_fmt=png由此可以看出,GNBN是有很多相似之處的,程式碼相比較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的對比來看,不得不佩服作者四兩撥千斤的功力,僅僅是稍微的改動就能擁有舉重若輕的效果。

4

Why GN work

上面三節分別介紹了BN的問題,以及GN的工作方式,本節將介紹GN work的原因。

傳統角度來講,在深度學習沒有火起來之前,提取特徵通常是使用SIFTHOGGIST特徵,這些特徵有一個共性,都具有按group表示的特性,每一個group由相同種類直方圖的構建而成,這些特徵通常是對在每個直方圖(histogram)或每個方向(orientation)上進行組歸一化(group-wise norm)而得到。而更高維的特徵比如VLADFisher Vectors(FV)也可以看作是group-wisefeature,此處的group可以被認為是每個聚類(cluster)下的子向量sub-vector

從深度學習上來講,完全可以認為卷積提取的特徵是一種非結構化的特徵或者向量,拿網路的第一層卷積為例,卷積層中的的卷積核filter1和此卷積核的其他經過transform過的版本filter2transform可以是horizontal flipping等),在同一張影象上學習到的特徵應該是具有相同的分佈,那麼,具有相同的特徵可以被分到同一個group中,按照個人理解,每一層有很多的卷積核,這些核學習到的特徵並不完全是獨立的,某些特徵具有相同的分佈,因此可以被group

            導致分組(group)的因素有很多,比如頻率、形狀、亮度和紋理等,HOG特徵根據orientation分組,而對神經網路來講,其提取特徵的機制更加複雜,也更加難以描述,變得不那麼直觀。另在神經科學領域,一種被廣泛接受的計算模型是對cell的響應做歸一化,此現象存在於淺層視覺皮層和整個視覺系統。

            作者基於此,提出了組歸一化(Group Normalization)的方式,且效果表明,顯著優於BNLNIN等。

             GN的歸一化方式避開了batchsize對模型的影響,特徵的group歸一化同樣可以解決的問題,並取得較好的效果。

5

Show  Time

640?wx_fmt=png

resnet50base modelbatchsize設定為32imagenet資料集上的訓練誤差(左)和測試誤差(右)
GN沒有表現出很大的優勢,在測試誤差上稍大於使用BN的結果。

640?wx_fmt=png

可以很容易的看出,GNbatch size的魯棒性更強

同時,作者以VGG16為例,分析了某一層卷積後的特徵分佈學習情況,分別根據不使用Norm 和使用BNGN做了實驗,實驗結果如下:

640?wx_fmt=png

統一batch size設定的是32,最左圖是不使用normconv5的特徵學習情況,中間是使用了BN結果,最右是使用了GN的學習情況,相比較不使用norm,使用norm的學習效果顯著,而後兩者學習情況相似,不過更改小的batch size後,BN是比不上GN的。

作者同時做了實驗展示了GNobject detector/segmentation video classification上的效果,詳情可見原文,此外,作者在paper最後一節中大致探討了discussion and future work, 實乃業界良心。

小結

本文從三個方面分析了BNdrawbackGN的工作機制,GN work的背後原理,希望對讀者有所幫助。

end

機器學習演算法全棧工程師

                            一個用心的公眾號

640?wx_fmt=jpeg

長按,識別,加關注

進群,學習,得幫助

你的關注,我們的熱度,

我們一定給你學習最大的幫助