Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Rotary Position Embedding (RoPE)

旋转位置嵌入 (RoPE) 会根据词元位置旋转查询向量和键向量,使注意力分数取决于相对距离。大多数开放 LLM 都使用这种方法。

旋转位置嵌入(RoPE)通过将每个查询向量和键向量旋转一个与 token 位置成比例的角度,为 Transformer 提供有关词元顺序的信息。自注意力本身无法区分不同的词序,因此模型必须以某种方式注入位置信息;使用 RoPE 时,位置 m 的查询与位置 n 的键之间的注意力分数只取决于它们的偏移量 m − n。RoPE 于 2021 年随 RoFormer 模型提出,并由 EleutherAI 的 GPT-J 和 GPT-NeoX 推广;如今,它已成为开源大型语言模型(LLM)的标准位置编码,包括 Llama、Mistral、Qwen、Gemma 和 DeepSeek。

RoPE 的工作原理#

RoPE 会将每个维度为 d 的查询向量和键向量拆分为 d/2 对特征,并将每对特征视为平面上的一个点。在位置 m 时,第 i 对特征会旋转 m·θᵢ 的角度,其中 θᵢ = base^(−2i/d),原始论文中 base 为 10,000。前面的特征对旋转较快,可分辨细微的局部顺序;后面的特征对旋转较慢,仍能区分相隔数千个位置的 token。将查询旋转 mθ、将键旋转 nθ 后,两者的点积只取决于差值 (m − n)θ,而且旋转不会改变向量长度。旋转会在每个注意力层内部、查询和键投影之后执行;值向量不会旋转,输入时也不会向 token 的嵌入添加任何内容:

下面的代码片段使用复数实现旋转,与 Meta 的 Llama 参考代码相同,并验证相对位置属性:

import torch

torch.manual_seed(0)
dim = 64
freqs = 10000 ** (-torch.arange(0, dim, 2) / dim)  # one rotation frequency per pair of features


def rope(x, pos):
    """Rotate each consecutive feature pair of x by the angle pos * frequency."""
    pairs = torch.view_as_complex(x.reshape(-1, 2))
    return torch.view_as_real(pairs * torch.polar(torch.ones_like(freqs), pos * freqs)).flatten()


q, k = torch.randn(2, dim)
# The same query and key, three tokens apart, at two different places in the sequence
print(f"positions 5 and 2:     {rope(q, 5) @ rope(k, 2):.4f}")
print(f"positions 105 and 102: {rope(q, 105) @ rope(k, 102):.4f}")
print(f"positions 5 and 4:     {rope(q, 5) @ rope(k, 4):.4f}")  # one token apart
print(f"Vector length kept: {rope(q, 5).norm():.4f} vs {q.norm():.4f}")

无论这两对向量位于位置 5 和 2,还是位置 105 和 102,相隔三个 token 时都会输出 -8.2811;相同向量相隔一个 token 时,输出 -11.4563。旋转后的查询向量长度仍为 8.3705。

RoPE 与其他位置编码的比较#

  • 正弦绝对位置编码: 原始 Transformer 在第一层之前,仅将固定的正弦和余弦向量添加到输入嵌入中。模型必须从混入的信号中推断相对距离。
  • 可学习绝对位置嵌入: BERT 和 GPT-2 会为每个位置学习一个向量,最多分别支持 512 和 1,024 个位置,超过该限制的位置没有对应的嵌入。
  • 相对位置偏置: T5 和 ALiBi 会根据距离向注意力分数添加可学习或固定的偏置。RoPE 通过旋转本身编码相对距离,不增加任何参数。

扩展上下文窗口#

使用 RoPE 在长度为 L 的序列上训练的模型从未见过 L 之后位置对应的旋转角度,因此遇到这些角度时,注意力表现会下降。上下文扩展方法会重新缩放角度,而不是从头开始训练。位置插值会将新增位置压缩到训练范围内,并在 1,000 个微调步骤内将 Llama 模型的上下文窗口扩展到 32,768 个 token。NTK 感知缩放和 YaRN 对旋转较慢的低频特征对进行更大幅度的扩展;与早期方法相比,YaRN 用少 10 倍的训练 token 将 Llama 2 扩展到 128K token。Llama 3 在预训练期间将 base 从 10,000 提高到 500,000,因此旋转最慢的特征对每个 token 的旋转幅度更小,远距离位置也能保持可区分。

视觉模型中的 RoPE#

图像需要两个坐标,因此视觉 Transformer会使用 2D 或轴向 RoPE:每个注意力头的一半特征对根据图像块的列旋转,另一半根据其行旋转。Qwen2-VL 在多模态 M-RoPE 中增加了第三个时间轴,用于处理视频。Meta 的 SAM 2 可在 Ultralytics 软件包中运行,并在其记忆注意力的四层中应用轴向 RoPE;当前视频帧的特征会在此关注早期帧的已存储特征。每个已存储帧的键都会使用与当前帧查询相同的网格角度,因此两帧之间的注意力取决于图像块的空间偏移。

Explore solutions

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

借助 Ultralytics YOLO,将无人机和航空影像转化为实时洞察,应用于农业、水产养殖、环境监测、自然保护和地理空间分析。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 模型将视觉 AI 应用于航空监测。借助计算机视觉解决方案,赋能无人机、航空航天工作流、环境保护和地理空间行业。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来