Batch normalization和Instance normalization的對比?

看到最近有不少CNN模型用到了instance normalization,比如最近的DeblurGAN [拍照手抖有救了!DeblurGAN消除運動模糊效果驚人|附論文+代碼]。想問下,BN和IN兩者的對比以及各自的適用場景?


私以為對這個的理解還是比較透徹的,恰好我們有幾篇paper其實都是和這個問題相關的,所以來簡答一下,希望能夠幫助大家梳理清楚背後的本質。

BN和IN其實本質上是同一個東西,只是IN是作用於單張圖片,但是BN作用於一個batch。但是為什麼IN還會被單獨提出,而且在Style Transfer的這個任務中大放異彩呢?簡言之,這背後的邏輯鏈是這樣的:

1. 通過調整BN統計量,或學習的參數beta和gamma,BN可以用來做domain adaptation。[1]

2. Style Transfer是一個把每張圖片當成一個domain的domain adaptation問題。[2]

這恰恰分別對應了我和一位優秀實習生的兩篇paper。以上其實都是對paper的一句話總結,下面稍微展開說一下具體內容。TLDR

在[1]中,我們提出了一個叫做adaBN的方法來做domain adaptation。其實adaBN做的事情看上去非常trivial:在拓展到未知的domain的時候,將BN的統計量在這個domain的unlabel data上重新計算一遍。如果用現有deep learning框架去實現的話,只需要一行就夠。但是這樣一個操作,可以帶來相當顯著的性能提升。究其原因,其實BN在做的事情就是將每個batch的數據歸一化到standard Gaussian。我們在不同數據上計算統計量,可以將不同domain的數據分布的差異歸一。

在[2]中,我們從style transfer中使用的Gram matrix出發,試圖解釋為什麼Gram matrix可以代表一個圖片的style這個問題。這是我看完style transfer的paper後感覺最為迷惑的一點。一個偶然的機會,我們發現這個匹配兩張圖的Gram matrix,其實數學上嚴格等價於極小化這兩張圖deep activation的2nd poly kernel的MMD距離。其中,MMD距離是用來通過從兩個分布中sample的樣本來衡量兩個分布之間的差異的一種度量。所以本質上,style transfer這個paper做的事情就是將生成圖片的deep activation分布和style image的分布進行匹配。這其實可以認為是一個domain adaptation的問題。所以很自然我們可以使用類似於adaBN的想法去做這件事情。這後續有一系列的工作拓展了這個想法,包括adaIN[3]以及若干基於GAN去做style transfer的工作。

不得不說,想明白這些之後,再去看style transfer的paper有一種神清氣爽的感覺。我想這也就是我們要去探究「鍊金術」背後的原理的一大原因。站在更general更高的角度去看待這些問題真的是一件讓人身心愉悅的事情,而且很多後續的extension都是非常的直觀。 :-)

[1] Li, Yanghao, Naiyan Wang, Jianping Shi, Jiaying Liu, and Xiaodi Hou. "Revisiting batch normalization for practical domain adaptation." arXiv preprint arXiv:1603.04779 (2016).

[2] Li, Yanghao, Naiyan Wang, Jiaying Liu, and Xiaodi Hou. "Demystifying neural style transfer." arXiv preprint arXiv:1701.01036 (2017).

[3] Huang, Xun, and Serge Belongie. "Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization." arXiv preprint arXiv:1703.06868 (2017).


回答這個問題,還是用一句經典哲學道理開頭:天下沒有免費的午餐

從其名Batch normalization,就知道參與某特定樣本nomalization輸出計算的統計量會受到batch中其他樣本的影響。Instance則是由自己計算出的統計量。

哪個好壞,真說不出來,只能說在GAN,STYLE TRANSFER這類任務上IN的實驗結論要優於BN,給出的普遍的闡述性解釋是:這類生成式方法,自己的風格比較獨立不應該與batch中其他的樣本產生太大聯繫。

所以目前的結論是:在圖片視頻分類等特徵提取網路中大多數情況BN效果優於IN,在生成式類任務中的網路IN優於BN。

當然,舉一反三,如果訓練conditional GAN或者STYLE TRANSFER的實驗上控制各標籤均勻採樣,很可能介於這個結論之間。但折中點需要實驗來探索了。

具體我們可以猜測存在的最優N方法分別有,local period normalization,instance normalization,label-based batch normalization, batch normalization, anti-label based batch normalization, full-size normalization.

至於具體形式化的解釋,暫時沒有。因為BN這篇源頭論文就講不清(覺得講清楚的可以來討論)。比如還有一種叫VBN(virtual batch normalization)的normalization手段,我記得是Bengio他們提出用在GAN上的,該方法參與某特定樣本nomalization輸出計算的統計量是由一個不相關batch計算的,所以叫虛擬batch。這豈不是讓人完全沒法解釋嗎。


首先,batch norm是對一個batch里所有的圖片的所有像素求均值和標準差。而instance norm是對單個圖片的所有像素求均值和標準差。

這裡其實可以看到的一個問題,由於shuffle的存在,每個batch里每次的均值和標準差是不穩定,本身相當於是引入了雜訊。而instance norm的信息都是來自於自身的圖片,某個角度來說,可以看作是全局信息的一次整合和調整。對於訓練也說也是更穩定的一種方法。其實我們完全可以把instance norm當做L2 norm這種方法的一個變種。前者適合卷積層,後者適合全連接層。

僅個人意見,可能存在各種問題,歡迎大神補充討論。


貌似有個公司的面試題目是這樣的:Batch normalization在什麼樣的情況下不推薦使用?

然後,個人回答:1,RNN裡面(看hinton的layer normalization想到的);2, 超解析度或者對圖像對比度、亮度等有要求的時候不建議使用BN。個人的回答,僅供參考


BN更注重的是對全局例如一個資料庫的數據的歸一化,因為在分類分割這種判定模型中,結果的確定是依賴於數據的整體分布的。而在做style transfer等圖像之間的變換時,圖像的生成結果主要依賴於某個圖像實例,這種全局信息並不會給任務帶來收益,反而會弱化實例之間的特殊性,所以採用IN便是一種更好的選擇,用來加速模型的收斂並且保持實例之間的獨立性。當然這只是比較直白的解釋。


batch normalization有一種理解是每個batch的均值和方差由於shuffle都會改變,所以可以理解做了一種數據增強。但instance normalization的均值方差只跟當前圖片自身相關,因此訓練相對更穩定,可以理解為一種訓練過程中的歸一化。


推薦閱讀:

有哪些好看的CNN模型畫法?
如何比較PixelCNN與DCGAN兩種Image generation方法?
[DL-架構-ResNet系] 007 SENet
從編程實現角度學習Faster R-CNN(附極簡實現)
PhD Talk直播預告 | 亞馬遜高級應用科學家熊元駿:人類行為理解研究進展

TAG:計算機視覺 | 深度學習DeepLearning |