当前位置: 首页 > news >正文

Rope旋转位置编码解读

Rope旋转位置编码的数值示例

RoPE (Rotary Position Embedding) 数值示例详解

一、基本原理

RoPE通过旋转矩阵将位置信息编码到向量中。对于位置mmm和维度索引iii,使用角度mθim\theta_imθi进行旋转,其中:

θi=10000−2i/d\theta_i = 10000^{-2i/d}θi=100002i/d

二、具体数值例子

设置参数

  • 序列长度: 3个token(位置0, 1, 2)
  • embedding维度: d = 4
  • 基础频率: base = 10000

步骤1:计算旋转角度 θ

对于 d=4,我们需要计算 θ₀ 和 θ₁(因为是成对处理):

θ₀ = 10000^(-2×0/4) = 10000^0 = 1.0 θ₁ = 10000^(-2×1/4) = 10000^(-0.5) = 0.01

步骤2:准备输入向量

假设我们有3个token的query向量(简化数值):

位置 0 的向量 q₀:

q₀ = [1.0, 0.0, 2.0, 0.0]

位置 1 的向量 q₁:

q₁ = [1.0, 0.0, 2.0, 0.0]

位置 2 的向量 q₂:

q₂ = [1.0, 0.0, 2.0, 0.0]

步骤3:应用RoPE旋转

RoPE将向量每两个维度作为一对进行2D旋转。对于维度对 (x, y),在位置 m 处:

[x′y′]=[cos⁡(mθ)−sin⁡(mθ)sin⁡(mθ)cos⁡(mθ)][xy]\begin{bmatrix} x' \\ y' \end{bmatrix} = \begin{bmatrix} \cos(m\theta) & -\sin(m\theta) \\ \sin(m\theta) & \cos(m\theta) \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}[xy]=[cos(mθ)sin(mθ)sin(mθ)cos(mθ)][xy]

位置 0 (m=0) 的旋转:

维度对 [0,1]: 旋转角度 = 0 × 1.0 = 0

[1.0] [cos(0) -sin(0)] [1.0] [1.0] [0.0] = [sin(0) cos(0)] [0.0] = [0.0]

维度对 [2,3]: 旋转角度 = 0 × 0.01 = 0

[2.0] [cos(0) -sin(0)] [2.0] [2.0] [0.0] = [sin(0) cos(0)] [0.0] = [0.0]

输出 q₀’:[1.0, 0.0, 2.0, 0.0](没有变化)

位置 1 (m=1) 的旋转:

维度对 [0,1]: 旋转角度 = 1 × 1.0 = 1.0 弧度 ≈ 57.3°

cos(1.0) ≈ 0.5403 sin(1.0) ≈ 0.8415 [x'] [0.5403 -0.8415] [1.0] [0.5403] [y'] = [0.8415 0.5403] [0.0] = [0.8415]

维度对 [2,3]: 旋转角度 = 1 × 0.01 = 0.01 弧度 ≈ 0.57°

cos(0.01) ≈ 0.99995 sin(0.01) ≈ 0.01 [x'] [0.99995 -0.01] [2.0] [1.9999] [y'] = [0.01 0.99995] [0.0] = [0.02]

输出 q₁’:[0.5403, 0.8415, 1.9999, 0.02]

位置 2 (m=2) 的旋转:

维度对 [0,1]: 旋转角度 = 2 × 1.0 = 2.0 弧度 ≈ 114.6°

cos(2.0) ≈ -0.4161 sin(2.0) ≈ 0.9093 [x'] [-0.4161 -0.9093] [1.0] [-0.4161] [y'] = [0.9093 -0.4161] [0.0] = [0.9093]

维度对 [2,3]: 旋转角度 = 2 × 0.01 = 0.02 弧度

cos(0.02) ≈ 0.9998 sin(0.02) ≈ 0.02 [x'] [0.9998 -0.02] [2.0] [1.9996] [y'] = [0.02 0.9998] [0.0] = [0.04]

输出 q₂’:[-0.4161, 0.9093, 1.9996, 0.04]

三、关键观察

输入 vs 输出对比

位置输入向量输出向量(应用RoPE后)
0[1.0, 0.0, 2.0, 0.0][1.0, 0.0, 2.0, 0.0]
1[1.0, 0.0, 2.0, 0.0][0.5403, 0.8415, 1.9999, 0.02]
2[1.0, 0.0, 2.0, 0.0][-0.4161, 0.9093, 1.9996, 0.04]

