精选·模型与微调基础

位置编码的演进:从正弦编码到 RoPE,以及长上下文扩展

91学AI·2026/7/13·7 阅读

考察点

位置编码是区分「用过模型」和「懂模型」的分水岭。面试官想听:为什么注意力本身没有位置概念、RoPE 相对绝对位置编码强在哪、为什么 RoPE 天然适合长度外推以及外推不够时怎么办。追问常落在 NTK 插值、长上下文实战问题。

参考答案

为什么需要位置编码

自注意力的计算对输入序列是置换不变的:把 token 顺序打乱,只要 Q/K/V 跟着一起换,算出来的注意力分数一模一样。但语言里「狗咬人」和「人咬狗」意思天差地别,所以必须显式告诉模型每个 token 在什么位置。这就是位置编码存在的理由——补上注意力机制自己缺失的次序感。

三代方案的演进

第一代是正弦绝对位置编码,原始 Transformer 论文的方案:用不同频率的 sin/cos 函数直接生成每个位置的向量,加到 embedding 上。好处是不用学、理论上能外推到训练没见过的长度;坏处是位置信息和语义信息简单相加,耦合得比较生硬。

第二代是可学习位置编码,给每个位置一个可训练向量,BERT 和早期 GPT 用这个。表达更灵活,但表有多长就编码多长,超出训练长度的位置没有参数,外推能力为零。

第三代就是 RoPE(旋转位置编码),LLaMA、Qwen 等主流模型清一色用它,思路换了赛道:不给 token 加位置向量,而是改 Q 和 K。把 Q、K 的向量按两个维度一组切成若干对,每对看作一个二维平面,然后根据 token 的位置 m,把这个二维向量旋转 m·θ 度(不同维度对的 θ 不同,类似正弦编码的多频率设计)。

妙处在于数学性质:旋转后的 Q_m 和 K_n 做点积,结果只依赖相对距离 m-n,与绝对位置无关。也就是说模型学到的不是「第 5 个位置关注第 3 个位置」,而是「往前看 2 个位置」——这正是语言该有的规律,语序模式可以平移复用。同时 RoPE 带有远程衰减性质:距离越远,旋转带来的平均相关性越弱,和「邻近 token 通常更相关」的语言直觉吻合。

长上下文扩展:RoPE 的工程战场

RoPE 训练时见过的最大位置就是模型的上下文上限,超出后旋转角度落在没训练过的区域,输出质量断崖式下跌。围绕这个痛点有一整套工程手段:

  • 位置插值(Position Interpolation):把位置索引线性压缩。比如训练时 4K,推理时把 8K 序列的位置都除以 2,全挤进训练见过的范围。改动小,但压缩会模糊邻近位置的分辨率。
  • NTK-aware 插值:不线性压缩,而是调大 RoPE 的 base(旋转基频),对高频维度少压、低频维度多压,保留局部分辨率。主流推理框架都内置支持,改个 rope_scaling 配置就能扩。
  • YaRN 等改进方案:按维度分段做不同程度的插值,配合少量长文本微调,是目前扩到 128K 及更长的常用路线。

应用工程师该记住的两点

一是扩上下文不等于免费用:窗口翻倍,KV Cache 显存和注意力计算都涨,延迟和成本先扛不住的是你的服务而不是模型。二是「能塞进去」不等于「用得好」:长上下文中间位置的信息容易被模型忽略(lost in the middle 现象),关键内容放开头或结尾比塞中间可靠,这是 prompt 排版的实战常识。

可能的追问

  • RoPE 为什么要按维度对不同频率旋转?和正弦编码同理:高频维度捕捉近距离的精细位置差,低频维度表达长距离的粗粒度位置,多频率组合才能覆盖各种距离模式。
  • 相对位置编码还有别的实现吗?ALiBi 直接在注意力分数上按距离加线性惩罚,实现极简、外推性好,BLOOM 等模型用过;RoPE 胜在效果上限和生态。
  • 微调一个 4K 模型到 32K 上下文怎么做?先用 NTK/YaRN 类方法扩位置编码,再用长文本语料做继续训练或微调,只改配置不续训的话长程能力通常不可靠。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.