收藏!一文读懂旋转位置编码(RoPE):Transformer位置编码的革命性突破
RoPE是一种革命性位置编码方法,通过旋转语义向量编码位置信息,实现绝对位置到相对位置的转换。它具有长度外推性和远程衰减性,可直接替换传统位置编码而不改变Transformer架构。文章详细解析了RoPE的数学原理、外推问题及解决方案,并介绍了其在二维输入中的应用,为提升大模型性能提供了关键技术支持。
Background
本文中,我们提出了一种名为 Rotary Position Embedding 的新方法,它使用绝对位置编码,来表示相对位置关系:
- 绝对位置编码无法表征相对位置关系,不符合 NLP 直觉,且无法外推
- 相对位置编码直接调整 attention score ,而非 本身,这会影响 self-attention 计算过程
- 而 RoPE 用语义向量和位置向量相乘:
- 直接调整 ,保持 self-attention 计算不变
- 避免加性 PE 对语义信息的干扰
Property
RoPE 具有如下特性:
-
长度外推性:短序列训练的模型,可以外推至长序列,且性能衰减可控
-
远程衰减性:token 之间的内积随相对位置增大呈震荡衰减趋势,符合自然语言中邻近词汇相关性更强的特点
-
兼容性:可以直接替换传统 PE,无需修改 Transformer 架构,且支持与 Linear Attention 等高效计算方案结合
-
位置—语义解耦:
-
正交旋转机制:RoPE 的旋转矩阵满足 ,保持模长不变,避免干扰原始语义
-
相对位置自然编码:点积结果仅依赖相对位置差 ,无需额外学习
方法详解
算法构思
目标设定
为了具备相对位置编码的 NLP 直觉特性,又兼顾绝对位置的 复杂度,同时又避免直接对 进行修改,最佳的设计就是:通过绝对位置编码,实现相对位置编码。Sinusoidal 位置编码隐约做到了这一点,但并不够好。
首先给定 的绝对位置编码形式:
其中:
- 为序列中的绝对位置
- 融合了内容和位置信息
要实现绝对编码表示相对位置的目标,我们需要满足:
其中,函数 是一个只与内容信息 和相对距离 相关的函数。
复数与极坐标
向量乘法
其中:
- 为两向量之间的夹角
复数表示
为简化问题,以二维向量为例,此时向量可以用复数表示,向量内积计算方式如下:
其中:
- 表示 的共轭复数
- 验证:代入 可得
极坐标表示
任意复数又可以用极坐标表示,如下所示:
其中:
- ,表示复数的模
- ,表示复数的相位角(即与正实轴的夹角),满足 (根据象限确定正确的角度)
目标的复数及极坐标表示
回到上面的目标,先考虑二维(token 维度 )情形,则 可以用复数表示。此时目标可以表示为:
这要求内积的实部为关于 的函数。我们不妨设置一个更强且更合理的假设:不仅实部,整个复数乘积本身都可以用另一个只依赖于 的复数函数 表示,即:
此时,可以用极坐标(模长 + 相位角)表示为:
其中:
- 为向量 的模长
- 为向量 的相位角
- 其他以此类推
目标求解
现在,我们的目标变为了求解满足条件的函数 ,根据上文,它们应满足:
这就将目标的求解分解为了相位角条件和模长条件的求解。
初始条件
作为序列的开始,可以不添加任何位置信息,因此有:
模长部分求解
令 ,可得:
要满足上式,最简单的一种实现是:
在这种实现下,函数 不改变向量的模长!!!
相位角部分求解
令 ,可得:
根据初始条件 可得,在位置 0 处,函数 不改变向量的相位角。因此:
移项可得:
也就是说,函数 对每个向量的相位角,都增加了一个相同的量,这个量只与位置 相关,而与向量本身的内容无关,即:
然后再令 ,可得:
上式的右边,是一个常数!!!因此, 是一个等差数列!!!其通式可写为:
而根据初始条件 可得 ,因此:
因此可得:
结论
综上所述,满足用绝对位置编码表示相对位置的一个解是:
RoPE
依据上面的推导,可以得到 RoPE,其核心思想是:将位置信息表示为对内容向量的一个旋转,旋转角度与绝对位置成正比。这样两个向量的内积就只取决于其相对位置(夹角)了。
编码形式
先以 为例,说明 RoPE 的编码形式:
写成向量形式,可得:
由于内积满足线性叠加性,因此任意偶数维的 RoPE,可以写成如下形式:
此时,对应的 attention 计算为:
对应的 已自动包含了相对位置信息。
由于 的稀疏性,直接使用上面的矩阵乘法会很浪费算力,因此一般使用如下等效方式进行计算:
其中, 为逐位对应相乘,即 Pytorch 中的*运算。
在实际应用中,一般遵循 Sinusoidal 编码,设置 。
算法图示
核心点:旋转!

