前面 19 篇把位置编码的机理拆完了,这篇做收口:给定项目约束,怎么推出方案。选型不是查喜好,是走一棵决策树。
决策树
第一层:从头预训练,还是给现成模型扩展? 这一步砍掉一半选项。ALiBi、NoPE、任意自定义频率的 RoPE——凡是改动打分函数结构或频率分布的方案,对已有 checkpoint 都是破坏性的(权重里固化了旧位置先验),只有从头训才可选。微调现有模型只剩一条路:保持原 RoPE,用缩放类方法扩长度(YaRN 首选,NTK 兜底,理由见第 5080 篇)。
第二层(从头训):上下文需求多大? 常规 4k~8k:RoPE 是默认解——不是因为它最优,而是生态:FlashAttention kernel、vLLM、各家微调框架的位置接口全是 RoPE 优先,省下的工程时间比理论上的微小增益值钱。目标是 32k+ 的长上下文 LM:两条路——ALiBi(解析外推,长 LM 有成功先例,实现最简)或 RoPE + 分阶段长度课程(4k → 32k → 128k,末期提高长序列数据占比)。前者省事,后者上限高且多模态兼容好。
第三层(任务形态)。 多模态(图像/视频 patch):2D-RoPE 及其变体(第 5120 篇),轴向或复数形式按编码器选。agent / 工具调用为主、上下文其实不长:任何方案都行,把时间花在别处。RAG 为主:注意检索块在上下文中的位置编排比 PE 选择更影响效果(Lost in the Middle,第 5190 篇)。
第四层:推理侧的硬约束。 KV cache 预算是这里的主角。显存吃紧:滑窗层 + 全局层交替(Gemma 2 / Mistral 模式),滑窗层用 RoPE 天然支持安全淘汰(第 5160 篇);极限压缩:MLA + 解耦 RoPE(第 5170 篇),cache 降两个数量级,代价是训练侧复杂度和生态绑定。流式输出(TTFT 敏感):RoPE/ALiBi 的位置计算都是增量的,无额外重算,天然友好。
决策表
| 约束组合 | 推荐 | 依据 |
|---|---|---|
| 微调现有模型 + 扩长 | YaRN(NTK 兜底) | 不改结构,只需少量长文继续训练(第 5080 篇) |
| 从头训 + ≤8k | RoPE,基频 10000 | 生态默认,实现零风险(第 5010、5070 篇) |
| 从头训 + ≥32k LM | ALiBi 或 RoPE + 长度课程 | 解析外推 vs 上限更高的对赌(第 5050、5190 篇) |
| 多模态 | 2D-RoPE | 位置天然二维(第 5120 篇) |
| cache 极限压缩 | MLA + 解耦 RoPE | $d_c + d_r$ 维/token(第 5170 篇) |
| 流式长输入 | 滑窗 + 全局交替,RoPE 全局坐标 | 淘汰安全性与坐标系纪律(第 5160 篇) |
| 消融研究 | NoPE 或混合 NoPE | 量化位置信息冗余度(第 5130 篇) |
三个常见反模式
为理论增益换生态。 论文里某个 PE 方案比 RoPE 好 1% 的有效长度,落地要换掉整条 kernel / 推理链——多数项目该把这 1% 让出去。
只看 PPL 验收扩长。 前面说过(第 5150、5190 篇),PPL 对寻址失效不敏感。验收清单必须带检索类任务和位置敏感任务。
混用坐标系。 只要定了 RoPE,全系统(训练、微调、量化部署、流式切块)必须共用同一套位置下标约定;这类 bug 不报错、只掉点,排查最贵。
小结
位置编码选型的本质是给四个约束(训练起点、长度目标、任务形态、推理预算)找交点。这个领域多年没有颠覆 RoPE 的方案,说明设计空间在"频率分配"层面已近收敛——新工作都在边角(2D、解耦、非均匀),主干决策反而越来越简单。