Skip to content

语言模型重要组件

📅 发表于 2025/07/04
🔄 更新于 2025/07/04
👁️ -- 次访问
📝 0 字
0 分钟
llm
#Attention
#Batch Norm
#Layer Norm
#PreLorm
#PostNorm
#RMSNorm
#QK-Norm
#RoPE
#GeLU
#TopK
#TopP
#Temperature

参考好文

Attention 机制

整体移动至页面 LLM Attention 系列

Normalization

为什么需要归一化

参见之前的笔记网络优化-数据预处理

  • 未归一化:各样本欧式距离度量不准,梯度下降法搜索效率低,模型训练困难
  • 归一化:各维度特征归一化到同一个区间;消除不同特征的相关性

Batch Norm(2015)

Batch Normalization 笔记

Batch Normalization

BN定义

  • 范围:对一个Batch的样本为每个通道数据做归一化
  • 求均值、方差让数据标准化到(0, 1)正态分布,避免发生梯度消失
  • 加入缩放γ和平移变量β:使数据在归一化后保留原有学习来的特征
y=γx^+β,x^=xE(x)Var(x)+ϵ

BN优点

  • 允许大学习率,降低对初始化的依赖
  • 让中间层数值更稳定,为后面的网络提供坚实基础
  • 轻微正则作用 (隐藏层+噪声,类似dropout)

存在的问题

  • bs太小:效果不好,均值方差不足以代表整个数据
  • bs太大:超过内存;会固定梯度下降方向导致难以更新;需跑更多epoch导致训练时间变长

Layer Norm(2016)

层归一化笔记

Layer Norm

定义

  • 范围对同一层所有神经元的输入 / 某条数据(tensor)的多个维度 做归一化
  • 算法:同BN,归一化+缩放平移参数

优点

  • 不需要Batch训练,在单条数据内部就能归一化
  • LN可以有效缓解RNN的梯度消失和爆炸问题,但在CNN上效果不如BN

Post & Pre Layer Norm(2020)

Post-LN & Pre-LN

Pre-LN

  • LN在MHA之前做归一化
  • 行业标准更稳定
    • 大模型训练难度大,使用Pre-LN居多。
  • 优点
    • 防止梯度爆炸或消失:一部分参数直接加在后面,没有正则化,可在反向时防止梯度消失或爆炸。
  • 缺点
    • 会削弱模型深度:梯度可以直接通过残差连接抄近道,不完全流经每一层

Post-LN

  • 定义:LN在残差之后做归一化,最初Bert的LN。
  • 优点
    • 性能可能更好:迫使信息和梯度必须流过每1层,完全利用模型深度
    • 对参数正则化更强、模型收敛性更好
  • 缺点
    • 训练不稳定、很容易失败。
    • MiniMax-01 使用Hybrid Lightning Attention
      • 实验Post-LN比Pre-LN 效果好,从43.9 -> 50.2。
      • 稳定训练。

Deep Norm(2022)

Deep Norm

定义

  • 范围:对Post-Layer Norm的改进。
    • Post-LN问题:不稳定性来自梯度消失以及太大模型更新。
  • 算法:
    • 在LN之前,乘以α扩大残差连接LayerNorm(x * alpha + f(x))
    • 以β减小部分参数的初始化范围,Xavier均匀分布初始化

优点

  • 具备Post-LN的好性能,且具有Pre-LN 的稳定训练

RMS Norm(2019) & pRMS Norm

RMS Norm

RMS Norm

  • 针对LayerNorm改进,主要区别在于去掉了减去均值的部分,采用根均方

  • RMS 操作 (Root Mean Squre):RMS(x)=1ni=1nxi2

    xi^=xiRMS(x)γ+β=xi1ni=1nxi2γ+β

pRMS Norm

  • 核心思想:用部分数据,代替全部的计算,p为前p%的数据
RMS(x)=1ki=1kxi2

Instance Norm(图像, 2017)& Group Norm (2018)

Instance Norm & Group Norm

Instance Norm

  • 范围:针对图像做Norm,对每个样本的H、W维度做,保留N、C维度。
  • 算法:只在Channel内部求均值做标准差

Group Norm

  • 范围:对每个Chanel,再继续划分g个组,每组去做归一化。

QK-Norm

