传统的Bert采用了Post-Norm的方法,而例如最近的Bloom、LLama都使用了Pre-Norm的方法。那么这两个有什么区别呢?

首先查看Bert的Post-Norm,是在Add操作后进行Norm操作,因此叫做Post-Norm。

而Pre-Norm则是Norm之后再Add,所以叫Pre-Norm。

Pre-Norm和Post-Norm有什么区别?

简单说就是Post-Norm由于是在残差之后进行归一化,因此归一化的效果更好,使得模型的鲁棒性更强

而Pre-Norm由于并不是所有的参数都参与正则化,因此整体来说更不容易发生梯度消失的问题,模型训练的稳定性更强。

因此,在Bert时代由于层数较浅,往往采用的是Post-Norm,而到了大模型时代,由于transformer的层数开始加深,为了训练稳定性开始使用Pre-Norm。

那么有没有既要又要的操作呢?

DeepNorm

微软的一个实习生提出来了一个DeepNorm,它可以稳定的训练千层的transformer。而GLM也是使用了这种Norm,使得百亿模型在整个训练过程中只出现了3次loss异常(当然也有别的措施)。

详见【论文】DeepNet: Scaling Transformers to 1,000 Layers


0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用 * 标注