返回首页

文章详情

2026.04.18

2 分钟阅读

llm / transformer / token / foundation

没有位置,Attention 只看到一袋词

从“我打你”和“你打我”的差异出发,解释 Transformer 为什么需要位置信号,以及绝对位置、相对位置与 RoPE 在解决什么。

铺在深色工作台上的 Transformer 架构草图和代码稿纸

从 Token 到 Transformer · 05 / 10

“我打你”和“你打我”使用了完全相同的三个字。若模型只知道序列里有哪些 token,却不知道它们各自站在哪里,两句话就很难区分。

RNN 逐步读取输入,顺序天然写进状态传递。Transformer 选择并行处理整段序列,换来了更高的训练效率,也失去了这份免费的先后感。位置编码就是为这项交换补上的结构信息。

Self-attention 为什么不自带顺序

先忽略位置信号,想象把一组 token 向量同时送入 self-attention。如果我们用同一种方式打乱输入位置,输出也只会跟着以同样方式打乱。计算知道“这些向量之间有什么关系”,却没有额外依据判断谁原本在第一位。

这叫排列等变。它对集合建模很自然,对语言却不够,因为语法、指代和因果都依赖方向与距离:

  • “狗追猫”与“猫追狗”角色相反;
  • “没有不同意”与“不同意”只差一个位置关系;
  • 代码中的作用域、括号和调用顺序也不能任意交换。

Attention 可以利用顺序,但前提是输入或注意力计算先提供顺序线索。

原始 Transformer 如何加入位置

2017 年的 Transformer 论文使用正弦和余弦函数生成位置编码,再与 token embedding 相加。不同频率让每个位置获得一组独特模式,也让模型有机会从组合中推断相对距离。

概念上可以写成:

text
进入第一层的表示 = token embedding + position encoding

同一个 token 出现在第 2 位和第 20 位时,初始表示因此不同。后续 Q、K、V 投影就能把位置信息带进 attention score。

论文同时尝试过可学习位置向量。两者说明一个重要事实:模型不要求位置必须由某个固定公式表达,只要求序列结构以可学习、可利用的方式进入计算。

绝对位置不是唯一答案

随着上下文变长,位置方法逐渐从“这是第几个”转向“两个 token 相隔多远、方向如何”。

  • 可学习绝对位置:为每个位置保存参数,直接但通常受训练长度约束;
  • 相对位置:在注意力计算中表示 token 之间的距离或方向;
  • RoPE:通过旋转 Q、K 的表示,把相对位置信息编码进它们的点积关系。

现代模型常使用 RoPE 或其变体,但没有一种方法可以免费解决无限上下文。超过训练分布后,位置外推、注意力质量和显存开销仍会成为问题;扩大“可接受长度”也不等于模型能同样可靠地使用每个位置。

位置告诉模型什么,又不告诉什么

位置信号能帮助模型区分先后、邻近和距离,却不会直接提供句法规则。它不会自动知道“谁是主语”,也不会规定模型必须关注最近的 token。

这些关系仍要从数据中学习。位置编码提供坐标系,Attention 决定如何使用坐标,FFN 和更深层网络再把结果变成可用于预测的表示。

可以把它们的分工理解为:

信息主要来源
这是什么 tokenToken embedding
它处在什么位置位置机制
它与谁相关Attention
当前上下文中它意味着什么多层 Transformer 共同形成

长上下文为什么仍然困难

即使每个 token 都有位置,模型仍要在海量候选中找到真正相关的信息。标准 attention 的计算量会随序列长度快速增加,位置距离扩大后,训练数据中也未必有足够信号教会模型稳定利用远端内容。

因此,长上下文能力至少包含三个问题:能不能装下、能不能算完、能不能找对。位置编码主要解决“如何表示顺序与距离”,不能代替检索、注意力优化和长程训练。

小结

Transformer 的并行结构不会自动保留输入顺序。位置机制让同一组 token 不再只是无序集合,使模型能够区分方向、距离和站位。

现在,每个 token 已经有了内容表示和位置线索。下一篇要进入 Transformer 最关键的交换机制:Attention 如何决定一个位置应该从其他位置取回多少信息。

延伸阅读