Transformer 的自注意力机制能够直接建模序列中任意两个 token 之间的依赖关系,但其基本计算形式并不显式包含序列的顺序信息。自注意力主要依据 query 与 key 之间的相似度分配注意力权重,并根据这些注意力权重对 value 进行加权聚合。因此,在缺少位置表示信息的情况下,模型虽然可以建模 token 之间的内容相关性,却难以区分这些 token 在序列中的先后排列关系。
例如,对于“狗咬人”和“人咬狗”这两个句子,它们包含的词完全相同,都是“狗”“咬”“人”,但由于词语顺序不同,句子的语义发生了根本变化。前者表示“狗”是动作发出者,“人”是动作承受者;后者则正好相反。如果模型只关注 token 之间的内容相关性,而缺少位置信息,就难以准确判断哪个词出现在前、哪个词出现在后,也就难以正确理解句子的语义结构。类似地,在代码中,a = b 与 b = a 包含相同的变量和赋值符号,但二者的赋值方向完全不同;在时间序列中,“先上涨后下跌”和“先下跌后上涨”也表示不同的动态变化过程。这些例子都说明,序列数据中的顺序信息是语义建模不可或缺的一部分。
从数学性质上看,自注意力机制天然缺乏对序列顺序的归纳偏置,其核心运算表现出显著的置换等变性(Permutation Equivariance)。这意味着,在不引入位置编码的条件下,自注意力层无法感知 token 的绝对或相对位置。对于同一组 token 构成的集合,任意置换其排列顺序仅会导致输出结果发生相应的同构重排,而模型内部无法生成关于“时序先后”或“空间结构”的差异化表征。对于自然语言、程序代码及时间序列等高度依赖顺序结构的数据模态而言,这种顺序或结构信息的缺失会显著削弱模型的表达能力。因为在此类任务中,token 的语义表征不仅由其自身的词汇内容决定,还与其在上下文中的序列位置以及与其他 token 之间的相对依存关系密切相关。
基于这一原因,位置编码成为 Transformer 架构中的重要组成部分。其主要作用是向模型引入额外的序列位置信息,使自注意力机制能够在内容相似度之外进一步利用顺序结构进行建模。具体而言,位置编码不仅需要帮助模型识别 token 的绝对位置,还需要建模 token 之间的相对距离与前后关系,例如判断两个词是否相邻、一个词是否出现在另一个词之前,以及二者之间相隔多少个 token。在长序列场景下,位置编码还需要保持位置表示的稳定性和可泛化性,使模型能够处理训练长度之外的上下文。
随着大语言模型上下文窗口的不断扩展,位置编码的研究重点也逐渐从单纯的位置注入,发展到如何提升长度外推能力、如何增强长距离依赖建模的稳定性,以及如何在短程位置分辨率与长程上下文泛化能力之间取得平衡。
位置编码的发展脉络
围绕上述问题,已有研究提出了多种位置编码方法。根据位置信息的注入方式、建模对象以及长度外推能力的不同,现有位置编码方法大致可以分为绝对位置编码、相对位置编码、旋转位置编码、基于注意力偏置的位置编码,以及面向长上下文扩展的位置编码改进方法。
早期 Transformer 主要采用绝对位置编码。绝对位置编码的基本思想是在输入层为每个位置分配一个位置向量,并将其与 token embedding 相加,使模型能够获得 token 的全局位置信息。典型方法包括固定的正弦位置编码和可学习的绝对位置编码。这类方法结构简单、实现方便,能够有效解决自注意力机制缺少顺序信息的问题。然而,绝对位置编码主要表征 token 在序列中的全局索引,不能直接表示两个 token 之间的相对距离。因此,当模型需要建模相对顺序关系、局部依赖结构或长距离依赖时,绝对位置编码存在一定局限。
为弥补这一不足,提出了相对位置编码。相对位置编码不再仅仅关注 token 的绝对位置,而是将 query 位置与 key 位置之间的相对距离引入注意力计算中。其核心思想是:在许多序列建模任务中,两个 token 之间的相对距离往往比它们的绝对位置索引更具语义价值。例如,在自然语言中,邻近词之间通常具有更强的局部依赖,而远距离 token 之间的关系则可能体现句法结构、指代关系或篇章级语义联系。相对位置编码使模型能够显式建模这种距离关系,因此相比绝对位置编码具有更强的结构表达能力。
在相对位置编码的基础上,后续方法进一步探索了如何将位置信息更加有效地注入注意力机制内部。Shaw 等人提出的相对位置表示在 key 和 value 中加入相对位置向量;Transformer-XL 通过重新设计相对位置注意力形式,使模型能够更好地支持跨片段的长程记忆;T5 则进一步将相对位置表示简化为 attention logit 上的标量偏置,从而在降低计算复杂度的同时保留相对距离建模能力。由此可见,位置编码逐渐从输入层的附加表示,发展为注意力计算过程中的结构性组成部分。
旋转位置编码 RoPE 则代表了另一类重要的发展方向。与传统方法通过加法注入位置向量不同,RoPE 通过对 query 和 key 施加与位置相关的旋转变换,使注意力内积天然依赖于 token 之间的相对位置。该方法在形式上使用绝对位置构造旋转矩阵,但经过 query-key 内积后,最终的注意力得分可以表示为相对位置的函数。因此,RoPE 兼具绝对位置注入和相对位置建模的特点。由于其参数量为零、实现简洁,并且适合自回归语言模型中的 KV cache 机制,RoPE 已成为现代大语言模型中广泛采用的位置编码方式之一。
除 RoPE 外,基于注意力偏置的位置建模方法也受到广泛关注。其中,ALiBi 是具有代表性的方法。ALiBi 不引入显式的位置 embedding,也不对 query 和 key 进行变换,而是在注意力得分中加入与距离成线性关系的偏置项,使模型在计算注意力时对远距离 token 施加更大的惩罚。该方法结构极为简洁,并具有较好的长度外推能力,但其线性距离衰减假设也带来了较强的归纳偏置,可能限制模型对远距离精确信息的建模能力。
随着大语言模型上下文长度从几千 token 扩展到数万甚至更长,位置编码的研究重点进一步转向长上下文扩展问题。对于采用 RoPE 的模型而言,当推理长度显著超过训练长度时,旋转角度会进入训练阶段未充分覆盖的区域,可能导致注意力分布失稳、相位混叠或短距离分辨率下降。为解决这一问题,研究者提出了 Position Interpolation、NTK-aware Scaling、YaRN、LongRoPE 等方法。这些方法通常通过调整 RoPE 的位置索引或频率尺度,使模型能够在较少额外训练的条件下扩展到更长上下文。
总体来看,位置编码的发展过程体现出三个明显趋势:
- 第一,位置信息的建模对象从绝对位置逐渐转向相对距离;
- 第二,位置信息的注入位置从输入层逐渐深入到注意力计算内部;
- 第三,研究目标从基本的顺序建模逐渐扩展到长度外推和长上下文稳定性。
下面将分别介绍几类典型位置编码方法的具体形式、数学表达及其优缺点。
各类位置编码方法
绝对位置编码
绝对位置编码是最早广泛用于 Transformer 的位置编码方式。其基本思想是为序列中每一个位置分配一个位置向量,并将该向量与对应 token 的词向量相加。
设第 i 个 token 的词向量为 x_i\in \mathbb{R}^d,其位置编码为 p_i\in \mathbb{R}^d,则输入表示可以写为:
其中, h_i^{(0)}是输入到 Transformer第一层的序列表示, d 是 token embedding 的维度。
绝对位置编码的关键在于位置向量 p_i 的构造方式。根据 p_i 是否由模型训练得到,可以分为函数式位置编码(固定式位置编码)和可学习位置编码。
正弦位置编码
正弦位置编码是原始 Transformer 中采用的位置编码方法。它使用不同频率的正弦和余弦函数为每个位置生成一个确定性向量。对于位置 i 和维度索引 k,其定义为:
其中, d 表示位置编码的维度, 2k 和 2k+1 分别对应偶数维和奇数维。
也可以将其写为频率形式,令:
则有:
最终输入表示为
正弦位置编码的设计使不同维度对应不同频率的周期函数。低频维度变化较慢,能够表示较长范围的位置变化;高频维度变化较快,能够区分相邻或较近的位置。
由于正弦和余弦函数具有平移性质,模型在一定程度上可以通过线性变换从绝对位置表示中推断相对位移信息。例如,对于任意偏移量 \Delta, \sin((i+\Delta)\theta) 和 \cos((i+\Delta)\theta) 都可以由 \sin(i\theta) 与 \cos(i\theta) 线性组合得到。
正弦位置编码的优点主要体现在三个方面:
- 第一,不引入额外可学习参数,计算简单,具有较好的可解释性。
- 第二,由于其定义不依赖于预先设定的最大序列长度,因此在形式上可以为任意位置生成编码。
- 第三,相比完全可学习的位置编码,正弦位置编码具有一定的长度外推潜力。
然而,正弦位置编码也存在明显不足。首先,它采用人工设计的固定函数,缺乏针对具体任务自适应调整的能力。其次,虽然正弦位置编码可以计算训练长度之外的位置表示,但模型在训练阶段通常没有见过这些更长位置上的注意力模式,因此实际外推效果并不一定稳定。最后,将位置编码直接加到 token embedding 上,会使内容信息和位置信息在输入层发生混合,后续层需要自行学习如何分离和利用这两类信息。
外推能力
在序列建模与深度学习中,外推能力指模型在推理阶段处理超出训练长度范围的输入序列时,仍能保持稳定性能的能力。
具体而言,它衡量的是:当输入序列长度显著超过模型预训练阶段的最大上下文窗口时,模型能否继续保持有效建模能力,而不是出现性能断崖式下降或注意力分布失稳。
从数学建模的角度来看,外推能力涉及模型对已知函数关系的泛化。训练过程仅在有限的长度范围内(例如 \left[0,L_{train}\right])提供了样本,外推则要求模型能够基于这些已知样本,合理地推断出超出该范围 (x>L_{train})的函数行为。
对大语言模型而言,外推能力是突破训练长度限制、处理长文档分析、代码生成与理解等现实任务的关键属性。
可学习位置编码
可学习绝对位置编码将每一个位置的位置向量视为模型参数进行训练。设模型支持的最大序列长度为 L_{max},则可以定义一个位置嵌入矩阵:
第 i 个位置的位置编码即为该矩阵的第 i 行(P_i 表示位置嵌入矩阵中的第 i 行):
输入表示为:
与正弦位置编码不同,可学习绝对位置编码不对 p_i 的形式作任何预设,而是由模型在训练过程中根据任务数据自动学习。
可学习绝对位置编码的主要优点是表达能力较强。由于位置向量是可训练参数,模型可以根据具体任务学习不同位置的重要性和模式。例如,在某些分类、匹配或生成任务中,序列开头和结尾位置可能具有特殊意义,可学习位置编码能够更灵活地捕捉这些规律。此外,该方法实现简单,与 token embedding 的使用方式一致,因此在早期 Transformer 变体和 BERT 类模型中被广泛采用。
其缺点也较为明显。首先,可学习位置编码依赖于预设的最大长度 L_{\max},当推理序列长度超过训练时设定的最大位置时,模型缺少对应的位置向量。虽然可以通过插值、扩展位置表或继续训练等方式缓解这一问题,但这些方法通常会引入额外开销,并且不一定能保证稳定的效果。其次,可学习绝对位置编码主要刻画 token 的全局索引,缺乏显式建模 token 间的相对距离的能力,因此在长序列外推和相对结构建模方面存在一定局限。
相对位置编码
绝对位置编码关注的是 token 位于序列中的哪个位置,而相对位置编码关注的是两个 token 之间相隔多远。设 query 位于位置 i,key 位于位置 j,则相对位置可以表示为:
相对位置编码的基本动机:在许多序列建模场景中,相对距离比绝对索引更具有泛化性。例如,一个词与其前一个词之间的关系,往往不依赖于它们分别出现在第 5 个和第 6 个位置,还是第 50 个和第 51 个位置。因此,相对位置编码更符合自然语言中局部依赖和结构迁移的特点。
常见的相对位置编码有 Transformer-XL 相对位置编码、T5相对位置编码。RoPE 和 ALiBi 也都在不同形式上引入了相对位置信息,分别代表旋转位置编码和基于注意力偏置的位置建模方法。
旋转位置编码RoPE
旋转位置编码(Rotary Position Embedding,RoPE)是现代大语言模型中非常重要的位置编码方法。与绝对位置编码通过加法注入位置向量不同,RoPE 通过对 query 和 key 进行位置相关的旋转变换,将位置信息编码到注意力内积中。
设某一注意力头的维度为 d_h,并将向量的每两个维度组成一组。对于第 k 组维度,定义频率:
对于位置 i 上的向量 x_i,RoPE 对其第 2k 和 2k+1 个维度进行如下旋转:
将该旋转矩阵记为 R_i,则有:
在注意力计算中,RoPE通常作用于 query 和 key:
于是注意力打分变为:
由于旋转矩阵满足:
因此:
这一公式表明,RoPE 虽然使用绝对位置 i 和 j 分别构造旋转矩阵,但在 query-key 内积之后,最终结果依赖于相对位置 j-i。因此,RoPE 同时具备绝对位置注入和相对位置建模的性质。
RoPE 的优点较为突出:
- 不引入额外可学习参数,旋转矩阵完全由预定义的三角函数构造,不引入可学习参数,计算简洁。
- 相对位置信息自然融入注意力内积,不需要额外添加显式 bias 或相对位置向量。
- 兼容 KV Cache,在自回归生成时,key 向量经过对应位置的旋转后即可直接缓存,后续解码步骤无需重新计算,与 KV Cache 机制无缝衔接。
- 相比于简单的标量位置偏置(如 ALiBi),RoPE 直接在高维空间中旋转 query 和 key 向量,改变了它们之间的几何关系,表达能力更强。
不过,RoPE 也存在一定局限性。其主要问题体现在长上下文外推上。当推理长度远超训练长度时,位置索引 i 增大,旋转角度 i\theta_k 可能进入训练阶段未充分覆盖的范围。这可能导致注意力分布异常、相位混叠或长距离建模能力下降。
因此,实际部署的大模型中,RoPE 通常会配合以下上下问扩展技术:
- Position Interpolation:将超出训练长度的位置索引按比例缩放到已训练范围内。
- NTK-aware Scaling:通过调整频率基数(如将 10000 增大)来改变不同维度组的旋转速度,在不改变训练长度的情况下提升高频维度的分辨率。
- YaRN:在 NTK-aware Scaling 基础上进一步优化,兼顾高频和低频维度的外推性能。
- LongRoPE:通过渐进式扩展和微调,将 RoPE 的有效上下文窗口扩展至数十万甚至百万级别。
RoPE:RoFormer: Enhanced Transformer with Rotary Position Embedding
YaRN:YaRN: Efficient Context Window Extension of Large Language Models
Position Interpolation:Extending Context Window of Large Language Models via Positional Interpolation
LongRoPE:LongRoPE: Extending LLM Context Window Beyond 2 Million Tokens
ALiBi 位置编码
ALiBi:Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation
基于注意力偏置的位置编码(Attention With Linear Biases,ALiBi)是一种不使用显式位置 embedding 的位置建模方法。它的核心思想是在注意力得分中加入与 query-key 距离成线性关系的偏置项,使模型天然具有距离衰减的归纳偏置。对于自回归语言模型,当前位置 i 只能关注历史位置 j\leq i。标准注意力打分为:
ALiBi 将其修改为:
其中,m_h 是第 h 个注意力头对应的正斜率参数,i-j 表示当前位置与历史位置之间的距离。由于 i-j \geq 0 距离越远,线性惩罚越大,attention logit 越小。
也可以写成:
因为 j-i\leq 0,所以该项同样表现为对远距离位置的惩罚。
ALiBi 的一个重要设计是不同注意力头使用不同的斜率 m_h。较大的斜率使某些注意力头更关注近距离 token,较小的斜率则允许某些注意力头关注更远距离的信息。这样,不同注意力头可以形成不同的距离偏好。
ALiBi 的优点是结构极其简单,不需要位置 embedding 表,也不需要对 query 和 key 进行额外变换。由于其位置偏置可以自然扩展到任意长度,因此具有较好的长度外推能力。此外,它的计算开销较小,适合长序列场景。
其缺点在于线性距离偏置是一种较强的归纳假设。它默认远距离 token 的重要性随着距离增加而下降,这在普通语言建模中通常是合理的,但在某些需要精确长程依赖的任务中可能过于简单。例如,在长文档问答、代码补全、跨段引用和信息检索增强场景中,远距离 token 可能包含关键证据。此时,过强的距离惩罚可能影响模型对远距离信息的利用。
长上下文扩展方法
随着大语言模型上下文窗口不断扩展,位置编码不仅需要提供基本的顺序信息,还需要在更长序列上保持稳定的注意力分布和可靠的相对位置建模能力。对于采用 RoPE 的模型而言,若推理阶段的输入长度显著超过训练阶段的最大上下文长度,位置索引对应的旋转角度可能进入训练过程中未充分覆盖的区域,从而导致注意力分布异常、相位混叠或局部位置分辨率下降。因此,长上下文扩展方法的核心目标,是在尽量保留预训练模型原有能力的基础上,调整 RoPE 的位置索引或频率尺度,使模型能够处理更长的上下文。
常见的 RoPE 长上下文扩展方法包括 Position Interpolation、NTK-aware Scaling、YaRN 和 LongRoPE 等。
其中,Position Interpolation 通过压缩位置索引缓解长度外推带来的不稳定问题;YaRN 则在插值思想的基础上进一步引入频率选择性缩放和注意力校正机制,以提高长上下文扩展的效率和稳定性。
Position Interpolation
Position Interpolation(PI)是一种面向 RoPE 模型的长上下文扩展方法。其基本思想不是让模型直接外推到训练长度之外的位置,而是将更长序列中的位置索引线性压缩到模型原始训练长度范围内。这样可以避免 RoPE 在推理阶段使用过大的位置索引,从而减轻旋转角度超出训练分布所带来的注意力失稳问题。该方法最初用于将基于 RoPE 的预训练大语言模型扩展到更长上下文,并通过较少步数的微调获得较好的长文本建模效果。
设模型训练阶段的最大上下文长度为 L_{\text{train}},目标扩展长度为 L_{\text{target}},且扩展比例为:
其中,s>1。对于目标长度内的位置 i,Position Interpolation 将其映射为:
因此,RoPE中原本使用的位置旋转角度 i\theta_k被替换为 \frac{i}{s}\theta_k
对应地,RoPE的旋转变化可以写为:
在 query-key内积中,有:
由此可见,Position Interpolation 实际上将相对位移 j-i缩放为:
也就是说,模型在目标上下文长度 L_{\text{target}} 内看到的位置变化,被压缩到原始训练上下文长度 L_{\text{train}} 的范围内。与直接使用超过训练长度的位置索引相比,这种插值方式更接近模型训练阶段见过的位置分布,因此具有更好的稳定性。
Position Interpolation 的优点主要体现在以下几个方面。第一,它不需要改变 Transformer 的主体结构,只需修改 RoPE 的位置索引映射方式,因此实现简单,能够较好地兼容已有模型结构和推理框架。第二,它避免了直接长度外推带来的极端旋转角度,使注意力分布更加稳定。第三,该方法通常只需要较少的继续训练或微调,就可以显著扩展模型的上下文窗口。
然而,Position Interpolation 也存在一定局限。由于它将较长范围的位置压缩到较短范围内,不同位置之间的角度差会相应减小。这可能降低模型对短距离位置差异的分辨能力,尤其是在扩展比例较大时,相邻 token 之间的位置信号会变得更加接近,从而影响局部顺序关系的建模。此外,Position Interpolation 对长上下文的利用能力通常仍依赖一定量的微调数据。如果缺少合适的长文本训练样本,模型虽然在形式上能够接受更长输入,但未必能够充分利用远距离上下文信息。
总体而言,Position Interpolation 的核心贡献在于将 RoPE 的长上下文扩展问题从“长度外推”转化为“位置插值”。这种方法有效降低了超出训练长度后位置编码分布突变带来的风险,是后续多种 RoPE 扩展方法的重要基础。
YaRN
YaRN(Yet another RoPE extensioN method)是在 Position Interpolation 等方法基础上提出的高效长上下文扩展方法。它同样面向采用 RoPE 的大语言模型,目标是在较低训练成本下扩展模型的有效上下文窗口。与单纯对所有频率进行统一缩放的做法不同,YaRN 更强调不同频率维度在长上下文建模中的作用差异,并通过频率选择性缩放和注意力校正机制,在短程位置分辨率与长程上下文泛化能力之间取得更好的平衡。YaRN 的研究表明,该方法可以用更少的训练 token 和训练步数实现有效的上下文扩展.
在 RoPE 中,不同维度对应不同频率。高频维度变化较快,主要有助于区分局部位置关系;低频维度变化较慢,更适合表示长距离依赖。若对所有频率统一进行缩放,虽然可以扩展上下文长度,但可能同时削弱局部位置信号的分辨率。YaRN 的基本思想是:对不同频率分量采用不同的缩放策略,使模型既能保持对短距离位置关系的敏感性,又能获得更好的长距离建模能力。
设 RoPE中第 k 个频率为:
标准 RoPE 中位置 i 对应的旋转角度为 i\theta_k,在长上下文扩展中,可以通过调整频率或位置索引来改变旋转角度。若采用统一缩放,则可写为:
此时旋转角度变为:
YaRN 并不简单地对所有频率使用同一个缩放比例,而是根据频率所处的范围进行分段或平滑调整。对于更适合建模局部位置关系的高频分量,YaRN 倾向于尽量保留其原有尺度;对于更适合建模长距离关系的低频分量,则施加更强的缩放,以支持更长上下文范围内的稳定建模。其一般形式可以表示为:
其中,\lambda_k 是与频率维度 k 相关的缩放因子。不同维度可以具有不同的 \lambda_k,从而实现频率选择性的 RoPE 缩放。
经过缩放后,RoPE 的旋转变换可以写为:
其中,R_i^{(\theta^\prime)} 表示使用调整后频率 \theta_k' 构造的旋转矩阵。对应的 query-key 内积为:
由于旋转矩阵仍然作用于 query 和 key,YaRN 依然保留了 RoPE 将相对位置信息融入注意力内积的基本性质。不同之处在于,YaRN 通过频率相关的缩放策略调整了不同维度对相对距离的敏感程度,从而改善长上下文扩展时的稳定性。
除频率缩放外,YaRN 还引入了注意力幅度校正机制。随着上下文长度扩展,RoPE 频率缩放可能改变注意力分数的统计分布,进而影响 softmax 后的注意力权重。为缓解这一问题,YaRN 对注意力 logit 进行适当的缩放校正,使长上下文扩展后的注意力分布更加稳定。这一设计有助于减少扩展上下文长度后模型性能下降的问题。
YaRN 的优点主要包括以下几个方面:
- 第一,它比简单的位置插值更加灵活,能够根据不同频率维度的特点进行差异化调整。
- 第二,它在扩展上下文窗口的同时,尽量保留短距离位置分辨率,从而缓解统一插值可能造成的局部位置信息退化。
- 第三,它具有较高的训练效率,通常可以在较少训练 token 和训练步数下完成上下文扩展。
- 第四,YaRN 对已有 RoPE 模型具有较好的兼容性,不需要从头训练模型,也不需要对 Transformer 主体结构进行大规模修改。
不过,YaRN 也存在一定局限。首先,其效果依赖于缩放策略、扩展比例和微调数据的选择,不同模型和不同目标上下文长度下可能需要调整超参数。其次,虽然 YaRN 能够显著改善长上下文扩展效果,但模型能否真正利用远距离信息,仍取决于预训练和微调过程中是否接触到足够的长程依赖样本。最后,当上下文长度扩展到极大规模时,仅调整位置编码可能仍不足以解决注意力计算成本、信息检索能力和长距离推理能力等问题。
总体而言,YaRN 可以视为对 RoPE 长上下文扩展方法的进一步改进。它在 Position Interpolation 的基础上引入更加细粒度的频率缩放思想,并通过注意力校正提高扩展后的稳定性。与简单线性插值相比,YaRN 更注重在短程位置分辨率和长程上下文泛化能力之间取得平衡,因此成为 RoPE 模型长上下文扩展中的重要代表方法之一。