批處理歸一化(BN)已經成為許多先進深度學習模型的重要組成部分,特別是在計算機視覺領域。它通過批處理中計算的平均值和方差來規範化層輸入,因此得名。要使BN工作,批大小必須足夠大,通常至少為32。但是,在一些情況下,我們不得不滿足於小批量:
當每個數據樣本高度消耗內存時,例如視頻或高解析度圖像
當我們訓練一個很大的神經網絡時,它只留下很少的GPU內存來處理數據
因此,我們需要BN的替代品,它能在小批量下很好地工作。組歸一化(GN)是一種最新的規範化方法,可以避免利用批處理維,因此與批處理大小無關。
不同的歸一化方法
為了促進GN的表述,我們將首先看一下以前的一些標準化方法。
x ← (x - ) / √( + )
對於每個係數x輸入特性。和的均值和方差計算的集合S係數,和是一個小的常數數值穩定,避免除零。唯一的區別是集S是如何選擇的。
為說明歸一化方法的計算,我們考慮一批N = 3,輸入特徵a, b, c,它們有通道c = 4,高度H = 1,寬度W = 2:
a = [ [[2, 3]], [[5, 7]], [[11, 13]], [[17, 19]] ]b = [ [[0, 1]], [[1, 2]], [[3, 5]], [[8, 13]] ]c = [ [[1, 2]], [[3, 4]], [[5, 6]], [[7, 8]] ]
因此批將形狀(N、C, H, W) =(3、4、1、2)。我們把= 0.00001。
Batch Normalization
BN規範化的渠道和計算和沿軸(N、H、W)。批次係數被定義為一組的批處理x相同的頻道。
第一係數的= 2,i=(0,0,0),相應的和係數的計算,b和c的第一個頻道:
= mean(2, 3, 0, 1, 1, 2) = 1.5 = var(2, 3, 0, 1, 1, 2) = 0.917
代入歸一化公式,
a ← (2 - 1.5) / √(0.917 + 0.00001) = 0.522
計算a的所有係數
a ← [ [[0.522, 1.567]], [[0.676, 1.690]], [[1.071, 1.630]], [[1.066, 1.492]] ]
Layer Normalization
層歸一化(LN)的設計是為了克服BN的缺點,包括它對批大小的限制。計算和沿著(C、H、W)軸,和S定義為所有係數x屬於相同的輸入特性。因此,一個輸入特徵的計算完全獨立於批處理中的其他輸入特徵。
所有的係數是由相同的歸一化和
= mean(2, 3, 5, 7, 11, 13, 17, 19) = 9.625 = var(2, 3, 5, 7, 11, 13, 17, 19) = 35.734
計算a的所有係數
a ← [ [[-1.276, -1.108]], [[-0.773, -0.439]], [[0.230, 0.565]], [[1.234, 1.568]] ]
Instance Normalization
實例規範化(IN)可以看作是將BN公式單獨應用到每個輸入特性(又稱實例),就好像它是批處理中的唯一成員一樣。更準確地說,在計算和沿軸(H, W)和S的係數被定義為一組相同的輸入特性和x也在同一個頻道。
由於IN的計算與批大小為1時BN的計算相同,在大多數情況下,IN實際上會使情況變得更糟。而對於樣式轉換任務,IN在丟棄圖像對比度信息方面優於BN。
第一係數a= 2,i=i(0,0,0),相應的和只是
= mean(2, 3) = 2.5 = var(2, 3) = 0.25
當
a ← (2 - 2.5) / √(0.25 + 0.00001) = -1.000
得到
a ← [ [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]], [[-1.000, 1.000]] ]
Group Normalization
前面我們說過IN的計算與批大小為1時BN的計算相同,但是是針對對每個輸入特性分別應用BN。注意,IN還可以看作是將LN單獨應用於每個通道,就像通道的數量為1的LN一樣。
組歸一化(GN)是IN和LN的中間點。組織渠道分成不同的組,計算和沿著(H, W)軸和一組通道。批次然後組係數,在相同的輸入特性和同一組x渠道。
組的數量G是一個預定義的超參數,通常需要它來劃分c。為了簡單起見,我們將通道按順序分組。所以頻道1,…,C / G屬於第一組,頻道C / G + 1,…,2C / G屬於第二組,以此類推。當G = C時,即每組只有1個信道,則GN變為IN。另一方面,當G = 1時,GN變成LN。因此G控制了IN和LN之間的插值。
在我們的例子中,考慮G = 2。規範化的第一個係數a = 2,i=(0,0,0),我們使用的係數在4 / 2 = 2通道
= mean(2, 3, 5, 7) = 4.25 = var(2, 3, 5, 7) = 3.687
代入歸一化公式,
a ← (2 - 4.25) / √(3.687 + 0.00001) = -1.172
對於a的其他係數,計算方法相似:
a ← [ [[-1.172, -0.651]], [[0.391, 1.432]], [[-1.265, -0.633]], [[0.633, 1.265]] ]
歸一化方法比較
藍色的區域對應的集S計算和,然後用來正常化任何係數在藍色區域。
從這個圖中我們可以看到,GN如何在IN和LN之間插入。GN優於IN,因為GN可以利用跨渠道的依賴關係。它也比LN好,因為它允許對每一組通道學習不同的分布。
當批大小較小時,GN始終優於BN。但是,當批處理大小非常大時,GN的伸縮性不如BN,可能無法匹配BN的性能。
引用
A. Kolesnikov, L. Beyer, X. Zhai, J. Puigcerver, J. Yung, S. Gelly, and N. Houlsby. Big Transfer (BiT): General Visual Representation Learning (2019), arXiv preprint.S. Qiao, H. Wang, C. Liu, W. Shen, and A. Yuille. Weight Standardization (2019), arXiv preprint.S. Santurkar, D. Tsipras, A. Ilyas, and A. Madry. How Does Batch Normalization Help Optimization? (2018), NIPS 2018.Y. Wu, and K. He. Group Normalization (2018), ECCV 2018.作者:Wanshun Wong
Deephub翻譯組