Layer normalization 篇

来自: AiGC面试宝典

Layer normalization-方法篇

一、Layer Norm 篇

1.1 Layer Norm 的计算公式写一下?

$$ \begin{array}{c}{{\displaystyle\mu=E(X)\leftarrow\frac{1}{H}\sum_{i=1}^{H}x_{i}}}\ {{\mathrm{}}}\ {{\displaystyle\sigma\leftarrow V a r(x)=\sqrt{\frac{1}{H}\sum_{i=1}^{H}(x_{i}-\mu)^{2}+\epsilon}}}\end{array} $$

$$ y=\frac{x-E(x)}{\sqrt{V a r(X)+\epsilon}}\cdot\gamma+\beta $$

gamma:可训练的再缩放参数beta:可训练的再偏移参数

二、RMS Norm 篇 (均方根 Norm)

2.1 RMS Norm 的计算公式写一下?

$$ R M S(x)=\sqrt{\frac{1}{H}\sum_{i=1}^{H}x_{i}^{2}} $$

$$ x=\frac{x}{R M S(x)}\cdot\gamma $$

2.2 RMS Norm 相比于 Layer Norm 有什么特点?

RMS Norm 简化了 Layer Norm ,去除掉计算均值进行平移的部分。
对比LN,RMS Norm的计算速度更快。效果基本相当,甚至略有提升。

三、Deep Norm 篇

3.1 Deep Norm 思路?

Deep Norm方法在执行Layer Norm之前,up-scale了残差连接 (alpha>1);另外,在初始化阶段down-scale了模型参数(beta<1)。

3.2 写一下 Deep Norm 代码实现?

def deepnorm(x): return LayerNorm(x *α +f(x))
def deepnorm_init(v): nn.init.xavier_normal_(w, gain=β) nn.init.xavier_normal_(v,gain=1)

Deep Norm 有什么优点?

def deepnorm(x): return LayerNorm(x *α +f(x))
def deepnorm_init(v): nn.init.xavier_normal_(v,gain=1)

Deep Norm可以缓解爆炸式模型更新的问题,把模型更新限制在常数,使得模型训练过程更稳定。

Layer normalization-位置篇

1 LN 在 LLMs 中的不同位置 有什么区别么?如果有,能介绍一下区别么?

回答:有,LN 在 LLMs 位置有以下几种:

  1. Post LN:

a. 位置:layer norm在残差链接之后
b. 缺点:Post LN 在深层的梯度范式逐渐增大,导致使用post-LN的深层transformer容易出现训练不稳定的问题

  1. Pre-LN:

a. 位置:layer norm在残差链接中
b. 优点:相比于Post-LN,Pre LN 在深层的梯度范式近似相等,所以使用Pre-LN的深层transformer训练更稳定,可以缓解训练不稳定问题
c. 缺点:相比于Post-LN,Pre-LN的模型效果略差

  1. Sandwich-LN:

a. 位置:在pre-LN的基础上,额外插入了一个layer normb. 优点:Cogview用来避免值爆炸的问题c. 缺点:训练不稳定,可能会导致训练崩溃。

Layer normalization 对比篇

LLMs 各模型分别用了 哪种 Layer normalization?

模型normalization
GPT3Pre layer Norm
LLaMAPreRMSNorm
baichuanPreRMSNorm
ChatGLM-6BPost Deep Norm
ChatGLM2-6BPostRMSNorm
BloomPrelayerNorm
FalconPrelayerNorm

BLOOM在embedding层后添加layer normalization,有利于提升训练稳定性:但可能会带来很大的性能损失