Day 16 · 位置编码演进
位置编码演进:从正弦波、RoPE 到 K3 的 NoPE
Day 12 我们讲过,2017 原版用正弦波加法把位置注入词嵌入。但在过去十年里,这个设计经历了彻底的洗礼:先是苏剑林提出的 RoPE(旋转位置编码)凭借「内积只看相对距离」的优雅设计成为开源模型的主流选择(LLaMA/Mistral/Qwen),而在 2026 年的 Kimi K3 中,架构师们做出了一个更大胆的举动——直接砍掉显式位置编码,拥抱 NoPE!
学完你能回答
为什么 2017 正弦加法被 RoPE 淘汰了?
学完你能回答
RoPE 是怎么把位置变成向量旋转角度的?
学完你能回答
K3 的 NoPE 是如何做到「外推不必改编码」的?
1 起点:这些你早就会了
位置编码的十年演进,从「贴标签」走向了「相对夹角」与「隐式遗忘」:
你已经会的 AI 世界里对应的东西
在衣服上贴门牌号:洗几次衣服标签就磨损模糊了 2017 加法正弦编码 :加在最底层 Embedding 上,随网络加深被反复稀释
电影院按排号入座:第几排第几座是写死的绝对编号 绝对位置编码 :每个位置一个固定编号,不管周围坐的是谁
表盘指针旋转:两根指针的夹角只取决于时间差 RoPE(旋转位置编码) :直接把 Q 和 K 旋转与位置成正比的角度,内积只依赖相对距离
长途旅程里程碑:到了 100 万公里,原版仪表盘指针爆表 长上下文外推困境 :RoPE 超出训练长度时需要复杂的频率基数缩放(NTK / YaRN——两种给旋转角打补丁的办法,知道名字即可)
随时间自然遗忘:不用看钟表,凭日落与记忆衰减就能感知前后 NoPE(无显式编码) :依靠因果掩码与注意力衰减门自然表达相对顺序
2 RoPE(旋转位置编码):复数旋转的数学之美
2021 年,中国研究者苏剑林在 RoFormer 论文中提出了 RoPE(Rotary Position Embedding) 。它的核心哲学是:不要把位置硬加在词向量上,而是在计算注意力内积时,把 Query 和 Key 旋转一个与位置成正比的角度!
RoPE 的复数旋转公式
将 2 维子向量视作复数,位置 m 处的 Q、位置 n 处的 K 各自旋转:
q̃_m = q_m·e^(imθ),k̃_n = k_n·e^(inθ)
计算点积内积时,两个旋转角自然相减:
⟨q̃_m, k̃_n⟩ = Re(q_m·k_n*·e^(i(m−n)θ))
奇迹发生了 :经过旋转后的点积,其数值严格只取决于两个 token 的相对距离 m − n !绝对位置 m 和 n 在内积中被完全消掉了!
核心类比
RoPE 就像钟表表盘:每个位置是一根指针转过的角度。两根指针的夹角 只取决于「时间差」,跟现在是几点无关——位置 m 的 Q 和位置 n 的 K 各自旋转之后,内积里留下的只有相对距离 m − n。
严格来说 :单根指针转满一圈会重合,分不清「差 1 格」和「差一整圈」;RoPE 实际用的是一组频率各不相同的多维旋转(不同维度转得有快有慢),靠快慢搭配来区分很远的距离,不会像单根指针那样周期混淆。
RoPE 旋转位置编码原理:内积只取决于相对夹角 (m-n)θ
位置 m 处的 Q 旋转 mθ,位置 n 处的 K 旋转 nθ,两者内积仅与夹角差 (m-n)θ 相关
RoPE(旋转位置编码)在二维平面上的几何直觉
Qₘ (转 mθ)
Kₙ (转 nθ)
夹角 = (m - n)θ
三大压倒性优势:
1. 天然实现纯相对距离感知;
2. 作用于每一层的 Q/K,不被深层稀释;
3. 远程优雅衰减(Long-term decay)。
图 16.1:RoPE 的复数旋转几何。 通过旋转矩阵将绝对位置映射为相位角,内积时自然相减留下相对间距。
3 超长上下文的挑战与 K3 的 NoPE 选择
RoPE 虽好,但在上下文扩展到 128K、100 万 token 时,依然面临一个棘手的难题:位置外推(Extrapolation) 。当测试长度超出训练范围时,高频与低频旋转角发生分布偏移,需要通过 NTK-Aware 插值、YaRN 等手段苦苦修正频率基数(这些「补丁」技术知道名字即可,正文不展开)。
Kimi K3 的终极大招:NoPE(No Positional Encoding)
在《Kimi K3 技术报告》§2.1.2 和 §3.4 中,K3 团队做出了一个大胆的决定:完全移除显式位置编码(NoPE)!
为什么可以不要位置编码?
1. 因果掩码天生破除对称性 :在 Decoder-only 架构中,第 1 个 token 只能看自己,第 100 个 token 能看前 100 个 token——因果三角掩码本身就已经天然注入了绝对的不对称顺序!
2. KDA 遗忘门的天然衰减 :K3 的线性注意力分支(KDA,Day 19 讲)自带逐通道衰减门 α_t,随距离天然指数衰减,隐式提供了强大的局部与相对位置偏置。
最大好处 :模型外推到 100 万 token 时,根本不需要对位置编码做任何复杂的缩放修改 ,从根源上消除了长文本位置外推崩溃的隐患!
进阶小注 · K3 中 NoPE 的精准分工:
K3 并没有在全模型一刀切地取消位置感知。报告 §2.1.2 的分工是:对所有 MLA 层 (门控多头潜注意力,Day 18 讲)应用 NoPE——查询和键都不加任何显式位置编码;而间隔其中的 KDA 层 (线性注意力,Day 19 讲)自带逐通道衰减,天然提供位置敏感、近因感知的序列混合。位置信息由 KDA 侧隐式补齐,MLA 侧专心做全局内容交互,各取所长。
4 面试视角
面试视角 · 高频考点
面试官可能会问:「从 2017 正弦位置编码、RoPE 到 NoPE,位置编码经历了怎样的技术演进?为什么 Kimi K3 可以采用 NoPE?」
八股答 「2017 是绝对位置相加,后来 RoPE 用旋转矩阵把绝对位置变成相对位置内积,效果最好。K3 用的 NoPE 是不用显式位置编码,依靠因果掩码和衰减自发学习位置,适合超长上下文。」——脉络清晰,若能点出外推优势就更深刻。
本课答 「核心是三个阶段的哲学跃迁:① 绝对加法(2017 正弦) :在输入层将绝对坐标加到 Embedding,在深层容易被稀释,且两两内积会产生交叉杂项,长度泛化差;② 相对旋转(RoPE) :在每一层注意力计算时将 Q 和 K 乘以旋转矩阵,使点积结果严格仅由相对位移 (m−n)θ 决定,兼具相对位置表达与远程衰减;③ 隐式归一(NoPE) :在大规模长上下文(100万+ token)下,RoPE 的高低频插值外推(如 YaRN/NTK)工程复杂度高且易损伤短文本注意力;K3 依托 Decoder-only 因果掩码的不对称性,配合 KDA 遗忘门的物理时序衰减,实现了无显式编码的位置感知,使长序列外推彻底免去了位置基数调整。」
5 映射到原文:K3 报告 §2.1.2 与 §3.4
技术报告原文对照 · 《Kimi K3 技术报告》§2.1.2 Gated MLA
「Kimi K3 沿用 Kimi Linear 的混合设计,对所有 MLA 层应用 No Position Encoding(NoPE),即不为其查询或键施加任何显式位置编码。间隔其中的 KDA 层提供位置敏感、具有近因感知的序列混合,而 MLA 层提供不受限制的全局内容交互。」
逐词翻译:
「对所有 MLA 层应用 NoPE」 :今天的主角。Gated MLA 全局注意力层(Day 18 讲)一律不加任何显式位置编码——没有正弦波,也没有 RoPE 旋转。
「KDA 层提供位置敏感、近因感知的序列混合」 :位置信息没有丢,而是由 KDA 层(Day 19 讲)用自带的衰减门隐式补上——越近的 token 影响越大,顺序感天然存在。
「不受限制的全局内容交互」 :卸下位置包袱后,MLA 层专心干一件事——让任意两个 token 直接对话。
报告紧接着还有一句,正是第 3 节那个「最大好处」的原文出处:「这种分工还避免了在扩展上下文长度时修改位置编码参数,例如重新调整 RoPE 频率基值或应用 YaRN。」
0
NoPE 长文本外推需调整的位置编码参数量(示意)
6 自测题(先自己答,再点开看解析)
Q1 为什么 RoPE 的内积只依赖于相对距离 m − n?
解析: 因为复数乘法的性质:e^(imθ) · (e^(inθ))* = e^(i(m−n)θ)。求共轭相乘后,绝对坐标 m 和 n 相减,仅剩下相对相位差 (m−n)θ。
Q2 RoPE 是作用在 Embedding 层,还是作用在注意力的 Q 和 K 上?
解析: 作用在每一层计算注意力之前的 Q 和 K 上。V 不需要旋转。
Q3 当上下文从 4K 扩到 128K 时,RoPE 面临什么困难?
解析: 面临未见过的超大位置角度导致的分布外(OOD)外推崩溃,必须采用 NTK-Aware、YaRN 等复杂的频率基数插值方法进行动态缩放。
Q4 为什么说因果掩码本身就带有「位置信息」?
解析: 因为每个 token 能看到的历史前缀长度是不相等的:第 1 个 token 只能看 1 个 token,第 100 个 token 能看 100 个 token。下三角结构天然打破了置换不变性。
Q5 用一句话说清 K3 采用 NoPE 的最大收益。
解析: 在上下文渐进扩展到 100 万 token 时,彻底摆脱了显式位置编码的频率缩放难题,外推不必修改任何编码配置。
明天 · Day 17KV Cache:大模型推理的显存杀手 为什么问 AI 一个问题,显存会被前文疯狂吃爆?大模型推理真正的瓶颈为什么不是算力而是显存带宽?
进入 Day 17 →