图 1:旋转位置嵌入(RoPE)的实现
远程衰减
可以看到,RoPE 形式上和 Sinusoidal 位置编码有点相似,只不过 Sinusoidal 位置编码是加性的,而 RoPE 可以视为乘性的。
将向量 的元素两两分组,则加上 RoPE 后的内积可以表示为:
记:
则根据分部求和法,可得:
根据边界条件,令 ,因此上式可写为:
对应的:
令 ,忽略常数。
直接对剩余部分 分析其与 的关系较为复杂,因此我们直接考察其平均值:
这个平均值代表了 的典型值,若其随 增大而衰减,则内积的上界也会衰减,从而表明 attention score 会随着相对距离的增加而减小。这正是我们所期望的,当前 token 应该更多关注近距离的 token。
对应的衰减曲线如下所示:

Long-term decay of RoPE
但是,衰减是有限度的,因为三角函数本身是周期函数,所以相对距离超过一定范围后,这种震荡递减的关系将不再存在:

相关绘制代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.axes import Axesdefcreate_sin_cos_cache(max_num_tokens, head_size): theta = 10000 ** (-np.arange(0, head_size, 2) / head_size) theta = theta.reshape(-1, 1).repeat(2, axis=1).flatten() pos = np.arange(0, max_num_tokens) table = pos.reshape(-1, 1) @ theta.reshape(1, -1) # [max_num_tokens, head_size] sin_cache = np.sin(table) sin_cache[:, ::2] = -sin_cache[:, ::2] cos_cache = np.cos(table)return sin_cache, cos_cachedefrotate_half(vec):return vec.reshape(-1, 2)[:, ::-1].flatten()defrotary(vec, pos, sin_table, cos_table):return vec * cos_table[pos] + rotate_half(vec) * sin_table[pos]defplot(plt_obj: Axes, pic_index, query_index=0, head_size=256, max_num_tokens=8192, step=1): q_vec = np.ones(head_size) k_vec = np.ones(head_size) sin_table, cos_table = create_sin_cos_cache(max_num_tokens, head_size) rotated_q_vec = rotary(q_vec, query_index, sin_table, cos_table) k_indices = np.arange(0, max_num_tokens, step) rotated_k_vecs = rotary(k_vec, k_indices, sin_table, cos_table) attn_scores = (rotated_k_vecs @ rotated_q_vec) / np.sqrt(head_size) plt_obj.plot(k_indices, attn_scores) plt_obj.set_title(f"Figure {pic_index}: query_index={query_index}, head_size={head_size}") plt_obj.set_xlabel("key index") plt_obj.set_ylabel("attention score")plt.rcParams.update({"font.sans-serif": ["Times New Roman", ],"font.size": 10})_, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))plot(axes[0, 0], 1, query_index=0, max_num_tokens=512)plot(axes[0, 1], 2, query_index=256, max_num_tokens=512)plot(axes[1, 0], 3, query_index=0, max_num_tokens=65535)plot(axes[1, 1], 4, query_index=0, head_size=8, max_num_tokens=65535)
Qwen 中的 RoPE
在 Qwen Technical Report 中,对于大多数 layers,移除 bias,但是在 attention 的 KQV layer 中添加 bias,以增强模型的外推能力。
三角函数的周期性
其中:
- 振幅为
- 周期为
- 频率为周期的倒数,即:
- 垂直移位为
- 相移为
例如, 各部分计算及图示如下:

