跳转至

2 Layer normalization 篇

Layer normalization-方法篇

一、Layer Norm 篇

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

$$ \mu=E(X)\leftarrow\frac{1}{H}\sum_{i=1}^{H}x_{i} $$

$$ \sigma\gets V a r(x)=\sqrt{\frac{1}{H}\sum_{i=1}^{H}(x_{i}-\mu)^{2}+\epsilon} $$

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

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

二、 RMS Norm 篇(均方根 Norm)

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

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

$$ x=\frac{x}{RMS(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(w): if w is ['ffn', 'v_proj', 'out_proj']: nn.init.xavier_normal_(w, gain=β) elif w is ['q_proj', 'k_proj']: nn.init.xavier_normal_(w, gain=1)

Deep Norm 有什么优点?


def deepnorm(x): return LayerNorm(x * α + f(x))

def deepnorm_init(w): if w is ['ffn', 'v_proj', 'out_proj']: nn.init.xavier_normal_(w, gain=β) elif w is ['q_proj', 'k_proj']: nn.init.xavier_normal_(w, gain=1)

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

Layer normalization-位置篇

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

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

Image

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 norm

b. 优点:Cogview用来避免值爆炸的问题

c. 缺点:训练不稳定,可能会导致训练崩溃。

Image
(a) $ W^{1} $ in the FFN sub-layers
Image
(b) $ W^{2} $ in the FFN sub-layers

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

模型normalization
GPT3Pre layer Norm
LLaMAPre RMS Norm
baichuanPre RMS Norm
ChatGLM-6BPost Deep Norm
ChatGLM2-6BPost RMS Norm
BloomPre layer Norm
FalconPre layer Norm

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