资讯

旋转位置编码 RoPE 是什么?用旋转来告诉模型词的相对位置

2026-11-053 分钟阅读百科
TL;DR旋转位置编码(RoPE)是苏剑林等人在 2021 年的 RoFormer 论文中提出的位置编码方法,通过按位置对查询和键向量进行旋转,让注意力自然地包含 token 之间的相对位置信息,被 Llama、Qwen、DeepSeek 等绝大多数大模型采用。

旋转位置编码(Rotary Position Embedding,RoPE)是一种为 Transformer 注入位置信息的方法,由追一科技的苏剑林等人在 2021 年的论文《RoFormer:使用旋转位置编码增强的 Transformer》中提出。它能够把相对位置的依赖关系集成到自注意力的计算中,如今已被 Llama、Qwen、DeepSeek、Mistral 等绝大多数主流大语言模型所采用。

为什么需要位置编码

Transformer 的注意力机制有一个特点:它本身不知道词语的先后顺序。在它看来,“猫追狗”和“狗追猫”这两句话包含的是同样的几个词,计算结果没有区别,但它们的意思完全不同。所以需要用某种方式告诉模型每个词处在什么位置,这就是位置编码。

最初的 Transformer 使用的是绝对位置编码:为每一个位置生成一个固定的向量,直接加到词的表示上。但语言中更重要的往往是相对位置:两个词隔了多远,谁在前谁在后,而不是一个词处在全文的第几个位置。此后研究者提出了多种相对位置编码的方法,但它们往往实现复杂,或者与一些高效的注意力实现方式不兼容。

RoPE 的巧妙之处:用旋转表示位置

RoPE 的核心想法是:用“旋转”来表示位置。它把每个 token 的查询向量和键向量中的元素两两分成一组,每一组看作二维平面上的一个向量,然后根据这个 token 所在的位置,把这些二维向量旋转一个角度:位置越靠后,旋转的角度越大。不同组的旋转速度不同,有的转得快,有的转得慢,就像钟表上转速不同的指针,一起编码位置信息。

妙处在于注意力的计算方式:注意力分数是查询向量和键向量的点积。两个向量各自旋转之后再做点积,结果只取决于它们旋转角度之差,也就是两个 token 之间的相对距离,而与它们各自的绝对位置无关。这样,虽然 RoPE 是对每个 token 按绝对位置进行旋转,最终的注意力却自然地只依赖于相对位置。它结合了绝对位置编码实现简单和相对位置编码效果好的优点。

它的优点

实现简单,只需在计算注意力前对查询和键做一次旋转,不需要额外的参数;天然地编码相对位置;具有随距离增大而注意力逐渐衰减的特性,符合语言中距离越远的词关系通常越弱的规律;能与高效的注意力实现方式很好地配合。

长上下文的扩展

RoPE 的另一个重要特点是方便扩展上下文长度:模型在训练时只见过一定长度的文本,直接用来处理更长的文本时效果会下降。研究者提出了多种基于 RoPE 的长度扩展方法,比如位置插值、NTK 感知的缩放、YaRN 等,通过调整旋转的频率,让模型只需少量的额外训练,就能处理远超原始训练长度的上下文。这也是如今大模型能支持数十万甚至上百万 token 上下文的关键技术之一。