从零学习大模型(5)——位置编码: 让 AI 读懂 “语序” 的关键技术

  • 2025-08-02 00:52:26
  • 928

在Transformer架构中,有一个容易被忽略却至关重要的模块——位置编码(PositionalEncoding,PE)。如果说注意力机制让模型能“理解关联”,前馈神经网络让模型能“提纯特征”,那么位置编码的作用就是让模型能“感知顺序”。

人类语言中,语序直接决定语义:“我打了你”和“你打了我”仅因语序不同,含义完全相反。而Transformer的注意力机制是“并行计算”(同时处理所有词),天然缺乏对语序的感知——若没有位置编码,模型会把“我打了你”和“你打了我”视为相同的输入。位置编码的核心功能,就是给每个词“打上位置标签”,让模型知道“谁在前,谁在后”。

理想的位置编码需要满足三个条件。位置唯一性,即不同位置的编码向量必须不同;距离相关性,位置越近的词,编码向量越相似(如位置2和3的相似度高于2和10);长度适应性,能适配任意长度的句子(训练时用100词,推理时能处理200词)。接下来介绍的所有位置编码方案,都是围绕这三个条件设计的。

绝对位置编码:给每个位置一个“唯一身份证”

绝对位置编码的核心思路是:为每个位置分配一个固定的编码向量(如位置0对应向量A,位置1对应向量B),无论句子内容如何,位置n的编码始终不变。这种“一一对应”的设计能保证“位置唯一性”,是早期Transformer的主流选择。

1.正余弦位置编码(SinusoidalPE):原始Transformer的选择

Transformer原始论文提出的正余弦编码,是最经典的绝对位置编码方案。它通过正弦和余弦函数生成位置向量,公式如下:

其中,pos是词的位置(0,1,2,…),i是向量维度(0到d_model-1),d_model是嵌入维度(如512)。

正余弦编码的设计有其巧妙之处。在位置唯一性上,不同pos的正弦/余弦值不同(如pos=0时sin(0)=0,pos=1时sin(1/10000^…)≠0);距离相关性方面,位置越近的词,编码向量越相似(如位置2和3的相似度高于2和10);长度适应性上,正弦/余弦是周期函数,可无限生成任意pos的编码(即使句子长度超过训练时的最大长度)。例如对于512维的嵌入向量,位置0的编码向量前几个维度为[sin(0),cos(0),sin(0),cos(0),…]=[0,1,0,1,…],位置1的编码向量前几个维度为[sin(1/10000^0),cos(1/10000^0),sin(1/10000^(2/512)),cos(1/10000^(2/512)),…],这些向量的差异清晰反映了位置差异。

不过,绝对位置编码存在共性问题,即外推能力弱——当句子长度超过训练时的最大长度(如训练用512词,推理用1024词),新增位置(512-1023)的编码向量在训练中从未出现过,模型无法准确理解其位置关系。

2.可学习位置编码(LearnedPE):BERT等模型的选择

可学习位置编码的思路更直接:随机初始化一组位置向量(如位置0到511各对应一个向量),通过训练让模型自动学习最优的位置表示。

例如训练时最大句子长度为512,则初始化一个512×d_model的矩阵(每行对应一个位置的编码),这个矩阵会像嵌入层一样参与模型的参数更新——模型在学习“猫追狗”的语义时,也会同步学习“猫在位置0,狗在位置2”的位置关联。

可学习位置编码的优势在于灵活性更高,无需人工设计函数,模型可根据任务自动调整位置编码(如在诗歌生成任务中,对押韵位置更敏感),而且在训练长度范围内,可学习编码通常比正余弦编码的效果略优。但它的外推能力极差,训练时未见过的位置(如512以上)没有对应的编码向量,无法直接处理长于训练长度的句子,同时泛化性弱,针对特定长度训练的编码,迁移到其他长度时性能下降明显。因此,可学习位置编码更适合“固定长度任务”(如句子分类,输入长度固定为512),但不适合需要处理变长文本的场景(如文档生成)。

相对位置编码:关注“相对距离”而非“绝对位置”

绝对位置编码的“外推困境”源于对“绝对位置”的依赖——位置512的编码对模型而言是全新的。相对位置编码则另辟蹊径:不编码绝对位置,只编码“词与词之间的相对距离”(如A在B前面3个位置)。