QK-Norm
  • 核心
    • 在MHA中引入额外RMSNorm用在Q、K之前
  • 优点
    • RoPE之前对输入做归一化,减少训练中数值不稳定性

各种Norm对比

位置编码

不同于RNN/CNN模型,Transformer模型必须加入位置编码,纯粹靠attention是无法捕捉顺序信息的,即无法区分不同位置的token。

位置编码总结
  • 绝对位置编码
    • 优点:实现简单,不用训练,高效计算。
    • 缺点:没有外推性
  • 相对位置编码
    • 优点:直接体现相对位置,效果更好。具有一定外推性。
    • 缺点:模型计算复杂,长序列仍然有外推性问题。
  • RoPE(旋转位置编码)
    • 优点:结合了绝对和相对位置的优点
    • 缺点:实现复杂,理论上外推性更好,但可能仍然存在外推问题。没训练过,效果不好。

绝对位置编码

早期笔记:Transformer-位置编码

绝对位置编码

核心思想:直接为输入xk向量增加一个位置向量

xk=xk+pk,pk为位置编码,与位置k有关

1. 可训练式

  • 定义:把位置向量作为可训练的参数,如nd维度。
  • 缺点:没有外推性,难处理超过最大长度n的位置

2. 三角式

  • 定义:pk2i2i+1各位置的值,分别由sin和cos函数来定义

    pk,2i=sin(k100002i/d)pk,2i+1=cos(k100002i/d)
  • 优点:三角函数有一定外推性,不用训练。

  • 缺点:但现在很少看到这种绝对位置编码的工作。

3. 递归式

  • 定义:通过递归计算位置编码,pk+1=f(pk),示例论文
  • 优点:具有较好外推性
  • 缺点:牺牲并行性,计算不足
绝对位置编码Attention 公式

💥计算ij的attention,其中qkvp均为向量。

qi=(xi+pi)WQ=fq(xi,i)kj=(xj+pj)WK=fk(xj,j)vj=(xj+pj)WV=fv(xj,j)αi,j=softmax(qikjT)oi=jαi,jvj

qikjT展开项后续相对位置编码都是基于此修改

qikjT=(xi+pi)WQ((xj+pj)WK)T=(xi+pi)WQWKT(xj+pj)T=(xiWQ+piWQ)(WKTxjT+WKTpjT)=xiWQWKTxjTij+xiWQWKTpjTij+piWQWKTxjTij+piWQWKTpjTij

相对位置编码

相对位置编码 核心思想
  • 在计算attention时,考虑当前位置目标位置相对距离不建模输入位置的全局信息
  • NLP任务更适合相对位置编码👍。
相对位置编码

🧠 ​1、经典相对位置编码核心思想

  • 核心

    • 从绝对位置attention公式出发
    • 去掉pj及复杂内容, 由二元位置向量Ri,j来代替,主要在softmax和v加权里变换。
  • 💥相对位置Ri,j只依赖相对距离ij,再进行截断,缩小至有限范围 ❤️。

    • Clip裁切:把相对距离缩短至有限范围。
    • pk,pv:位置向量
Ri,jK=pk[clip(ij,pmin,pmax)]Ri,jV=pv[clip(ij,pmin,pmax)]
  • 优点
    • 只需要有有限个位置向量,即可表示任意相对位置(因为进行了截断) 👍

2、XLNet式相对位置编码

  • 核心
    • 从公式qikjT展开,pj 改成相对位置向量Rij, 把2个pi替换为可训练向量uv
    • Rij不做截断,用了Sinusoidal式的生成方案。
    • vj加权时不再需要位置偏置,直接是oi=jαi,j xj Wv
    • 后期工作相对位置只在attention权重上计算,不在v上了

3、T5

  • 核心:从qikjT展开出发做简化。认为输入和位置当解耦不做交互,直接删掉很多项,增加相对位置编码可训练参数

    qikjT=xiWQWKTxj+βi,j
  • βi,j不做ij截断,做分桶处理,相对位置ij对应f(ij)。近的位置使用独立精细编码,越远越共用一个位置编码。

4、Deberta式

  • 核心:从qikjT出发,扔掉第4项,保留2、3项并改为相对位置编码。

旋转位置编码

参考文章

