LayerNorm 和 BatchNorm
可以首先参考 史上最全!Pytorch中归一化层的介绍使用(Batch Normalization、Layer Normalization、Instance Normalization、GroupNorm)
layernorm 是针对单个样本指定维度的归一化。对于NLP来说,输入的尺寸为(batch_size, seq_size, emb_size),layernorm是对每一个token的embedding进行归一化,即\(\mu= \frac{1}{|\text{emb}|}\sum_{i=0}^{emb\_size}\mathbf{x}_i\),\(\mathbf{x}\in\mathbb{R}^{\text{emb_size}}\)表示一个token的embedding。
而batchnorm是针对一个batch内所有样本的同一通道进行归一化,对于CV来说,输入的尺寸为(batch_size, chanel_size, height, weight),则相应的均值表示为\(\mu=\frac{1}{|\text{batch}|}\sum_{i=0}^{batch_size}\mathbf{x}_i\),\(\mathbf{x}\in\mathbb{R}^{chanel\times height \times weight}\)表示一张图片的embedding。
ln = nn.LayerNorm(2)
bn = nn.BatchNorm1d(2)
X = torch.tensor([[1, 2], [2, 3]], dtype=torch.float32)
# 在训练模式下计算X的均值和方差
print('layer norm:', ln(X), '\nbatch norm:', bn(X))
layer norm: tensor([[-1.0000, 1.0000],
[-1.0000, 1.0000]], grad_fn=<NativeLayerNormBackward0>)
batch norm: tensor([[-1.0000, -1.0000],
[ 1.0000, 1.0000]], grad_fn=<NativeBatchNormBackward0>)

浙公网安备 33010602011771号