基础知识:位置编码与 Mask:顺序和可见性
Attention 本身只计算 token 之间的相关性。它并不知道第一个 token 在前、第二个 token 在后,也不知道哪些 token 不应该被看见。位置编码和 mask 就是为了解决这两个问题。

图源:Attention Is All You Need,Figure 3。原论文图意:Transformer encoder 的某些 self-attention heads 会关注长距离依赖,例如围绕 making ... more difficult 的依赖关系。
Transformer 本身像一袋 token。位置编码解决“谁在前谁在后”,mask 解决“谁能看谁”。看到长上下文、packing、VLM 多图输入或 agent 历史记忆时,先问三个问题:位置机制能不能表达顺序,mask 有没有限定正确可见性,padding 或未来 token 有没有泄漏。
1. 为什么需要位置编码
如果没有位置编码,Transformer 对输入顺序不敏感。句子:
1 | 猫追狗 |
包含的字相同,但意思完全不同。模型必须知道 token 的顺序。
常见位置机制可以先按用途区分:
| 方法 | 直观理解 | 常见场景 |
|---|---|---|
| 绝对位置编码 | 给每个位置一个固定或可学习编号 | 早期 Transformer |
| 相对位置编码 | 关注 token 之间相对距离 | 长序列建模 |
| RoPE | 用旋转方式把位置信息注入 Q/K | 现代 LLM 常见 |
| ALiBi | attention 分数按距离加入偏置 | 长上下文扩展 |
2. Mask 决定可见性
Mask 是 attention 里的可见性规则。
Causal Mask
自回归语言模型只能看过去,不能看未来:
1 | token 1 -> 看 token 1 |
这样模型才能做 next-token prediction,不会偷看答案。
Padding Mask
不同样本长度不一样,batch 时会补 padding。Padding token 不是有效内容,需要被 mask 掉。
Block / Sliding Window Mask
长上下文模型有时只允许 token 看局部窗口,减少 attention 成本。
3. Attention Mask 的伪代码
1 | scores = Q @ K.T / sqrt(d) |
把某些位置设成 ,softmax 后这些位置权重接近 0,也就相当于不可见。
4. 为什么长上下文很贵
标准 attention 需要计算 的分数矩阵。序列长度 翻倍,attention 分数矩阵大约变成 4 倍。
推理时还会产生 KV cache:
所以长上下文系统往往不会只扩大窗口,而是同时引入上下文压缩、KV cache 量化、prefix cache、sliding window attention 和检索式外部记忆。它们解决的是同一个系统问题:哪些信息必须留在注意力里,哪些可以压缩、缓存或外部检索。
5. 多模态里的位置更复杂
图像和视频不只有一维顺序,还有二维空间和时间结构。
| 输入 | 位置问题 |
|---|---|
| 图像 patch | 行列位置、局部邻域 |
| 视频 token | 帧内位置 + 时间位置 |
| 文档图像 | OCR 文本位置 + 页面布局 |
| 机器人轨迹 | 时间步 + 空间状态 |
所以 VLM、视频模型和 VLA 不只是“把所有 token 拼起来”,还要设计位置编码和 mask,让模型知道哪些关系重要。
6. 和后续专题的关系
- Transformer 输入与注意力:理解 Q/K/V 和 attention 主体。
- 推理系统:理解 KV cache、长上下文和上下文压缩。
- VLM/VLA:理解视觉 token、视频状态和动作序列为什么依赖 mask 与位置。
- 动作表示与控制接口:理解动作 token、动作块和时序控制的接口。
位置编码告诉模型“在哪里”,mask 告诉模型“能看谁”,上下文管理告诉系统“保留哪些信息”。三者共同决定 Transformer 是否能稳定处理长序列和多模态输入。
- Title: 基础知识:位置编码与 Mask:顺序和可见性
- Author: Charles
- Created at : 2025-07-12 09:00:00
- Updated at : 2025-07-12 09:00:00
- Link: https://charles2530.github.io/2025/07/12/ai-files-foundations-positional-encoding-masks-and-context/
- License: This work is licensed under CC BY-NC-SA 4.0.