Batch Norm可謂深度學習中非常重要的技術,不僅可以使訓練更深的網絡變容易,加速收斂,還有一定正則化的效果,可以防止模型過擬合。在很多基於CNN的分類任務中,被大量使用。
但我最近在圖像超分辨率和圖像生成方面做了一些實踐,發現在這類任務中,Batch Norm的表現並不好,加入了Batch Norm,反而使得訓練速度緩慢,不穩定,甚至最后發散。
以下是我對這一現象的個人看法,並不嚴格,還需繼續檢驗。
首先,以圖像超分辨率來說,網絡輸出的圖像在色彩、對比度、亮度上要求和輸入一致,改變的僅僅是分辨率和一些細節,而Batch Norm,對圖像來說類似於一種對比度的拉伸,任何圖像經過Batch Norm后,其色彩的分布都會被歸一化,也就是說,它破壞了圖像原本的對比度信息,所以Batch Norm的加入反而影響了網絡輸出的質量。雖然Batch Norm中的scale和shift參數可以抵消歸一化的效果,但這樣就增加了訓練的難度和時間,還不如直接不用。不過有一類網絡結構可以用,那就是殘差網絡(Residual Net),但也僅僅是在residual block當中使用,比如SRResNet,就是一個用於圖像超分辨率的殘差網絡。為什么這類網絡可以使用Batch Norm呢?我個人理解是,因為圖像的對比度信息可以通過skip connection直接傳遞,所以也就不必擔心Batch Norm的破壞了。
基於這種想法,也可以從另外一種角度解釋Batch Norm為何在圖像分類任務上如此有效。圖像分類不需要保留圖像的對比度信息,利用圖像的結構信息就可以完成分類,所以,將圖像都通過Batch Norm進行歸一化,反而降低了訓練難度,甚至一些不明顯的結構,在Batch Norm后也會被凸顯出來(對比度被拉開了)。
而對於照片風格轉移,為何可以用Batch Norm呢?原因在於,風格化后的圖像,其色彩、對比度、亮度均和原圖像無關,而只與風格圖像有關,原圖像只有結構信息被表現到了最后生成的圖像中。因此,在照片風格轉移的網絡中使用Batch Norm或者Instance Norm也就不奇怪了,而且,Instance Norm是比Batch Norm更直接的對單幅圖像進行的歸一化操作,連scale和shift都沒有。
說得更廣泛一些,Batch Norm會忽略圖像像素(或者特征)之間的絕對差異(因為均值歸零,方差歸一),而只考慮相對差異,所以在不需要絕對差異的任務中(比如分類),有錦上添花的效果。而對於圖像超分辨率這種需要利用絕對差異的任務,Batch Norm只會添亂。