TAG: layernorm; normalization; rmsnorm;
(2015) Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift https://arxiv.org/abs/1502.03167
在batch范围内对其中的每个值进行规范化,用于解决Internal Covariate Shift问题。
(M为mini batch的大小,计算针对与每一个元素)
Internal Covariate Shift(内部协变量偏移):在深度网络中,前一层参数的变化将导致后一层输入的分布发生变化,后一层的参数将需要不断调整以适应之前的改动,导致难以训练。
- 详解深度学习中的Normalization,BN/LN/WN https://zhuanlan.zhihu.com/p/33173246
(2016) Layer Normalization https://arxiv.org/abs/1607.06450
在值的范围内对该张量的每个元素进行规范化。
公式:
其中:
-
$E[x]$ 为平均 -
$Var[x]$ 为标准差,$\sigma=\sqrt{\frac{1}{N}\sum_i(x_i-\bar{x})^2}$ -
$\epsilon$ 为一个小数用于防除0,pytorch的nn.modules.normalization.LayerNorm
中该值默认为1e-5
-
$\gamma$ 和$\beta$ 为可训练参数- pytorch中有
elementwise_affine
开关,如果开启,则会增加weight
($\gamma$ )和bias
($\beta$ )两个可训练参数,后者可单独开关
- pytorch中有
研究A ConvNet for the 2020s中有对BatchNorm vs LayerNorm的讨论(引用了 Rethinking "Batch" in BatchNorm https://arxiv.org/abs/2105.07576 )。
Root Mean Square Layer Normalization. 去掉了原LayerNorm中的中心偏移(效果不显著),计算上比标准的LayerNorm来得简单。
LlamaRMSNorm公式(transformers src/transformers/models/llama/modeling_llama.py
):
- LlamaRMSNorm的mean只处理
dim=-1
-
$\epsilon$ =1e-6
来防止除以0 LlamaRMSNorm is equivalent to T5LayerNorm
- W为参数,形状与x一致,用于点乘
原论文的RMS( https://arxiv.org/pdf/1910.07467 ):
- Weight normalization
- Instance normalization