Skip to content

语言模型重要组件

📅 发表于 2025/07/04
🔄 更新于 2025/07/04
👁️ 次访问
📝 0 字
0 分钟
llm
#Attention
#MHA
#MQA
#GQA
#Flash Attention
#Batch Norm
#Layer Norm
#RMS Norm
#RoPE
#GeLU
#TopK
#TopP
#Temperature

Attention 机制

可见早期文章:Transformer

标准 Attention

Attention 概念

Attention机制
  • Input:一般是一个句子,乘以矩阵,得到Q、K、V 3个向量。
  • Query:表示当前查询query
  • Key、Value:Key是各个位置的键,Value各个位置的信息
  • softmax(QK): 计算注意力权重,即当前query对各个位置的注意力α1,,αl
  • 加权求和:利用注意力权重对各位置Value加权求和,就得到输出
Attention(Q,K,V)=softmax(QKTdk)V
  • 除以dk进行缩放,防止梯度爆炸,

Self-Attention

  • Self-attention:self顾名思义,计算自身序列中各位置与其他各位置的注意力V来自自身
  • Target-Attention:计算自己和其他内容的注意力,V来自其他内容
  • Self-Attention 可以通过两个位置一步attention计算远距离学习知识依赖和语序结构
  • RNN/LSTM:距离越远,信息损耗越大,有效提取捕获远可能性越小。
Attention vs 全连接层
  • 👁️Attention:有锚点👍
    • 有Query和Key,有Value。Query作为一个锚点计算attention score后做加权
    • 比喻:左手拿白色小球,右手从袋子抓球,抓出来和左手做对比
  • 全连接层:🈚️锚点
    • 无Query和Key,只有一个Value。最后给每个v一个权重做加权。
    • 比喻:在袋子里凭记忆和感觉随便抓一个球出来。

Attention 变体

  • 最早期的Attention、Hard Attention等。
  • Muliti-Head Attention:使用多组QKV生成多个Z,拼接乘大矩阵,得融合Z,再给FFN。
    • 学习不同表征,识别不一样的模式,增强模型表达能力
  • Relative Position Encoding:使用相对位置编码引入位置信息

几个重点思考(降维/dk等)

重要思考

1、Self-Attention Padding 做 Mask

  • QK ,需要对padding部分置为负无穷,再过Softmax才会为0。

2、Transformer Multi-Head Attention 要对head 进行降维

  • 输入向量维度为d,需要降维到 d(远小于d),主要是为了降低计算复杂度
  • 时间复杂度:o(d2)o(hd2)o(d2)o(hd2)

3、维度和点击的关系

  • q,k向量 维度d越大,点积值qk越大,点积属于均值0、方差d的正态分布。

    E(qk)=0,D(qk)=d
  • 方差的性质

    D(cx)=c2D(x),D(c+x)=D(x)c

3、深入理解dk缓解梯度爆炸问题

  • Attention计算过程:内积QK后 -> softmax。softmax主要入参是eqk

  • 如果不进行缩放,softmax参数在[e3d,e3d]之间, 参数会很大或很小,导致attention接近one-hot分布

    • 饱和区梯度消失x值继续变大,y几乎不变
  • 因此,QK后才除以dk使得softmax入参在[e3,e3]之间,不大也不小

  • 数学思路

    • qk 除以d,抵消掉,由0-d正态分布,又回到0-1正态分布
    E(qk)=0,D(qk)=dD(qkd)=qk(d)2=1
    • 方差为1,有效控制点积结果发散,应对了梯度消失问题。

MHA & MQA & GQA

MHA & MQA & GQA

MHA (Multi-Head Attention, 2017年, 谷歌) 多头注意力

  • 多组QKV学习不同表征模式,增强模型能力
  • 类似于CNN,多个卷积核**(多头)关注不同部分**,最终再融合起来得到更好效果
  • 实际计算:对词向量维度512进行8头切割,每头输入维度为64,最后采用concat进行融合。

MQA (Mulit-Query Attention, 2019年, 谷歌)

  • 所有head共享同一个Key和Value 矩阵,每个头仅保留Query参数,大大减少KeyValue参数量。
  • 提升推理速度,但带来精度损失

