Skip to content

Transformer 中的注意力遮蔽(Attention Masking)的工作原理是什么? ​

  • 标签:Transformer、注意力遮蔽

🏛 业务架构师 ​

注意力遮蔽的原理:在计算 softmax 注意力权重前,给"不该被看见"的位置的注意力得分加上负无穷(实际是大负数),这样 softmax 后这些位置的权重趋近于零——等于在信息汇聚时"物理隔离"了未来信息。

两类用途:

  1. 因果遮蔽(Causal Mask,下三角矩阵):Decoder 生成时,位置 t 只能看到 ≤t 的 token,不能"偷看未来"——这是自回归生成的根基。为什么必须:训练时整个句子并行输入,若不加遮蔽,模型预测第 5 个词时直接看到了第 5 个词的答案,学不到真本事;
  2. 填充遮蔽(Padding Mask):批处理时短句补齐的 padding 位不参与注意力——排除无效位置干扰。

业务视角的理解:因果遮蔽是"生成式 AI 的考试纪律"——训练像开卷考试但不能看答案页(未来 token),推理时逐词生成天然守序。没有这个纪律,模型是"复读机"(直接抄未来),上线后什么都生成不了。

延伸到应用层:同样的思想用在产品上——防剧透(摘要不看结论段)、防数据穿越(训练特征不用未来数据做风控特征)、Agent 的信息隔离(工具返回内容打上"数据"标记不被当作指令)——"该看的看、不该看的遮住"是贯穿模型结构和业务设计的通用思想。理解 mask,就理解了自回归模型为什么"只会往下说"。

🏗 系统架构师 ​

注意力遮蔽 = 在 softmax 之前把"不该被看见"的位置的注意力分数设为负无穷(加一个遮蔽矩阵),softmax 后这些位置权重为 0。两种遮蔽,作用不同:

  • Padding Mask(填充遮蔽):batch 内变长序列补齐的 padding 位不参与注意力——分数矩阵上 padding 列置 -inf,防止模型把注意力浪费在无意义的填充符上、污染真实 token 的表示。工程上还配合 KV/输出层忽略 padding 位计算损失;

  • Causal Mask(因果/下三角遮蔽,Decoder 核心):自回归生成时,位置 i 只能看到 ≤i 的位置——上三角(j>i)全部 -inf。这是自回归语言模型的正确性根基:训练时并行预测所有位置的下一个词,但每个位置的信息来源被严格限制在"过去",保证与推理时逐 token 生成的分布一致(训练-推理一致性)。没有因果遮蔽,训练时模型"偷看未来",推理时没有未来可看,性能崩塌。

实现细节:mask 是加性偏置(-inf 或 -1e9)加在 QK^T/√d 上再 softmax——与缩放因子、数值精度(-inf 在 fp16 下溢出,工程上用大负数)有配合讲究。

架构视角引申:causal mask 决定了 Decoder 是"流式友好"的(增量生成 + KV Cache 只存历史),这是 LLM 推理引擎(PagedAttention、PD 分离)设计的基石;而 Encoder 的双向注意力无 causal mask,适合全量理解任务——两套 mask 策略对应"生成"与"理解"两种系统形态。

💻 全栈开发专家 ​

注意力遮蔽 = 在 softmax 之前,把「不该被看见」的位置的注意力分数改成 -∞(实现上是加一个负无穷大的 mask 矩阵),softmax 后这些位置权重归零。

两类 mask,作用不同:

  1. Padding Mask(填充遮蔽):batch 内句子长短不一,短的补 PAD token——这些位置没有语义,必须遮掉,否则模型「关注」一堆无意义的填充符,污染表示。实现:长度真值生成 0/1 矩阵,PAD 位置加 -inf。

  2. Causal Mask(因果遮蔽,Decoder 专属):生成式模型必须只看过去——预测第 t 个 token 时不能偷看第 t+1 个及以后(否则训练时直接抄答案,模型学不会生成)。实现:上三角 mask,j > i 的位置置 -inf:

      k1   k2   k3
q1  [  0  -inf -inf ]
q2  [  0    0  -inf ]
q3  [  0    0    0  ]

softmax 后下三角权重有效,每个位置只能聚合自己及之前的信息。

工程细节(踩过坑的):

  • mask 时机在 QKᵀ/√d_k 之后、softmax 之前,不是乘在权重之后;
  • 用 -1e9 而不是 float('-inf') 有时更稳(防全 -inf 行 softmax 出 NaN)——第一行如果全被遮会出现这种边界 bug;
  • 训练-推理一致性:训练用 teacher forcing + causal mask 并行算所有位置;推理逐 token 生成时 KV cache 天然只含历史,等效于 mask;
  • Encoder 用 padding mask(双向),Decoder 自注意力用 causal+padding 双 mask,交叉注意力只 mask 源序列 padding。