各種歸一化層(BatchNorm、LayerNorm、InstanceNorm、GroupNorm)及其Pytorch實現

BNLNINGN從學術化上解釋差異:
BatchNorm:batch方向做歸一化,算NHW的均值,對小batchsize效果不好;BN主要缺點是對batchsize的大小比較敏感,由於每次計算均值和方差是在一個batch上,所以如果batchsize太小,則計算的均值、方差不足以代表整個數據分佈
LayerNorm:channel方向做歸一化,算CHW的均值,主要對RNN作用明顯;
InstanceNorm:一個channel內做歸一化,算H*W的均值,用在風格化遷移;因爲在圖像風格化中,生成結果主要依賴於某個圖像實例,所以對整個batch歸一化不適合圖像風格化中,因而對HW做歸一化。可以加速模型收斂,並且保持每個圖像實例之間的獨立。
GroupNorm:將channel方向分group,然後每個group內做歸一化,算(C//G)HW的均值;這樣與batchsize無關,不受其約束。
SwitchableNorm:將BN、LN、IN結合,賦予權重,讓網絡自己去學習歸一化層應該使用什麼方法。
 

 

1、BatchNorm

torch.nn.BatchNorm1d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm2d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
torch.nn.BatchNorm3d(num_features, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)

參數:

num_features: 來自期望輸入的特徵數,該期望輸入的大小爲’batch_size x num_features [x width]’
eps: 爲保證數值穩定性(分母不能趨近或取0),給分母加上的值。默認爲1e-5。
momentum: 動態均值和動態方差所使用的動量。默認爲0.1。
affine: 布爾值,當設爲true,給該層添加可學習的仿射變換參數。
track_running_stats:布爾值,當設爲true,記錄訓練過程中的均值和方差;
 

 實現公式:
在這裏插入圖片描述

2、GroupNorm

torch.nn.GroupNorm(num_groups, num_channels, eps=1e-05, affine=True)

參數:

num_groups:需要劃分爲的groups
num_features: 來自期望輸入的特徵數,該期望輸入的大小爲’batch_size x num_features [x width]’
eps: 爲保證數值穩定性(分母不能趨近或取0),給分母加上的值。默認爲1e-5。
momentum: 動態均值和動態方差所使用的動量。默認爲0.1。
affine: 布爾值,當設爲true,給該層添加可學習的仿射變換參數。

 實現公式:

 

3、InstanceNorm

torch.nn.InstanceNorm1d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm2d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)
torch.nn.InstanceNorm3d(num_features, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)

參數:

num_features: 來自期望輸入的特徵數,該期望輸入的大小爲’batch_size x num_features [x width]’
eps: 爲保證數值穩定性(分母不能趨近或取0),給分母加上的值。默認爲1e-5。
momentum: 動態均值和動態方差所使用的動量。默認爲0.1。
affine: 布爾值,當設爲true,給該層添加可學習的仿射變換參數。
track_running_stats:布爾值,當設爲true,記錄訓練過程中的均值和方差;

實現公式:

4、LayerNorm

torch.nn.LayerNorm(normalized_shape, eps=1e-05, elementwise_affine=True)

參數:

normalized_shape: 輸入尺寸
[∗×normalized_shape[0]×normalized_shape[1]×…×normalized_shape[−1]]
eps: 爲保證數值穩定性(分母不能趨近或取0),給分母加上的值。默認爲1e-5。
elementwise_affine: 布爾值,當設爲true,給該層添加可學習的仿射變換參數。

實現公式:


5、LocalResponseNorm

torch.nn.LocalResponseNorm(size, alpha=0.0001, beta=0.75, k=1.0)

參數:

size:用於歸一化的鄰居通道數
alpha:乘積因子,Default: 0.0001
beta :指數,Default: 0.75
k:附加因子,Default: 1

實現公式:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章