Decoder 的 Mask 为什么要下三角

一句话速记

自回归语言模型训练时,位置 t 只能依赖已出现的 token(位置 < t),不能「看见」未来 token;在注意力权重矩阵上对「看未来」的位置加 −∞(实现上常写很大的负数),softmax 后权重为 0,形成(因果)下三角可参与区域。

也叫 causal maskfuture mask

问题从哪来

  • Self-Attention 若不做限制:位置 i 的 Q 会与所有位置 j 的 K 算相似度,包括 j > i 的「未来」位置。
  • 训练 下一词预测(或同一段序列上的条件分布)时,若允许看未来,则 t 时刻的表示会泄露 t+1, t+2, … 的信息,标签与输入信息泄漏,模型学的是「作弊」,泛化崩坏。

因此必须保证:在计算位置 t 的输出时,注意力只能来自位置 ≤ t−1(或按实现约定 ≤ t)的一侧,不能来自右侧未来。

下三角是什么(按行看「谁可以 attend 谁」)

设序列长度 n,注意力分数矩阵 S 大小为 n × nS[i][j] 表示位置 i 对位置 j 的(未 softmax 前)得分。

  • 因果约束:位置 i 不允许 attend 到 j > i。
  • 在矩阵上:允许区域为 下三角(含对角或不含对角依实现),上三角(严格未来)被 mask 掉。

常见两种表述(不同资料画图画法略不同,说清「不能看未来」即可):

  • 上三角(不含对角)置为 −∞:softmax 后 attn[i,j]=0 对 j>i。
  • 也有资料称「下三角为有效区域」——与「掩掉上三角」是同一回事,别和矩阵行列约定杠死,讲约束语义

与 BERT 的对比(高频追问)

Encoder / BERT 类Decoder-only / GPT 类(训练时该层)
同一段序列的 Self-Attention 因果 mask,位置 i 可看全文(双向) 因果 mask,不能看未来
目标掩码语言建模 MLM 等下一 token / 自回归似然

推理时还要吗

  • 自回归生成时,序列逐步变长,实现上常用 KV Cache 只算新一步;因果约束仍成立:新位置不能看还没生成的未来
  • 训练时整段前向一次算完 n 个位置,必须用显式 mask 矩阵 一次性表示「未来不可见」。

延伸追问

  • Q:对角线能不能 attend 自己?
    答:看任务与实现。GPT 式「预测下一 token」里,位置 t 的 logits 常对应「给定前面 token 时下一个 token 的分布」,表示上位置 t 会用到当前及之前的上下文,实现细节各框架略有差异,**记「因果 + 不偷看未生成未来」**即可。

  • Q:为什么叫 causal(因果)?
    答:强调时间方向:原因只能来自过去,不能来自未来

  • Q:Encoder-Decoder 里 Decoder 自注意力是 causal,Cross-Attention 要吗?
    答:Decoder 自注意力侧通常仍有 causal,防止生成目标端偷看尚未生成的目标词;Cross-Attention 的 Q 来自 Decoder、K/V 来自 Encoder 全句,Encoder 已整体给出,不是「生成步的未来」问题不用 同一套「目标序列因果」mask(有单独的长度与 padding 处理)。详见 Self-Attention 与 Cross-Attention 的区别

我的记法

TODO

状态

  • 已背速记
  • 能讲通俗版
  • 能答追问
  • 在实际场景中用上过

参考资料

  • Vaswani et al., 2017(Masked Multi-Head Attention)
  • 各框架 attention_mask / is_causal 文档