把一张照片切成很多 patch,再把 patch 变成 token 丢给 Transformer,模型怎么知道哪一块在左上角,哪一块在右下角?
答案不是“注意力自己会看懂”。自注意力首先看到的是 token 之间的内容相似度;如果不额外提供位置信息,它并不知道谁在前、谁在后,也不知道两个视觉 token 是上下相邻还是隔着几列。
位置编码就是给 token 加上的空间坐标系统。文本通常是一条序列,图像则至少有高度和宽度两个方向,视频还要再加上时间轴。本文从这个问题出发,梳理三种常见思路:
- RoPE(Rotary Position Embedding):把位置变成作用在 Query、Key 上的旋转角度;
- ALiBi(Attention with Linear Biases):直接在注意力分数上加入与距离相关的线性偏置;
- 2D-RoPE(2D Rotary Position Embedding):把一维位置扩展为行、列两个坐标,更贴近视觉 patch 的空间结构。
先给一个总览:
| 方案 | 位置进入模型的方式 | 视觉上的主要优势 | 主要注意点 |
|---|---|---|---|
| 绝对位置编码 | 给每个位置加一个向量 | 直观、实现简单 | 分辨率变化时需要插值或重新学习 |
| RoPE | 旋转 Q、K 的向量 | 注意力中自然出现相对位置信息 | 频率基底和长序列外推仍需设计 |
| ALiBi | 给注意力分数加距离偏置 | 额外参数少,长度外推直观 | 一维距离不天然等于二维空间距离 |
| 2D-RoPE | 沿行、列两个方向分别旋转 | 保留图像的二维相对结构 | 不同实现的坐标和频率分配并不统一 |
一、Transformer 为什么需要位置编码
单头自注意力可以简写为:
这个公式里没有出现 token 的索引。只要输入 token 的内容不变,模型就会按照内容相似度计算注意力,而不会自动知道“这是第 5 个 token”或“这是图像的第 3 行第 2 列”。更准确地说,不带位置输入的自注意力对输入排列具有等变性:输入怎么重排,输出也会按照同样方式重排;它本身不提供额外的顺序或空间参照系。
文本中的位置通常是一维的:第 1 个词、第 2 个词、第 3 个词。图像 patch 则来自一个网格,例如:
(1,1) (1,2) (1,3)
(2,1) (2,2) (2,3)
(3,1) (3,2) (3,3)
把这个网格按行展平以后,序列变成:
(1,1) → (1,2) → (1,3) → (2,1) → (2,2) → (2,3) → ...
这样做很方便,但也引入了一个问题:一维序列中的“相邻”不一定等于图像中的“相邻”。例如 (1,3) 和 (2,1) 在展平序列中紧挨着,空间上却可能是对角距离较远的两个 patch。
从正弦绝对位置编码到视觉位置插值
Transformer 早期常用正弦、余弦绝对位置编码:为每个位置生成一个固定向量,再加到 token embedding 上。也有模型直接学习一张位置向量表。它们都能告诉模型“这是哪个位置”,但通常需要预先决定最大序列长度或训练分辨率。
视觉模型会经常改变输入分辨率。假设 patch size 是 14:
224 × 224 图像 → 16 × 16 = 256 个 patch
336 × 336 图像 → 24 × 24 = 576 个 patch
如果位置表只为 16×16 网格学习,遇到 24×24 网格时就需要插值,或者重新定义位置参数。位置插值是一种实用办法,但它不是无条件可靠的外推机制,输入分辨率、patch 数量和训练分布变化较大时仍然需要验证。
RoPE 和 ALiBi 的共同出发点,就是尽量让位置影响注意力关系本身,而不是只在输入底部贴一张固定的位置表。
二、RoPE:把位置变成旋转角度
RoPE 的英文全称是 Rotary Position Embedding,通常译为旋转位置编码。原始论文是 Jianlin Su 等人的 RoFormer: Enhanced Transformer with Rotary Position Embedding,最初以 2021 年 arXiv 预印本公开,后发表于 Neurocomputing 568(2024),文章编号 127063,DOI 为 10.1016/j.neucom.2023.127063。
RoPE 的核心想法很简单:不要直接把位置向量加到 token 上,而是根据位置索引给 Query 和 Key 施加不同角度的旋转。
1. 把向量拆成二维小块
假设一个 attention head 的向量维度是 ,RoPE 会把它拆成 对二维子向量。每一对可以看成平面上的一个点:
(x₀, y₀), (x₁, y₁), (x₂, y₂), ...
对于位置 ,每一对向量都按照自己的频率旋转一个角度:
其中 是 token 的位置, 是第 对维度对应的旋转频率。通常会让不同维度使用不同频率:高频更敏感于近距离变化,低频更适合表达较长距离的关系。
2. 只旋转 Q 和 K
可以把 RoPE 写成:
其中 是由多个二维旋转块组成的矩阵, 不做旋转。旋转之后,Query 和 Key 的点积会携带两者角度差:
公式的具体转置方向取决于实现约定,但关键结论不变:注意力分数中自然出现了与相对位置有关的项。模型不需要额外维护一张“第 个位置和第 个位置相距多少”的查表,旋转后的 Q/K 点积会把这部分关系带进来。
3. RoPE 的优势与边界
RoPE 的优势在于:
- 位置影响发生在注意力内部,而不是只影响输入层;
- 相对位移可以通过角度差表达;
- 不需要像可学习绝对位置表那样为每个位置保存独立向量;
- 对长度变化通常比固定的绝对位置表更灵活。
但 RoPE 不是“自动无限外推”。当推理长度远超训练长度时,旋转角度会进入训练中没有见过的范围,仍可能出现退化。因此工程上还会讨论 RoPE base、频率缩放、位置插值和 NTK-aware scaling 等策略。它们改变的是旋转频率如何随位置增长,不是 RoPE 的基本机制。
三、ALiBi:直接给远距离注意力加惩罚
ALiBi 的英文全称是 Attention with Linear Biases,通常译为带线性偏置的注意力。原始论文是 Ofir Press、Noah A. Smith 和 Mike Lewis 的 Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation,于 2021 年以预印本公开,并发表于 ICLR 2022 的会议论文集,正式论文可见 OpenReview 页面。
ALiBi 不把位置向量加到词向量上,也不旋转 Q/K,而是在注意力 logits 上直接加入一个和距离成比例的偏置:
这里的 表示 attention head, 是该 head 的斜率。不同 head 使用不同斜率,形成从大到小的一组固定 bias。距离越远,分数被扣得越多;距离越近,惩罚越小。
为什么 ALiBi 有利于长度外推
ALiBi 不需要为每个绝对位置保存一张位置表。推理时序列变长,只需继续计算距离偏置,因此它在形式上没有“位置表到头了”的问题。
原论文在一个 13 亿参数模型上报告:用长度 1024 的序列训练后,ALiBi 可以外推到长度 2048,并达到与在 2048 长度上训练的正弦位置编码模型相近的困惑度;同时训练速度提高 11%,内存使用减少 11%。这些是论文实验设置下的结果,不应直接当成所有模型和硬件上的固定收益。
ALiBi 的另一个特点是“近处优先”的归纳偏置。它并不禁止模型关注远处 token,只是让远距离注意力需要更强的内容相似度才能抵消距离惩罚。
ALiBi 直接用于图像时要小心
原始 ALiBi 是一维序列方法。把图像 patch 展平后直接使用 |i-j|,得到的是“展平序列距离”,不一定是二维空间距离。对于视觉任务,需要额外决定距离怎么定义,例如:
一维展平距离:|i - j|
二维 Manhattan 距离:|rᵢ-rⱼ| + |cᵢ-cⱼ|
二维 Euclidean 距离:sqrt((rᵢ-rⱼ)² + (cᵢ-cⱼ)²)
这不是一个可以对所有模型直接复用的细节。不同视觉模型可以使用二维相对偏置、窗口内偏置或其他空间结构,不能因为它们都在 attention score 上加东西,就把它们统称为原始 ALiBi。
四、2D-RoPE:把“位置”拆成行和列
2D-RoPE 的英文全称是 2D Rotary Position Embedding。它不是一张唯一固定的标准实现,而是一类把 RoPE 扩展到二维坐标的方案。
视觉方向可以参考 Byeongho Heo 等人的 Rotary Position Embedding for Vision Transformer,发表于 ECCV 2024。论文系统研究了 RoPE 在 2D vision data 上的实现,并提出、比较了 RoPE-Axial 与 RoPE-Mixed 等变体,报告了在提高推理分辨率时保持精度以及在 ImageNet-1K、COCO 检测和 ADE20K 分割上的实验结果;作者还公开了 NAVER AI Lab 的官方实现。
2D-RoPE 的基本做法
把 patch 的位置写成:
其中 是行号, 是列号。然后把 head 的通道拆成两部分:一部分使用行号旋转,另一部分使用列号旋转:
q = [q_row | q_col]
k = [k_row | k_col]
q_row' = Rotate(q_row, row_id)
q_col' = Rotate(q_col, col_id)
k_row' = Rotate(k_row, row_id)
k_col' = Rotate(k_col, col_id)
于是两个 patch 的注意力关系可以同时感知:
- 行方向相差多少;
- 列方向相差多少;
- 是否处在同一行或同一列;
- 两者的空间相对位移是否稳定。
需要注意,“前一半维度负责行、后一半维度负责列”只是常见的解释方式,具体实现还可能交错分配频率、改变轴顺序或使用 axial/mixed 结构。阅读代码时,应该以模型的 position-id 构造和 frequency layout 为准。
一处容易混淆的文献边界
你给出的素材还提到 Haodong Wen 等人在 2026 年发表的 Frontier Language Models Struggle to Copy: Text Can Be Better Viewed in 2D。这项工作提出了面向文本复制任务的 2D-RoPE:用换行符作为行分隔,让 token 拥有 (row ID, column ID) 两个位置坐标。
目前公开记录显示,这篇文章的正式公开版本是 2026 年 7 月 17 日提交的 arXiv:2607.16072 预印本。它与视觉 2D-RoPE 的共同点是二维坐标和双轴相对位置,但它研究的是文本的复制与长度泛化,不应直接写成已经确认的“ICML 2026 主会论文”。
这篇工作对视觉的启发很直观:如果任务本身存在二维结构,强行把它压成一条线,模型就需要额外学习“这一维序列如何对应二维关系”;直接提供结构化坐标,可能让检索关系更容易学习。
五、用一个 3×3 patch 网格理解三种方案
假设图像被切成 3×3 共 9 个 patch。
绝对位置编码看到什么
绝对位置编码可以给 9 个 patch 分别加上 9 个位置向量。模型知道 (1,2) 和 (2,2) 是不同位置,但“它们在同一列、只差一行”通常需要模型从位置向量之间的统计关系中学习出来。
如果换成另一种展平顺序,或者输入分辨率改变导致网格变大,原有位置表还需要插值或重新适配。
RoPE 看到什么
一维 RoPE 作用在展平后的 token 索引上。它能用角度差表达序列中的相对位置,因此通常比单纯的绝对位置表更灵活。但如果仍然只使用一个一维索引,那么它表达的“距离”首先还是展平序列距离。
2D-RoPE 看到什么
2D-RoPE 给每个 patch 一个 (row, column) 坐标。(1,2) 和 (1,3) 的行坐标相同、列坐标相差 1;(1,3) 和 (2,1) 的列坐标相差 2、行坐标相差 1。模型可以在注意力关系中区分“同一行左右移动”和“换行后跨列移动”。
这不等于模型自动拥有了完整的几何理解能力。位置编码只提供坐标和相对关系的归纳偏置,物体边界、深度、遮挡和语义仍然需要通过视觉特征与训练数据学习。
六、多模态模型:从 2D 位置走向 T/H/W
图像进入视觉语言模型后,视觉 token 会和文本 token 混在同一个上下文里。此时需要同时处理:
- 文本 token 的一维序列位置;
- 图像 token 的高度、宽度位置;
- 视频 token 的时间、高度、宽度位置;
- 多张图像在上下文中的先后关系。
Qwen2-VL 的 M-RoPE
Qwen2-VL 在 Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution 中引入了 M-RoPE(Multimodal Rotary Position Embedding,多模态旋转位置编码),把位置设计扩展到文本、图像和视频的多模态输入。可以把它粗略理解为:
文本: 1D position
图像: height + width
视频: time + height + width
这里的关键不只是“把 RoPE 维度加到 3 个”,而是如何为不同模态构造 position IDs,并让它们在拼接后的上下文中保持一致。视觉 token 的数量还可能随原始分辨率变化,因此多模态位置编码通常会和动态分辨率策略一起设计。
V2PE:不只改变编码函数,也改变位置增长速度
V2PE 的英文全称是 Variable Visual Position Encoding。Junqi Ge 等人的 V2PE: Improving Multimodal Long-Context Capability of Vision-Language Models with Variable Visual Position Encoding 发表于 ICCV 2025。
它观察到:如果文本 token 和视觉 token 都统一按 1 递增,视觉 token 数量一多,position ID 会很快增长到训练时没有覆盖的范围。V2PE 的思路是对视觉 token 使用更小的增量 ,文本 token 仍保持常规增量,从而降低视觉内容消耗位置范围的速度。
论文报告,在其训练与评测设置中,使用 256K 训练序列的 InternVL2-V2PE 模型可以处理最长 1M token 的多模态序列。这个结果依赖论文的数据、模型和训练配置,不能理解为任意 VLM 加一个 就能获得同样的上下文长度。
V2PE 与 2D-RoPE 解决的问题不完全相同:2D-RoPE 重点是让 token 拥有行列结构;V2PE 重点是让视觉 token 在长多模态序列里以更慢的速度消耗位置索引。两者可以被放在同一套多模态位置设计中讨论,但不能混写成同一个方法。
七、视觉位置编码的工程坑
1. 分辨率变了,patch 网格也变了
从 224 分辨率切到 336 分辨率,patch 数量可能从 14×14 变成 21×21;如果 patch size 是 14,则会从 16×16 变成 24×24。绝对位置表需要插值,2D RoPE 则要重新构造行列坐标和频率,ALiBi 也要重新确认二维距离定义。
“输入尺寸可以变”不代表“位置编码不需要处理”。需要同时检查:
- patch size 是否固定;
- CLS token 或 register token 是否占用了特殊位置;
- H/W 坐标是否从 0 开始;
- padding 和裁剪后的有效区域怎么编号;
- 多张图像拼接时是否重置坐标;
- 图像与视频的时间坐标是否按帧率或帧序号构造。
2. 频率分配决定了 RoPE 能看多远
RoPE 不是只写一个旋转函数就结束。频率基底、最大位置、坐标缩放和插值策略都会影响模型对近距离与远距离关系的表达。如果频率增长过快,远位置可能出现周期折叠;如果缩放过强,局部位置差异又可能变得不明显。
视觉 RoPE 的实现通常还要回答:
- 行、列是否各占一半维度;
- 频率是 axial 还是 mixed;
- 高度和宽度是否使用相同的 base;
- 非方形图像是否做宽高比适配;
- 分辨率外推时是否沿两个轴分别缩放。
这些决定了“2D-RoPE”在具体代码里到底是什么,而不是由名字自动决定。
3. ALiBi 的距离不是只有一种
对于图像 patch,|i-j| 是展平距离,|rᵢ-rⱼ|+|cᵢ-cⱼ| 是 Manhattan 距离,欧氏距离又是另一种归纳偏置。窗口注意力、稀疏注意力和全局注意力也会改变可见 token 集合。
因此,ALiBi 的“距离越远惩罚越大”只是机制层面的概括。实际模型还要验证它是否把有用的远距离关系误判成噪声,特别是在需要跨区域匹配的检测、文档理解和视觉问答任务中。
4. 位置编码不是语义理解的替代品
位置编码可以告诉模型“两个 patch 在哪里”,但不能单独告诉模型“这里是一只猫的耳朵”或“这个物体被另一个物体挡住了”。如果训练数据没有覆盖足够的视角、尺度和遮挡变化,换一个位置编码也不会自动解决视觉泛化问题。
八、怎么选:从任务的空间结构出发
| 需求 | 可优先考虑 | 理由 |
|---|---|---|
| 固定分辨率、实现简单 | 学习式绝对位置编码 | 结构直观,基线成熟 |
| 需要相对位置、希望减少位置表依赖 | RoPE | 相对关系进入 Q/K 点积 |
| 主要关心长度外推、希望额外参数少 | ALiBi | 直接对注意力距离加偏置 |
| 图像 patch 的二维空间关系重要 | 2D-RoPE / 2D 相对偏置 | 行列结构比一维展平更直接 |
| 文本、图像、视频统一输入 | M-RoPE 一类多模态方案 | 可分别表示 1D、2D 和 3D 位置 |
| 超长多模态上下文中视觉 token 很多 | V2PE 一类可变位置策略 | 控制视觉 token 消耗位置范围的速度 |
一个实用的决策顺序是:
先确定 token 来自什么结构
↓
文本:1D;图像:2D;视频:T/H/W
↓
再确定模型需要什么归纳偏置
↓
长度外推、空间局部性、跨区域检索、动态分辨率
↓
最后选择 APE、RoPE、ALiBi、2D-RoPE 或多模态扩展
如果只是把一维语言模型接到视觉编码器后面,直接沿用文本位置递增可能很方便,但不一定是最合适的视觉位置方案。相反,使用 2D-RoPE 也不是“加上行列坐标就必然更好”,它仍然需要和视觉 patch 化方式、训练分辨率、注意力结构和数据分布一起评估。
总结
视觉位置编码要解决的核心问题只有一句话:让模型知道 token 在哪里,以及两个 token 之间如何相对移动。
- RoPE 把位置变成 Q/K 的旋转角度,让相对位置进入注意力点积;
- ALiBi 直接给注意力分数加距离偏置,用简单的归纳偏置帮助长度外推;
- 2D-RoPE 把位置拆成行和列,让图像 patch 的二维结构进入注意力;
- M-RoPE 把时间、高度、宽度纳入多模态位置系统;
- V2PE 则从位置增量的角度,缓解视觉 token 在长上下文中快速消耗位置范围的问题。
真正该问的不是“哪种位置编码最先进”,而是:我的 token 来自一条序列、一张网格,还是一段时空序列?任务更需要长度外推、局部邻近,还是跨区域检索? 位置编码的选择,本质上是在给模型设计一套更适合任务结构的坐标系。
参考资料
- RoFormer: Enhanced Transformer with Rotary Position Embedding
- RoFormer 的 Neurocomputing 版本 DOI
- Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation
- ALiBi 的 ICLR 2022 OpenReview 页面
- Rotary Position Embedding for Vision Transformer
- RoPE-ViT 官方实现
- Frontier Language Models Struggle to Copy: Text Can Be Better Viewed in 2D
- Qwen2-VL: Enhancing Vision-Language Model’s Perception of the World at Any Resolution
- V2PE: Improving Multimodal Long-Context Capability of Vision-Language Models with Variable Visual Position Encoding
- What DINO saw: ALiBi positional encoding reduces positional bias in Vision Transformers