歸一化方法 BN LN GN
Batch Normalization
BN是最常用的一種歸一化方式,以batch的維度做歸一化,但這個維度並不是固定不變的,如訓練和測試時一般不一樣,訓練的時候使用的是每個batch資料的方差和均值;BN訓練時不使用全量訓練集的均值和方差的原因是容易過擬合,不同batch的均值和方差存在差異,可以提升模型的泛化能力,所以再訓練時需要將訓練集完全打亂,並使用一個較大的batch值,否則一個batch的資料無法較好的獲得訓練集的分佈,影響模型訓練效果。
在測試的時候,一般都是訓練的時候在訓練集上通過滑動平均法預先計算好平均-mean和方差-variance引數,直接呼叫這些預計算好的引數來用。但是當訓練資料和測試資料分佈存在差別時,訓練集上訓練好的權重並不能代表測試資料,導致在訓練、驗證、測試三個階段存在不一致。
torch.nn.BatchNorma2d(num_features, eps = 0, affine = False, track_running = False)
Layer Normalization
BN的一個缺點是需要較大的batchsize才能合理利用訓練資料的均值和方差,這就導致記憶體很可能不夠用。Layer Normalization(LN)的一個優勢是不需要批訓練,在單條資料內部就能歸一化.
torch.nn.LayerNorm(normalized_shape = [c,h,w], eps = 0, elementwise_affine = False)
Group Normalization
Group Normalization(GN)適用於佔用視訊記憶體比較大的任務,如影象分割。對於這一類任務,batchsize設定大會佔用相當多的視訊記憶體,而batchsize是個位數時,BN的表現就會很差。GN是獨立於batch的,它是LN和IN的折中。
GN在計算均值和標準差時,把每一個樣本的feature map的channel分成G組,每組有C/G各channel,然後將這些channel中的元素求均值和標準差,各組channel用 其對應的歸一化引數獨立的歸一化。
torch.nn.GroupNorm(num_group = , num_channels = , eps = 0,affine = False)