从远程衰减看 RoPE 的外推不足
Why?
RoPE 通过旋转角频率 来编码位置,其中 为 token 向量中元素的索引:
- 对于较小的 , 较大,对应周期为 较小,频率 较大,变化很快,可以捕捉短距离上下文,比如一句话的不同词汇
- 对于较大的 , 较小,对应周期为 较大,频率 较小,变化很慢,可以捕捉长距离上下文,比如一篇文章的不同段落
这种多频率的方式,可以使得 RoPE 能够捕捉到不同距离的信息。
RoPE 外推失效的核心是未训练维度的分布偏移和周期性边界突破:

-
临界维度 的划分
临界维度 定义为:周期长度首次超过训练长度 的维度分界点:
例如,对于 LLaMA-2 而言,,此时 ,因此后面的 38 维训练不足。
-
外推时分布偏移
当推理长度 时:
- 低频部分旋转角度 超出训练范围,模型将无法正确处理
- attention score 出现异常值,破坏局部 attention 机制
解决办法
一般解决办法为扩增训练覆盖范围或抑制低频维度影响:
-
调整旋转基数
-
缩小 base,所有维度的周期均小于 ,使得所有维度充分训练,但可能会削弱远程衰减特性
-
增大 base,拓展低频维度周期上限,但需要进行 finetune
-
Position Interpolation
压缩推理位置坐标:将外推位置 scale 到训练范围 :
-
NTK-aware 缩放
高频维度保持原旋转速度,低频部分动态缩放旋转角度:
既保留高频信息的局部性,又使得低频维度适应更长的上下文。
为什么 bias 能增强外推能力
在没有该偏置项时,RoPE 会直接将位置信息编码至 向量中,对应的远程衰减特性会直接体现在 attention score 上。对于未见过的相对距离 ,模型将无法准确处理。
而有该偏置项(可学习的,且与输入和位置无关)时,在应用 RoPE 时,会将绝对位置信息编码(旋转)至该偏置 上。由于 bias 与位置无关,因此能够一定程度推广至未见过的长度,作为 的补充,优化远程衰减。
二维 RoPE
上面的讲解都是基于一维序列而言,对于 ViT 这种二维输入,该如何构建 RoPE?
首先排除直接展开。对于尺寸为 的 feature map:
- 位置 展开后变为了
- 位置 展开后为 ,与 gap 为
- 位置 展开后分别为 ,与 gap 为
这显然不符合直觉。
下面是二维 RoPE 的一个解:
一半施加给 ,一半施加给 。这是一个正交矩阵,它满足:
- 相对性:
- 可逆性:给定 可以反解出 ,这意味着对位置信息的编码是无损的
# 普通人如何抓住AI大模型的风口?
为什么要学AI大模型
当下,⼈⼯智能市场迎来了爆发期,并逐渐进⼊以⼈⼯通⽤智能(AGI)为主导的新时代。企业纷纷官宣“ AI+ ”战略,为新兴技术⼈才创造丰富的就业机会,⼈才缺⼝将达 400 万!
DeepSeek问世以来,生成式AI和大模型技术爆发式增长,让很多岗位重新成了炙手可热的新星,岗位薪资远超很多后端岗位,在程序员中稳居前列。

与此同时AI与各行各业深度融合,飞速发展,成为炙手可热的新风口,企业非常需要了解AI、懂AI、会用AI的员工,纷纷开出高薪招聘AI大模型相关岗位。
AI大模型开发工程师对AI大模型需要了解到什么程度呢?我们先看一下招聘需求:

知道人家要什么能力,一切就好办了!我整理了AI大模型开发工程师需要掌握的知识如下:
大模型基础知识
你得知道市面上的大模型产品生态和产品线;还要了解Llama、Qwen等开源大模型与OpenAI等闭源模型的能力差异;以及了解开源模型的二次开发优势,以及闭源模型的商业化限制,等等。