RoPE的优势

  1. 相对位置编码:计算注意力时,q·k 的结果只依赖相对位置差

    • 例如:q₁’ · k₀’ 和 q₂’ · k₁’ 会产生相同的旋转效果(都是位置差1)
  2. 向量长度不变:旋转不改变向量的模长

    • |q₀| = |q₀’| = √(1² + 0² + 2² + 0²) = √5
  3. 不同频率捕获不同范围

    • 低维度(θ大):旋转快,适合捕获近距离关系
    • 高维度(θ小):旋转慢,适合捕获远距离关系

四、实际应用

在Transformer的注意力计算中:

Q' = RoPE(Q, positions) K' = RoPE(K, positions) Attention = softmax(Q'K'^T / √d) V

通过这种方式,位置信息被"旋转"进了query和key向量中,使得注意力分数自然地包含了位置关系!��为你创建了一个详细的RoPE数值示例!

核心要点:

  1. 旋转原理:RoPE将每两个维度作为一对,在2D平面上进行旋转,旋转角度与位置成正比

  2. 关键公式:对于位置m,维度i的旋转角度是m × θᵢ,其中θᵢ = 10000^(-2i/d)

  3. 实例说明

    • 同样的输入向量[1.0, 0.0, 2.0, 0.0]
    • 在不同位置会得到不同的旋转结果
    • 位置0:不旋转(角度为0)
    • 位置1:旋转1弧度和0.01弧度(不同维度对)
    • 位置2:旋转2弧度和0.02弧度
  4. 神奇之处:当计算注意力 Q·K^T 时,相对位置相同的token对会有相同的旋转关系,这就实现了相对位置编码!

你可以看到,即使三个位置的输入向量完全相同,经过RoPE后它们变得不同了,这就是位置信息被"编码"进向量的方式。

需要我进一步解释某个具体步骤吗?比如旋转矩阵的推导或者为什么能实现相对位置编码?

http://www.jsqmd.com/news/116021/

相关文章:

  • PCL分割——圆柱分割
  • 人= 具身生命 × 关系网络 × 叙事自我 × 价值选择
  • Item46--需要类型转换时请为模板定义非成员函数
  • 别再踩坑了!6款实测有效的降ai工具推荐,保姆级教你降低ai率!
  • 读不懂诗歌:钟摆的胎动里倒游的鱼群正在翻译冰层
  • [项目]基于正倒排索引的Boost搜索引擎---编写搜索引擎模块 Searcher - 指南
  • 江西南昌住家保姆/不住家保姆品牌TOP5评测!专业认证+服务保障企业榜单发布,品质家政赋能现代家庭生活 - 全局中转站
  • Item45--运用成员函数模板接受所有兼容类型
  • 大数据领域Kafka与Hadoop的协同工作模式
  • 霍华德·马克斯的市场周期定位技巧
  • 别乱花钱了!6款实测有效的降ai工具推荐,学姐教你降低ai率!
  • 强烈推荐 wxWidgets
  • SFTDataset:Verl 单轮Dataset vs rllm 多轮Dataset vs Parallel-R1 Dataset
  • Boost asio定时器
  • 2025年度江西南昌育儿嫂企业TOP5评测!金牌一站式早教型育儿嫂品牌榜单发布,赋能现代家庭育儿新生态 - 全局中转站
  • 2025年度江西南昌老人护理企业TOP7评测!专业照护+经验沉淀优质品牌榜单发布,用心守护构筑长者幸福晚年 - 全局中转站
  • Product Hunt 每日热榜 | 2025-12-20
  • 过半的家庭都踩过近视的“坑”,每位爸妈都值得注意!
  • 每天一个网络知识:什么是光猫?
  • 【2025全网盘点】10款常见降AI率工具大汇总(含笔灵/Kimi等免费降AI版本)
  • Item28--避免返回 handles 指向对象内部成分
  • 前端开发随笔
  • 基于java的SpringBoot/SSM+Vue+uniapp的大学生学业预警和警告平台的详细设计和实现(源码+lw+部署文档+讲解等)
  • 一文吃透动态规划解题思路——以钢条切割问题为例
  • Redis:安装配置、核心概念与实践应用
  • 程序员的幸福之道:不必追逐权力与学历——在代码与生活之间寻找真正的自由
  • 别再焦虑了!6款实测有效的降ai工具推荐,学姐手把手教你降低ai率!
  • 孩子近视的“真凶”不是手机,也不是电视,而是父母都不在意的它
  • 基于java的SpringBoot/SSM+Vue+uniapp的课程目标达成度系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 动态规划解决最小编辑距离问题