位置编码存在的理由是:自注意力的打分函数 $a_{ij} = q_i^\top k_j / \sqrt{d}$ 对下标 $i,j$ 完全对称——把输入序列任意置换,softmax 归一化后每个 query 看到的仍是同一组 key/value,注意力对顺序天然盲。这个论证听起来无懈可击,但 2023 年 Kazemnejad 等人(NoPE,arXiv:2305.19466)做了个让 PE 显得多余的实验:把所有位置编码删掉,模型在多数下游任务上居然还能训出非平凡性能。问题出在哪?出在这个论证漏掉了 causal mask。
causal mask 是下标相关的
decoder-only 模型的注意力带下三角掩码:
$$ a_{ij} = \begin{cases} q_i^\top k_j / \sqrt{d}, & j \le i \\ -\infty, & j > i \end{cases} \quad\Longrightarrow\quad \mathrm{Attn}_i = \sum_{j \le i} \mathrm{softmax}_j\big(q_i^\top k_j / \sqrt{d}\big)\, v_j . $$
打分本身不含位置,但求和域 $\{j : j \le i\}$ 是 $i$ 的函数。位置 $i$ 的 token 恰好能看到 $i$ 个 value,这个"可见数量"就是位置的一种粗粒度编码。换句话说,置换论证在带掩码的注意力上不成立:注意力对可见集合内的 token 是置换不变的,但可见集合本身随位置单调膨胀,顺序信息从掩码的结构里渗了进来。
这就是 NoPE 能工作的全部机制。模型能用注意力分布的"宽度"反推出自己大概处在序列的什么位置,也能利用内容统计自带的顺序性——自然语言的 n-gram 分布本身强烈依赖顺序,embedding 层从训练中就浸染了这种偏置。
但"前缀长度"是很差的位置编码
把 NoPE 的位置能力刻画清楚,就能预测它的失效模式。位置信息经掩码进入模型的唯一通道是前缀长度 $i$,这带来三个硬限制:
没有绝对坐标。 两个相隔很远的 query,只要内容统计相似,模型没有任何机制知道各自的绝对下标。NoPE 论文的分类实验印证:凡是需要绝对定位的任务("序列的第 $k$ 个 token 是什么"这类),NoPE 表现接近随机。
没有精确相对距离。 相对距离 $i-j$ 只能通过可见集合的差异间接推断,分辨率极差。拷贝任务里要求复现 $k$ 步之前的 token,NoPE 在 $k$ 稍大时就崩——因为它区分不了"前一个"和"前十几个"。
外推照样失败。 一个常见的误读是"NoPE 天然外推"。不对:超过训练长度后,前缀长度信号本身超出了训练分布,加上 attention sink 统计的漂移,困惑度同样劣化。NoPE 论文报告的是任务分数的保持,不是长度外推的免费午餐。
为什么 attention sink 在 NoPE 里更重要
NoPE 模型里 attention sink(softmax 质量向少数几个 token 集中的现象,见第 4170 篇)承担了额外的结构功能:第一个 token 是全序列唯一恒定可见的锚点,所有位置的注意力都以它为参照系来组织。把它从输入里拿掉,NoPE 的性能下降比普通模型更狠——位置参照系没了。
这个观察反过来解释了混合架构的出现:Gemma 2 在部分层干脆用 NoPE(这些层靠残差流和 sink 维持足够的顺序感知),把省下的位置计算让给其他层;一些 Mamba 混合类流式架构也采用"少数全局层给位置、多数层不要位置"的分工。
小结
NoPE 实验的价值不是证明位置编码没用,而是圈出了位置信息的真实来源谱系:内容统计、causal mask 的可见集合、attention sink 的参照系,这三者在任何 decoder-only 模型里都携带部分顺序信息,显式 PE 只是把其中某一支做得更精确、更可控。做消融实验时这很重要——换掉位置编码后模型还能跑,不代表位置编码没干活,只代表冗余够多。