很多LLM选择RoPE的原因
  • RoPE 无显式的远程衰减,这在Long Context至关重要。
  • RoPE 通过不同频率的三角函数有效区分了长程和短程,达到了类似层次位置编码的效果。
    • 是一种真正的位置编码,这也是Long Context中比较关键的一环。
  • RoPE直接作用于Q、K,不改变Attention的形式,与Flash Attention更契合,更容易Scale Up
RoPE

🌟核心思想

  • RoPE位置编码通过将一个向量旋转某个角度,为其赋予位置信息
  • RoPE通过绝对位置方式实现相对位置编码😍, 综合了绝对和相对的优点。
  • qk向量注入绝对位置信息i,j (注:很多文章使用的是m和n,这里为了保持和上文一致所以使用i,j)
qi=fq(qi,i),kj=fk(kj,j)
  • qikj 向量内积时,带上相对位置信息ij
qk=f(q,i)f(k,j)=g(q,k,ij)

推导过程

  • 通过复数方程找到使等式成立的g函数,最终求解得到

    • 💥f(q,m)公式,绝对位置编码 (假设是q是二维向量, θ是常数)
    f(q,i)=f(q,m)=Rmq=(cosmθsinmθsinmθcosmθ)旋转矩阵(q0q1)q
    • 💥 g(q,k,mn) 公式,相对位置融入
    qk=g(q,k,mn)=qmknT==qTRmnk
    • 多维向量旋转:多维向量,两两一组,分别旋转,得到旋转公式。
    • 远程衰减θi=100002i/d
      • 相反,如果θ是1,随着ij距离增加,qikj内积会震荡不会远程衰减,这就是问题。

旋转矩阵

  • 二维空间存在旋转矩阵M(θ),二维向量左乘M(θ),相当于逆时针旋转θ弧度RoPE旋转编码名称的来源。
M(θ)=(cosθsinθsinθcosθ)
  • 只要对向量进行旋转,就能添加对应的位置信息,且具有周期性。

ALiBi (Attention with Linear Bias)

Attention with Linear Bias

核心

  • 目的:解决训练推理长度不一致的问题,如 训练 1024,推理 2048
  • 思想:QKT计算时加一个阈值好的偏置,偏置包括了Q和K的相对位置,相距越远贡献越低。不直接输入位置编码。
  • 外推性会更好点。

Yarn

todo update

长度外推篇

问题:模型输入长度,训练短,预测长,导致泛化性效果不好。

FFN 层

早期笔记 Transformer-FFN

FFN

两个全连接层+激活函数:

  • 接在attention输出后面,带有激活函数,做复杂非线性变换,对最终性能非常重要。

  • 增加FFN的维度有利于提升效果,一般比attention层维度大。

    • 如Transformer里 attention输出是512,FFN是2048。
  • 注:后期多用GeLU。ReLU 更适用于CNN,而 GeLU FFN。

FFN(x)=Linear(ReLU(Linear(x)))=ReLU(xW1+b1)W2+b2

激活函数

GeLU

GeLU
  • ReLU缺点当输入为负数值为0,可能导致神经元死亡,降低模型表达能力。
  • GeLU很像ReLU,是一个连续的S曲线更平滑
    • 优点:一定程度上缓解死亡问题。
    • 缺点:计算比ReLU慢
GeLU(x)=0.5x(1+tanh(2π(x+0.044715x3)))

Swish

Swish
  • 特点:接近0时,像线性函数;远离0时,具有非线性特性。
  • 优点:相比ReLU/Tanh等具有更好性能和收敛速度。
  • 缺点:计算使用sigmoid,开销大。
  • 公式如下,β是可调节参数。
Swish(x)=xsigmoid(βx)

解码策略

整体移动至文档 LLM解码相关

杂项

Encoder和Decoder 可做权重共享

  • 每一层由Self-Attention和FFN组成,在Encoder或Decoder内部,做层共享。
  • 但是现在大模型时代,每一层都有独立的参数,增强表达能力
  • Masked Self-Attention:Decoder解码过程,当前位置不能看到未来的内容。

Bert

  • Bert的非线性来源:来自于self-attention和FFN中的gelu函数
  • WarmUp策略:在训练初期,把学习率小初始值逐步增加到预设最大值,提高稳定性和加快收敛。
    • 初期使用较小学习率,避免早期训练不稳定和过拟合。
总访客数:   ·   总访问量:
PLM's Blog @ 2016 - 2025