位置编码:绝对 vs 相对 vs RoPE

Self-Attention 本身是排列不变的(permutation invariant),即打乱输入顺序不影响输出。需要额外注入位置信息——这就是位置编码的使命。

正弦位置编码(绝对位置编码)

原始 Transformer 使用的正弦位置编码(Sinusoidal Positional Encoding):

PE(pos, 2i)   = sin(pos / 10000^(2i/d_model))
PE(pos, 2i+1) = cos(pos / 10000^(2i/d_model))

特点:

  • 偶数维度用 sin,奇数维度用 cos
  • 不同频率的正弦/余弦组合可以编码任意位置
  • 理论上能泛化到训练时未见过的序列长度
  • 注入方式:加法(PE + Embedding)

可学习绝对位置编码

BERT 和 GPT-2 使用可学习的位置嵌入:

Input = Token Embedding + Learned Position Embedding
  • 每个位置有一个可训练的向量
  • 简单直接,但无法泛化到训练时未见过的长度

旋转位置编码 (RoPE)

现代 LLM(LLaMA、Qwen 等)普遍使用 RoPE(Rotary Position Embedding):

核心思想:将位置信息编码为旋转角度,通过旋转 Q/K 向量来注入位置信息。

特性正弦编码可学习编码RoPE
注入方式加法加法旋转(修改 Q/K 向量)
远距离衰减天然衰减
外推能力有限无法外推通过 NTK-aware 插值可扩展
参数开销需要位置嵌入参数无额外参数
使用模型原始 Transformer、BERTBERT、GPT-2LLaMA、GPT-NeoX、Qwen

RoPE 的优势

  1. 相对位置感知:通过旋转角度差来编码相对位置,天然支持相对位置
  2. 远程衰减:远距离 token 的注意力分数自然衰减,符合直觉
  3. 外推能力:通过 NTK-aware 插值或 YaRN 可以扩展到更长上下文
  4. 无额外参数:不需要学习位置嵌入向量

RoPE 在长上下文中的应用

技术说明效果
NTK-aware 插值修改 RoPE 的 base frequency平滑扩展上下文长度
YaRN结合 NTK 和注意力缩放支持 128K+ 上下文
Dynamic NTK根据实际序列长度动态调整灵活适配不同长度

▶ 对应实操:04-Embedding向量化原理+语义搜索场景

速记卡(面试闪卡)

Q1:一句话讲清「位置编码:绝对 vs 相对 vs RoPE」到底是什么? A:Self-Attention 是排列不变的,需要位置编码注入顺序;RoPE 用旋转 Q/K 成现代 LLM 标配。

Q2:为什么需要位置编码 —— 怎么理解? A:像一群人站排拍照却闭眼打乱:Self-Attention 天生”排列不变”,打乱顺序输出不变,模型根本不知道谁在前谁在后。必须额外注入位置信息,它才分得清”我爱你”和”你爱我”。

Q3:正弦 / 可学习绝对位置编码 —— 怎么理解? A:像给座位贴固定编号:正弦编码用 sin/cos 按位置算向量(能泛化未见长度但有加法噪声);BERT/GPT-2 用可学习位置嵌入(简单直接,但训练没见过的长序列就傻眼,无法外推)。

Q4:RoPE 旋转位置编码 —— 怎么理解? A:像把位置拧进向量本身:RoPE 把位置编码成旋转角度,旋转 Q/K 向量注入位置。天然感知相对位置、远距离注意力自动衰减、无额外参数,还能靠 NTK-aware 插值/YaRN 扩到 128K+ 长上下文——LLaMA/Qwen 标配。

Q5:RoPE 长上下文扩展 —— 怎么理解? A:像调焦距适配更宽画幅:NTK-aware 插值改 RoPE 的 base frequency 平滑扩展长度;YaRN 结合 NTK+注意力缩放支持 128K+;Dynamic NTK 按实际序列长度动态调整,灵活适配不同长度不掉链。

Q6:核心速记主线有哪些?

  • 动机:Self-Attention 排列不变,必须注入位置
  • 绝对编码:正弦(可泛化) vs 可学习(不能外推)
  • RoPE 优势:相对感知 / 远程衰减 / 无参数 / 可外推
  • 长上下文:NTK-aware / YaRN / Dynamic NTK 三招

口诀 A:注意力本无先后,位置编码来相救; 正弦可学皆绝对,外推乏力常露丑; RoPE旋转入向量,相对衰减自然秀; NTK配YaRN齐施,长上下文任遨游。

相关链接


快速问答

问题参考答案
RoPE 相比绝对位置编码的优势?RoPE 将位置信息编码为旋转角度,天然具有相对位置感知能力,且通过 NTK-aware 插值可以扩展到更长上下文
为什么 Transformer 需要位置编码?Self-Attention 是排列不变的(permutation invariant),打乱输入顺序不影响输出。需要额外注入位置信息让模型知道 token 的顺序
RoPE 如何实现长上下文扩展?通过 NTK-aware 插值、YaRN 等技术修改 RoPE 的 base frequency,实现平滑的上下文长度扩展

相关链接