长上下文技术演进:从位置编码到环形注意力
从GPT-3的2K上下文到Gemini 2.5的10M上下文,长上下文技术是大模型领域进步最快的方向之一。2026年,百万级token的上下文窗口已成为旗舰模型的标配。本文将系统梳理这一技术演进的核心脉络。 1. 位置编码的演进 1.1 绝对位置编码的局限 原始Transformer使用可学习的绝对位置编码,最大长度在训练时固定。外推到更长序列时效果急剧下降。 1.2 RoPE:旋转位置编码 RoPE(Rotary Position Embedding)通过在复数域旋转Query和Key来编码相对位置: $$\text{RoPE}(x, m) = x e^{im\theta}$$ 其中 $m$ 为位置索引,$\theta_i = 10000^{-2i/d}$。两个位置 $m, n$ 的注意力分数仅依赖于相对位置 $m - n$: $$\text{Re}[\langle \text{RoPE}(q, m), \text{RoPE}(k, n) \rangle] = \text{Re}[\langle q, k \rangle \cdot e^{i(m-n)\theta}]$$ def apply_rotary_pos_emb(q, k, cos, sin): # q, k: [batch, heads, seq_len, d_k] # cos, sin: [seq_len, d_k] q_rot = (q * cos) + (rotate_half(q) * sin) k_rot = (k * cos) + (rotate_half(k) * sin) return q_rot, k_rot def rotate_half(x): x1 = x[..., :x.shape[-1] // 2] x2 = x[..., x.shape[-1] // 2:] return torch.cat((-x2, x1), dim=-1) 1.3 RoPE外推方案 训练时上下文长度为 $L_{train}$,推理时需要扩展到 $L_{test}$。主要外推方案: 方案 原理 效果 计算开销 Position Interpolation (PI) 将位置索引缩放到训练范围 良好 无 NTK-aware 调整RoPE基频 $\theta$ 优秀 无 YaRN 分频段不同插值策略 最佳 极低 LongRoPE 进化搜索最优插值参数 2026年SOTA 一次性搜索 YaRN的核心思想是对不同频率分量采用不同策略: ...