在 Transformer 架构中,位置编码(Position Encoding)是理解序列顺序的关键机制。自从 Google 提出原始的 Sinusoidal 编码以来,研究者一直在探索更高效、可泛化的方式。RoPE(Rotary Positional Embedding) 就是在这一背景下被提出的,它已被广泛应用于大模型如 LLaMA、GPT-NeoX、Grok、ChatGLM 等,是现代 LLM 架构的标准配置。

希望大家带着下面的问题来学习,我会在文末给出答案。

·RoPE 明明是“位置编码”,为什么不直接加在 embedding 上,而是要“旋转”查询和键向量?

·RoPE 如何实现相对位置建模?它是怎么让注意力知道“距离”的?

·RoPE 的“旋转矩阵”会不会破坏向量的语义信息?这种操作真的合理吗?

一、为什么需要位置编码?

Transformer 本身不具备序列感知能力,因为它的结构是并行的、多头注意力机制,并没有天然的顺序意识。

所以必须引入某种“位置信息”来帮助模型区分第1个 token 和第10个 token。

二、传统的两种位置编码方式

1. 绝对位置编码(Absolute PE)

最早的 Sinusoidal Encoding(如在原始 Transformer 中)使用如下公式:

优点:无需学习,固定函数缺点:绝对编码,无法处理变化的上下文窗口或相对关系。

2. 可学习位置向量(Learned PE)

直接给每个位置一个可学习向量 pos_embedding[position],缺点是固定长度,不能泛化到更长序列。

三、RoPE 是什么?

RoPE(Rotary Position Embedding),由 Su et al. 在论文《RoFormer: Enhanced Transformer with Rotary Position Embedding》中提出,核心思想是:

“不是将位置编码与 token embedding 相加,而是通过一个旋转矩阵操作,将位置信息引入 Q、K 向量的角度中。”

用直观的话说,就是:

·将位置编码看作一个二维旋转角度

·让 QK 的 dot-product 计算本身隐含序列顺序差异

·因为旋转可以表示相对位置,所以天然支持 相对位置感知

四、RoPE 的数学原理

我们先看 Transformer 中注意力的核心:

在 RoPE 中,我们不是单纯使用 Q 和 K,而是将它们进行位置旋转处理:

其中的旋转操作可以理解为将向量每对两个维度旋转一个角度,角度由位置 index 决定。例如在二维空间:

整个向量通过旋转矩阵变换,就带有了与位置相关的角度偏移。

五、 RoPE 的 Python 实现

import numpy as np
import matplotlib.pyplot as plt
def get_positional_encoding(seq_len, d_model):
pos = np.arange(seq_len)[:, np.newaxis]
i = np.arange(d_model)[np.newaxis, :]
angle_rates = 1 / np.power(10000, (2 * (i // 2)) / np.float32(d_model))
angle_rads = pos * angle_rates
# apply sin to even indices, cos to odd indices
pos_encoding = np.zeros_like(angle_rads)
pos_encoding[:, 0::2] = np.sin(angle_rads[:, 0::2])
pos_encoding[:, 1::2] = np.cos(angle_rads[:, 1::2])
return pos_encoding
# visualize
pe = get_positional_encoding(100, 16)
plt.figure(figsize=(12, 6))
plt.plot(pe[:, :8])
plt.legend([f"dim {i}" for i in range(8)])
plt.title("Positional Encoding (first 8 dimensions)")
plt.xlabel("Position")
plt.ylabel("Value")
plt.grid(True)
plt.show()

这个过程在 GPT-NeoX、LLaMA 中会集成在 rotary_embedding 层中。

六、RoPE 的优点总结

优点 说明
支持相对位置感知 可以泛化到比训练时更长的序列(如 LLaMA3 支持 128k tokens)
高效计算 只对 Q/K 做变换,兼容现有 Attention 实现
保留周期信息 类似于 Sinusoidal 的周期性,但用旋转实现,保留了“频率”概念
泛化能力更强 比起 Learned PE 或 Absolute PE 更容易迁移到不同长度任务中

七、哪些模型使用了 RoPE?

·LLaMA 系列(1~3):大规模开源模型都使用 RoPE

·Grok-1(xAI):采用 RoPE + MoE 架构

·GPT-NeoX:引入 RoPE 替代原始位置编码

·ChatGLM 系列:国产 LLM 中广泛采用

·Baichuan, InternLM, Qwen 等:国产大模型通用配置

八、总结

RoPE 是当前大语言模型中最实用、最主流的序列位置编码方式之一。它利用了简单的数学变换(旋转矩阵),在计算成本几乎不变的情况下,实现了对相对位置的建模能力和长序列泛化能力。

在你构建或微调 Transformer 模型时,如果需要支持:

·更长的上下文窗口

·更强的相对位置感知

·更好的跨长度泛化能力

RoPE 是首选方案之一。

最后,我们回答一下文章开头提出的问题。

1.为什么不是加在 embedding 上,而是旋转 q/k?

因为 RoPE 的核心目的不是告诉模型“这是第几号 token”,而是告诉模型两个 token 之间的相对距离。而注意力机制正是通过 qᵀk 来判断关系的,所以将位置偏移编码直接融入 q 和 k 更自然且高效。加法(如原始 PE)只给了“绝对位置”,而旋转能建模“相对差值”。

2.RoPE 如何实现相对位置建模?

RoPE 的旋转操作具有数学性质:

也就是说,旋转后 qᵀk 的值只与位置差值 i − j 有关,这就自然实现了相对位置建模 —— 不关心你在哪儿,而关心你们之间相距多远。

3.旋转会破坏语义向量吗?

不会。RoPE 的旋转操作是一种保长(length-preserving)的线性变换(本质是二维向量在复数平面上的相位偏移),不会改变向量的模长,只会影响方向角度。在高维空间中,这种方式可以在不破坏语义结构的前提下,注入位置信息。

九、如何学习AI大模型?

如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!

这份完整版的大模型 AI 学习和面试资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

在这里插入图片描述

这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!

请添加图片描述
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

100套AI大模型商业化落地方案

请添加图片描述

大模型全套视频教程

请添加图片描述

200本大模型PDF书籍

请添加图片描述

👉学会后的收获:👈

• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

LLM面试题合集

请添加图片描述

大模型产品经理资源合集

请添加图片描述

大模型项目实战合集

请添加图片描述

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