这种设计的优势在于:相对距离是“有限且可复用”的(如相对距离-2、-1、0、1、2覆盖了大部分关联),即使句子长度超过训练范围,相对距离的编码仍能复用训练时学到的规律。

1.自注意力中的相对位置建模:Transformer-XL的改进

Transformer-XL首次将相对位置信息引入注意力计算。在传统注意力中,分数计算为Attention(Q,K)=Softmax((QK^T)/√d_k),而Transformer-XL修改为Attention(Q,K,R)=Softmax((Q(K^T+R^T))/√d_k),其中R是“相对位置编码矩阵”(存储相对距离为-1、-2、…、+2的编码)。这意味着注意力分数不仅取决于词的内容(Q和K),还取决于它们的相对距离(R)。

例如计算“狗”对“猫”的注意力时,若“猫”在“狗”前面2个位置,就会加入“相对距离+2”的编码——这种关联在短句子和长句子中是一致的,因此模型能自然外推到更长文本。

2.ROPE(RotaryPositionEmbedding):LLaMA、GPT-4等大模型的主流选择

ROPE(旋转位置编码)是目前最成功的相对位置编码方案之一,它通过“向量旋转”实现相对位置建模,兼顾了计算效率和外推能力。

ROPE的关键insight是:两个词的相对位置可以通过“其中一个词的向量旋转一定角度”来表示。具体来说,对位置为m的词向量q_m,用旋转矩阵R_m进行旋转;对位置为n的词向量k_n,用旋转矩阵R_n进行旋转;旋转后的内积q_m^TR_m^TR_nk_n=q_m^TR_{n-m}k_n(仅与相对距离n-m有关)。

这意味着:注意力分数只取决于词的内容和相对距离,与绝对位置无关。例如“猫”在位置2,“狗”在位置5(相对距离+3),和“猫”在位置102,“狗”在位置105(相对距离+3)的注意力分数计算方式完全相同。

ROPE的优势在于完美外推,相对距离的编码是固定的(如相对距离3的旋转角度固定),无论句子多长,模型都能复用训练时学到的相对位置规律;计算高效,旋转操作可在复数域高效实现(无需额外存储大矩阵),几乎不增加计算开销;而且兼容性强,可无缝集成到现有Transformer架构,无需修改注意力机制的核心逻辑。正是这些优势,让ROPE成为大模型处理长文本的“标配”——LLaMA2支持4096长度,GPT-4支持128000长度,都离不开ROPE的贡献。

3.ALiBi(AttentionwithLinearBiases):简化的相对位置建模

ALiBi是一种更轻量的相对位置编码方案,它不修改词向量,而是直接给注意力分数添加一个“基于相对距离的偏置”。

具体来说,当两个词的相对距离为k时,ALiBi在注意力分数上减去一个与k成正比的偏置(如距离k的偏置为-m×|k|,m是可学习参数)。这种设计的逻辑是:相对距离越远,注意力分数的惩罚越大(符合人类阅读时“近邻词关联更强”的规律)。

ALiBi的优势在于极致简洁,无需修改嵌入向量或注意力计算,只需添加一个偏置项,实现成本极低,同时外推性好,相对距离的偏置规则(如距离越远惩罚越大)可直接应用于长句子,而且适合小模型,计算开销比ROPE更小,在资源受限的场景(如移动端)表现优异。不过它的精度略低,偏置的线性假设(距离与惩罚成正比)不如ROPE的旋转编码精准,在超长文本(如10万词)中性能略逊于ROPE。

长度外推策略:让模型处理“超长文本”的技巧

即使采用相对位置编码,模型处理远超训练长度的文本(如训练用4096词,推理用16384词)时,仍可能出现性能下降。这是因为长文本会带来新的挑战:注意力计算的噪声累积、长距离依赖的稀释。研究者们为此设计了多种“长度外推策略”。

1.位置插值(PositionInterpolation):缩放现有位置编码

位置插值是最常用的外推方法,核心思路是:将超长文本的位置“压缩”到训练时的位置范围内。例如训练长度为4096,推理时要处理16384,则将位置4096映射为1024,位置8192映射为2048(相当于按1/4比例缩放)。