GQA (Grouped Query Attention, 2023年,谷歌)

  • query分为n组,每组共享Key和Value矩阵。其实就是在MQA基础上做了折中。
  • 精度比MQA好,速度比MHA快。

Flash Attention

Flash Attention

1、GPU 限制

  • GPU - SRAM:很小很快,20MB、19TB/s (吞吐量)
  • GPU - HBM:GPU显存大小,大但慢,80GB、1.5TB/s
  • CPU - DRAM:CPU内存,很大但很慢, 1TB、12GB/s

2、Softmax Tiling

Softmax Tiling

参考文章:FlashAttention中的softmax快分块计算详解

  • 数值稳定避免数值exi过大溢出,每个元素都减去最大值得eximax(x)
    • 改进后eximax(x)落在[0,1]区间。softmax结果和原softmax一致
  • 分块计算softmax
    • 把X分为多个块,各块单独计算最大值softmax分子softmax分母
    • 根据各块信息,计算全局分母;再更新各自分子,得全局分子

3、Flash Attention 算法

Flash Attention 算法
  • 主要目标:避免从GPU-HBM中读取和写入注意力矩阵。
  • 计算softmax不需要全局信息
    • 把输入分块,以分块增量方式计算softmax,即 softmax tiling算法。
  • 反向传播不存储中间attention矩阵(N2)只存储softmax归一化系数
    • 标准Attention:需要把过程中的S、P写入HBM中,矩阵大小和输入序列长度有关,非常大
    • FlashAttention不使用中间注意力矩阵通过存储归一化因子来减少HBM内存的消耗
  • 算法流程,具体见论文。
    • 简单讲:每次只计算一个block的只,通过多轮双for循环完成注意力计算。

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
  • Post-LN
    • 定义:LN在残差之后做归一化,最初Bert的LN。
    • 优点:对参数正则化更强、模型收敛性更好
  • Pre-LN
    • LN在MHA之前做归一化
    • 优点:一部分参数直接加在后面,没有正则化,可在反向时防止梯度消失或爆炸
    • 大模型训练难度大,使用Pre-LN居多

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个组,每组去做归一化。

各种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时,考虑当前位置和目标位置的相对距离
  • NLP任务更适合相对位置编码👍。
绝对位置编码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
相对位置编码

🧠 ​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的相对位置,相距越远贡献越低。不直接输入位置编码。
  • 外推性会更好点。

长度外推篇

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

FFN 层

早期笔记 Transformer-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

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

Swish

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

解码策略

采样方法

采样方法
  • 贪心解码:每次选择概率最高的单词。会导致文本单调和重复。
  • 随机采样:多样性好,但质量差。
  • Beam Search
    • 维护k个大小的序列,每一步选择概率最高的k个单词;从所有选择中,保留概率最高的k个序列。
    • 平衡了质量和多样性。贪心解码是k=1的BeamSearch。

大模型常用的top-k和top-p介于贪心解码和随机采样之间

Top-k

Top-K 策略
  • 策略:每一步从概率最高的k个候选词中随机选一个。
  • 优点:k越大多样性越好,但质量越低。
  • 缺点:
    • top-k只考虑了单词概率,没有考虑语义和语法关系
    • 可能导致生成文本不符合常识和逻辑,比如我喜欢吃,解码为苹果。但可能我并不喜欢吃,而且上下文提到了。
    • k难以确定
  • 通常和top-p一起使用。

Top-p(核采样/Nucleus采样)

Top-P 策略
  • 策略:每一步从累计求和概率高于p的单词中进行随机采样,即只关心核心部分,忽略尾部部分。
    • 如设置p=0.9,只考虑前90%的词

Temperature

温度
  • 策略:和语言模型温度参数T类似,是一个概率缩放参数。温度越高,越趋近于均匀采样,温度越低,越倾向于概率越高的。
  • 计算:使用logits来通过温度进行缩放,然后计算softmax概率。

联合采样

优先级:top-k -> top-p -> Temperature

Transformer 模型

一些经验

Encoder和Decoder 可做权重共享

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

一些Bert时代的经验

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