18. Causal Mask 的作用是什么?它和 Padding Mask 有什么区别?

整理 Causal Mask 的作用,以及它与 Padding Mask 的区别。

简单回答

Causal Mask(因果掩码)确保每个 token 只能看到它自己和它前面的 token,不能"偷看"未来信息,这是自回归生成的基本要求。Padding Mask 用来屏蔽 batch 中因对齐长度而填充的无意义 padding token。两者目的完全不同:Causal Mask 是模型设计的核心约束,Padding Mask 是工程上处理变长序列的手段。

详细解释

Causal Mask 的作用

在 Decoder-Only 模型中,训练目标是 next token prediction。对于位置 t 的 token,它应该只基于前面 t-1 个 token 来预测,如果能看到位置 t+1 及之后的 token,就等于"知道了答案",训练信号就失效了。

Causal Mask 是一个下三角矩阵,在 attention score 矩阵上,把上三角部分设为负无穷(-inf),softmax 后这些位置的权重变为 0。这样就实现了"只看左边"的约束。

训练时,Causal Mask 让模型可以一次性对整个序列做前向传播,同时计算所有位置的 loss,每个位置只看到它应该看到的上文。这比逐 token 生成高效得多。

Padding Mask 的作用

batch 训练时,同一个 batch 里的序列长度通常不一样,需要把短序列补齐(padding)到统一长度。padding 的 token 是无意义的,不应该参与 attention 计算(既不应该被别人 attend,也不应该产生 loss)。Padding Mask 就是把 padding 位置标记出来,在 attention score 中把对应位置设为 -inf。

两者的区别

Causal Mask 是模型架构层面的设计约束,任何 Decoder-Only 模型都必须有,无论是训练还是推理。Padding Mask 是纯工程层面的处理,只在 batch 中有变长序列时需要。两者可以叠加使用——实际的 attention mask 是 causal mask 和 padding mask 的交集。

推理时还需要 Causal Mask 吗?

推理时是逐 token 生成的,每一步只用当前 token 的 Q 去和所有已有的 K 做 attention,天然只能看到前面的 token。所以推理时 causal mask 实际上是隐式满足的,不需要显式构造。

面试时可以这样答

Causal Mask 的作用就一句话:让每个 token 只能看到自己和前面的 token,不能看到未来信息。它是 Decoder-Only 模型自回归训练的基本约束,实现方式是在 attention score 的上三角部分填负无穷,softmax 后这些位置权重归零。

Padding Mask 解决的是不同的问题——batch 训练时序列长度不一致,需要 padding 补齐,Padding Mask 就是把这些无意义的填充位置屏蔽掉,不参与 attention 计算。

两者的本质区别是:Causal Mask 是模型架构的核心设计,决定了信息流的方向;Padding Mask 是工程上的辅助手段,处理变长序列对齐。实际代码里,最终的 attention mask 通常是两者的叠加。

还有一个值得提的点:推理时其实不需要显式的 Causal Mask,因为自回归生成本身就是逐 token 的,每一步只能看到已经生成的 token,因果约束是天然满足的。Causal Mask 主要在训练时起作用,因为训练是一次性对整个序列做前向传播。

常见追问

  1. 在 prefix LM 中,Causal Mask 和标准的有什么不同?prefix 部分的 mask 是怎样的?
  2. FlashAttention 在实现上怎么处理 causal mask?是显式构造矩阵还是有别的方式?
  3. 如果训练时不加 Causal Mask,模型会学到什么?能不能用?