大模型基础 | 第二章 词典的位置编码
本文探讨了Transformer模型中位置编码的关键作用与方法。首先指出Transformer自注意力机制无法区分词序,导致语义理解困难。主流解决方案包括:1)绝对位置编码(BERT采用的可训练参数法);2)相对位置编码(RoPE通过旋转矩阵融入位置信息,ALiBi利用线性偏置建模距离)。特别分析了RoPE的优势与周期性缺陷,并介绍YaRN的分段调整方法改进外推能力。最终比较显示,相对位置编码(如
词典的位置编码
首先提出一个问题:基于Transformer的预训练大语言模型,如何区分文本位置?
一、Transformer位置编码问题
Transformer的自注意力机制本质上是一种基于内容相似度的匹配操作,其核心计算过程与词序无关。给定输入序列中任意两个词元 token
,其注意力分数仅依赖于它们的语义相关性,而与它们在序列中的绝对或相对位置无关。具体表现为:
1. 查询-键相关性计算:
通过投影矩阵将输入向量转换为查询(Query)和键(Key),计算二者的点积相似度:
Score(qi,kj)=qi⊤kj \text{Score}(q_i, k_j) = q_i^\top k_j Score(qi,kj)=qi⊤kj
其中Wq,WkW_q, W_kWq,Wk为可学习参数,dkd_kdk为键向量的维度。若交换qiq_iqi和qjq_jqj的位置,计算结果不变,即:
Score(qi,kj)=Score(qj,ki) \text{Score}(q_i, k_j) = \text{Score}(q_j, k_i) Score(qi,kj)=Score(qj,ki)
2. 注意力权重生成:
对分数矩阵进行 Softmax 归一化,得到注意力权重分布:
αij=exp(Score(qi,kj))∑kexp(Score(qi,kk)) \alpha_{ij} = \frac{\exp(\text{Score}(q_i, k_j))}{\sum_k \exp(\text{Score}(q_i, k_k))} αij=∑kexp(Score(qi,kk))exp(Score(qi,kj))
此时权重仅反映词元间的语义关联强度,缺乏位置信息编码。
1) Transformer位置编码的重要性
在自然语言处理中,词序通常对语义理解起关键作用。以关系分类任务为例,模型需要根据文本中两个实体的顺序和上下文关系,准确判断它们之间的语义关联。若词序信息丢失或错乱,可能导致模型误判关系类型。
示例说明
- 句子1:“公司收购了竞争对手”
- 句子2:“竞争对手收购了公司”
虽然两句话包含相同的词汇,但词序反转导致实体关系完全相反:
- 句子1中,“公司”是收购方(主体),“竞争对手”是被收购方(客体),关系为“收购”;
- 句子2中,主客体对调,关系变为“被收购”。
⚠️ 若模型忽略词序,将无法区分这两种截然不同的语义。
2) Transformer如何做位置编码?
向Transformer模型中加入位置编码是必不可少的操作。位置编码可以分为绝对位置编码和相对位置编码两大类。
📌 外推能力对比:
绝对位置编码外推能力较差。推理时如果输入文本长度超过训练阶段的最大长度,模型表现会显著下降。
因此,主流大语言模型普遍采用相对位置编码,以增强长序列外推能力。
目前主要有两种典型的位置编码方法:
1. 可训练绝对位置编码(如 BERT)
- 将位置信息表示为可训练的参数矩阵P∈RL×dP \in \mathbb{R}^{L \times d}P∈RL×d,其中:
-LLL:预设的最大序列长度(如512)
-ddd:隐藏层维度 - 对于第iii个位置的 token,其位置编码为PiP_iPi,并与词嵌入相加作为输入:
Inputi=Ei+Pi \text{Input}_i = E_i + P_i Inputi=Ei+Pi - 优点:简单直接,易于训练。
- 缺点:无法外推 —— 当测试序列长度 >LLL时,无法生成有效的位置编码。
2. 正弦位置编码(如原始 Transformer)
- 使用预定义的三角函数生成位置编码:
PE(pos,2j)=sin(pos100002j/d),PE(pos,2j+1)=cos(pos100002j/d) PE_{(pos, 2j)} = \sin\left(\frac{pos}{10000^{2j/d}}\right), \quad PE_{(pos, 2j+1)} = \cos\left(\frac{pos}{10000^{2j/d}}\right) PE(pos,2j)=sin(100002j/dpos),PE(pos,2j+1)=cos(100002j/dpos) - 优点:
- 具有相对位置敏感性
- 理论上支持任意长度外推(可计算任意
pos
的编码)
- 缺点:不如 RoPE 灵活,表达能力有限
3) RoPE:旋转位置编码(Rotary Position Embedding)
旋转位置编码(Rotary Position Embedding, RoPE)是一种创新的相对位置编码方法,其核心思想是:
✅ 通过旋转矩阵将绝对位置信息融入注意力机制,同时保留词向量的相对位置关系。
核心思想
- 对查询向量qqq和键向量kkk施加与位置相关的旋转变换。
- 利用正弦/余弦函数的“和差化积”性质,将绝对位置m,nm, nm,n 的旋转转化为相对位置m−nm - nm−n 的相位差。
旋转操作定义
定义二维旋转矩阵:
Rm=[cosθm−sinθmsinθmcosθm],θm=m⋅α/d2j/d R_m = \begin{bmatrix} \cos\theta_m & -\sin\theta_m \\ \sin\theta_m & \cos\theta_m \end{bmatrix}, \quad \theta_m = m \cdot \alpha / d^{2j/d} Rm=[cosθmsinθm−sinθmcosθm],θm=m⋅α/d2j/d
其中:
-mmm:当前位置(如第mmm个词)
-ddd:位置编码总维度
-α\alphaα:调节因子(控制频率衰减速度)
-θm\theta_mθm:随位置变化的旋转角度
旋转特性
当向量乘以RmR_mRm时,其幅值不变,仅在二维平面上旋转角度θm\theta_mθm。
原因在于:
-RmR_mRm是标准的正交矩阵:Rm⊤Rm=IR_m^\top R_m = IRm⊤Rm=I
- 行列式为 1:det(Rm)=cos2θ+sin2θ=1\det(R_m) = \cos^2\theta + \sin^2\theta = 1det(Rm)=cos2θ+sin2θ=1→ 无缩放,纯旋转
注意力分数引入相对位置
令旋转后的查询和键为:
qm′=Rmqm,kn′=Rnkn q'_m = R_m q_m, \quad k'_n = R_n k_n qm′=Rmqm,kn′=Rnkn
则注意力内积为:
⟨qm′,kn′⟩=⟨Rmqm,Rnkn⟩ \langle q'_m, k'_n \rangle = \langle R_m q_m, R_n k_n \rangle ⟨qm′,kn′⟩=⟨Rmqm,Rnkn⟩
利用三角恒等式,最终可推导出该内积依赖于相对位置m−nm - nm−n,从而实现相对位置编码。
💡 类比:想象一个时钟指针
- 原始向量是时针的初始方向
- RoPE 根据位置mmm把时针旋转一个角度(长度不变)
- 两个“旋转后”的指针夹角(内积)反映它们的相对位置差
五、YaRN:弥补RoPE的缺陷
尽管 RoPE 具有良好的外推能力,但仍受限于周期性函数的震荡特性。
问题描述
由于旋转角度使用正弦/余弦函数计算,具有周期性:
- 每词旋转 30°,则位置 12(360°)与位置 0 的向量方向完全一致
- 模型无法区分位置 0 和位置 12 → 位置混淆
YaRN 的解决方案:VTK-by-parts 分段函数调整
YaRN 提出结合“by-parts”机制,动态调整周期性参数,提升外推性能。
核心概念
- 周期TiT_iTi:参数θi\theta_iθi完成一个完整循环所需的时间或步数
- 圈数ri=LtrainTir_i = \frac{L_{\text{train}}}{T_i}ri=TiLtrain:训练阶段完成的周期数
- 阈值τ\tauτ:判断是否“充分训练”的临界值
分三阶段处理(by-parts)
情况 | 条件 | 处理方式 |
---|---|---|
充分训练 | ri≥τr_i \geq \tauri≥τ | 保留原周期,无需调整 |
未充分训练 | ri<1r_i < 1ri<1 | 将周期缩放为Ti′=Ltest/riT_i' = L_{\text{test}} / r_iTi′=Ltest/ri,确保测试阶段至少完成一个完整周期 |
中间过渡 | 1≤ri<τ1 \leq r_i < \tau1≤ri<τ | 线性插值平滑过渡 |
✅ 优势:动态适应训练充分度,提升训练与测试阶段的一致性,尤其适用于长序列外推。
六、ALiBi:另一种相对位置编码视角
ALiBi(Attention with Linear Biases)提供了一种全新的位置编码思路:不显式编码位置,而是直接在注意力分数中加入基于相对距离的线性偏置。
三大核心组件
-
注意力分数矩阵(左图)
传统 QK 点积结果,反映语义相关性。 -
偏置矩阵(右图)
设计为线性衰减形式:
Bij=−m⋅∣i−j∣ B_{ij} = -m \cdot |i - j| Bij=−m⋅∣i−j∣
例如:q3q_3q3 与k1k_1k1距离为 2,则偏置为−2m-2m−2m📉 设计哲学:距离越远,负偏置越大,抑制长程依赖,鼓励局部关注
-
斜率项mmm
- 与“注意力头数”相关
- 多头时,mmm序列呈几何级数下降(如mh=2−8h/Hm_h = 2^{-8h/H}mh=2−8h/H)
- 实现多尺度位置感知
最终注意力计算
Attention(Q,K,V)=Softmax(QK⊤+B)V \text{Attention}(Q,K,V) = \text{Softmax}\left(QK^\top + B\right)V Attention(Q,K,V)=Softmax(QK⊤+B)V
其中Bij=−m⋅∣i−j∣B_{ij} = -m \cdot |i-j|Bij=−m⋅∣i−j∣
优势
- ✅ 天然支持任意长度序列
- ✅ 不依赖绝对位置,无外推限制
- ✅ 计算高效,无需额外位置嵌入
🆚 对比 RoPE:
RoPE 外推能力较强(约可外推200 token),但仍受周期性限制;
ALiBi 更简单、更稳定,适合超长文本建模。
🔚 总结:
现代大语言模型普遍采用相对位置编码(如 RoPE、ALiBi)来克服绝对位置编码的外推瓶颈。其中:
- RoPE 通过旋转向量建模相对位置,表达能力强;
- YaRN 改进 RoPE 的周期性缺陷,提升外推精度;
- ALiBi 以线性偏置方式建模距离,简洁高效,适合超长序列。
这些技术共同推动了大模型在长文本理解、代码生成等任务中的突破。
更多推荐
所有评论(0)