1. BatchNorm
BatchNorm主要对数据的一定维度在batch数据中进行归一,一般来说应用于图像。
这种方法很难适用于序列数据,对于序列数据而言,在batch维度做归一意义不大,而且一个batch内的序列长度不同。
2. LayerNorm
LayerNorm是针对序列数据提出的一种归一化方法,主要在layer维度进行归一化,即对整个序列进行归一化。layerNorm会计算一个layer的所有activation的均值和方差,利用均值和方差进行归一化。
有时候面试官会让写公式,所以还是需要对公式比较熟悉,具体公式如下:

归一化后的激活值如下:

3.RMSNorm
RMSNorm的提出是为了提升layerNorm的训练速度提出的。RMSNorm也是一种layerNorm,只是归一化的方法不同。相比layerNorm中利用均值和方差进行归一化,RMSNorm 利用均方根进行归一化。
具体公式修改如下:

归一化后的激活值如下:

对于layerNorm和RMSNorm,layerNorm包含缩放和平移两部分,RMSNorm去除了平移部分,只保留了缩放部分。这样做的依据是,有研究认为layerNorm取得成功的关键是缩放部分的缩放不变性,而不是平移部分的平移不变性。
RMSNorm相比一般的layerNorm,减少了计算均值和平移系数的部分,训练速度更快,效果基本相当,甚至有所提升。
4.DeepNorm
DeepNorm是由微软提出的一种Normalization方法。主要对Transformer结构中的残差链接做修正。
DeepNorm可以缓解模型参数爆炸式更新的问题,把模型参数更新限制在一个常数域范围内,使得模型训练过程可以更稳定。模型规模可以达到1000层。
DeepNorm兼具PreLN的训练稳定和PostLN的效果性能。
具体的实现,可以参照下图,DeepNorm对layerNorm之前的残差链接进行了up-scale,在初始化阶段down-scale了模型参数。GLM-130B 模型中就采用了DeepNorm。