这种方法对ROPE特别有效:旋转角度与位置成正比,缩放位置等价于缩放旋转角度——模型可通过插值学习长距离的相对位置规律。LLaMA2通过位置插值,能将上下文长度从4096扩展到16384,性能仅下降5%左右。

2.YARN(YetAnotherRotation-basedPositionEmbedding):动态调整旋转周期

YARN针对ROPE在超长距离(如10万词)的性能下降问题,提出“动态旋转周期”:短距离(如0-1000词)使用小周期旋转(角度变化快),保证精细的位置区分;长距离(如1000-10万词)使用大周期旋转(角度变化慢),避免旋转过度导致的信息丢失。

这种“远近有别”的设计,让ROPE在兼顾短距离精度的同时,能更好地处理长距离关联。实验显示,YARN可将LLaMA的有效上下文长度扩展到10万词以上,且长距离推理性能提升30%。

3.滑动窗口注意力:牺牲全局关联换取效率

当文本长度超过模型设计上限(如100万词)时,即使有外推策略,全局注意力的计算量也会爆炸(O(n²)复杂度)。滑动窗口注意力通过“限制注意力范围”降低计算量:每个词只关注前后k个词(如窗口大小为2048);对超长篇文档,按窗口滑动处理(如先处理1-2048词,再处理1025-3072词)。

滑动窗口注意力的优势是计算量从O(n²)降至O(n×k),可处理百万级长度文本,但它无法捕捉窗口外的长距离关联(如文档开头和结尾的呼应),适合对全局关联要求低的任务(如文本摘要)。

各大模型的长上下文处理方案:从设计到实践

不同模型根据任务需求和计算资源,选择了不同的位置编码和外推策略,形成了各具特色的长上下文能力。GPT-4采用ROPE作为基础位置编码,结合动态窗口和YARN改进的长度外推策略,支持128000的最大长度,兼顾超长长度和全局关联。LLaMA2同样以ROPE为基础,使用位置插值的外推策略,基础版支持4096长度,扩展版能支持100000以上,开源友好且外推成本低。BERT采用可学习编码,通过截断和Padding处理长度,支持512的最大长度,适合固定长度理解任务。Transformer-XL运用相对位置编码,借助片段缓存(Memory)的外推方式,支持8192长度,擅长长文档连贯生成。Mixtral基于ROPE,结合滑动窗口和分组注意力,支持32768长度,效率极高,适合实时对话。

这些方案的共同趋势是:以ROPE为基础,结合动态外推策略,在效率与长距离关联间找平衡——对需要全局理解的任务(如法律文档分析),牺牲部分效率保留全局注意力;对实时性要求高的任务(如聊天机器人),用滑动窗口换取速度。

未来方向:从“能处理长文本”到“能理解长逻辑”

当前位置编码的研究已从“如何处理更长文本”转向“如何更好地理解长距离逻辑”。例如逻辑感知位置编码,在编码中融入文本的结构信息(如段落边界、标点符号),让模型区分“句子内关联”和“段落间关联”;动态注意力窗口,根据文本内容自动调整窗口大小(如在逻辑密集段用小窗口聚焦,在叙述段用大窗口捕捉全局);多尺度位置编码,同时编码词级、句级、段落级的位置信息,适配不同粒度的关联学习。

这些方向的探索,将让大模型不仅能“读完”一本百万字的书,更能“读懂”书中的逻辑脉络——这才是长上下文处理的终极目标。

结语:位置编码的“简单与深刻”

位置编码的设计看似只是“给词加位置标签”,却蕴含着深度学习的核心智慧:好的结构设计比单纯增加参数更重要。从正余弦编码的人工设计,到ROPE的数学优雅,再到ALiBi的极简思路,每一次进步都不是因为更复杂的计算,而是对“位置信息本质”的更深刻理解——模型需要的不是“绝对位置的数值”,而是“相对关系的规律”。

当我们看到AI能生成万字小说、分析整本书的主题时,不要忽略背后位置编码的贡献——正是这些“看不见的向量”,让模型能像人类一样“按顺序理解语言”,最终跨越“词”的局限,触及“语义”的本质。

未来,随着长上下文需求的不断提升,位置编码仍将是大模型创新的关键支点——毕竟,理解语言的第一步,是先知道“谁在前,谁在后”。