了解这些技术的目的在于建立与算法工程师的共通语言,确保能够沟通项目需求,同时具备管理AI项目进展、合理分配项目资源、把握和控制项目成本的能力。
产品经理还需要有业务sense,这其实就又回到了产品人的看家本领上。我们知道先阶段AI的局限性还非常大,模型生成的内容不理想甚至错误的情况屡见不鲜。因此AI产品经理看技术,更多的是从技术边界、成本等角度出发,选择合适的技术方案来实现需求,甚至用业务来补足技术的短板。
AI Agent
现阶段,AI Agent的发展可谓是百花齐放,甚至有人说,Agent就是未来应用该有的样子,所以这个LLM的重要分支,必须要掌握。
Agent,中文名为“智能体”,由控制端(Brain)、感知端(Perception)和行动端(Action)组成,是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。简单来说就是给大模型这个大脑装上“记忆”、装上“手”和“脚”,让它自动完成工作。
Agent的核心特性
自主性: 能够独立做出决策,不依赖人类的直接控制。
适应性: 能够根据环境的变化调整其行为。
交互性: 能够与人类或其他系统进行有效沟通和交互。

对于大模型开发工程师来说,学习Agent更多的是理解它的设计理念和工作方式。零代码的大模型应用开发平台也有很多,比如dify、coze,拿来做一个小项目,你就会发现,其实并不难。
AI 应用项目开发流程
如果产品形态和开发模式都和过去不一样了,那还画啥原型?怎么排项目周期?这将深刻影响产品经理这个岗位本身的价值构成,所以每个AI产品经理都必须要了解它。

看着都是新词,其实接触起来,也不难。
从0到1的大模型系统学习籽料
最近很多程序员朋友都已经学习或者准备学习 AI 大模型,后台也经常会有小伙伴咨询学习路线和学习资料,我特别拜托北京清华大学学士和美国加州理工学院博士学位的鲁为民老师(吴文俊奖得主)
给大家准备了一份涵盖了AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频 全系列的学习资料,这些学习资料不仅深入浅出,而且非常实用,让大家系统而高效地掌握AI大模型的各个知识点。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
适学人群
应届毕业生: 无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型: 非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能突破瓶颈: 传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
AI大模型系统学习路线
在面对AI大模型开发领域的复杂与深入,精准学习显得尤为重要。一份系统的技术路线图,不仅能够帮助开发者清晰地了解从入门到精通所需掌握的知识点,还能提供一条高效、有序的学习路径。
- 基础篇,包括了大模型的基本情况,核心原理,带你认识了解大模型提示词,Transformer架构,预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门AI大模型
- 进阶篇,你将掌握RAG,Langchain、Agent的核心原理和应用,学习如何微调大模型,让大模型更适合自己的行业需求,私有化部署大模型,让自己的数据更加安全
- 项目实战篇,会手把手一步步带着大家练习企业级落地项目,比如电商行业的智能客服、智能销售项目,教育行业的智慧校园、智能辅导项目等等

但知道是一回事,做又是另一回事,初学者最常遇到的问题主要是理论知识缺乏、资源和工具的限制、模型理解和调试的复杂性,在这基础上,找到高质量的学习资源,不浪费时间、不走弯路,又是重中之重。
AI大模型入门到实战的视频教程+项目包
看视频学习是一种高效、直观、灵活且富有吸引力的学习方式,可以更直观地展示过程,能有效提升学习兴趣和理解力,是现在获取知识的重要途径

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
海量AI大模型必读的经典书籍(PDF)
阅读AI大模型经典书籍可以帮助读者提高技术水平,开拓视野,掌握核心技术,提高解决问题的能力,同时也可以借鉴他人的经验。对于想要深入学习AI大模型开发的读者来说,阅读经典书籍是非常有必要的。
600+AI大模型报告(实时更新)
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
AI大模型面试真题+答案解析
我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下

AI时代,企业最需要的是既懂技术、又有实战经验的复合型人才,**当前人工智能岗位需求多,薪资高,前景好。**在职场里,选对赛道就能赢在起跑线。抓住AI这个风口,相信下一个人生赢家就是你!机会,永远留给有准备的人。
如何获取?
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)