一句话定义:因果掩码是一张盖在注意力分数上的"遮罩"——在计算注意力时,把每个位置对未来 token 的注意力权重强行压成 0,让模型永远只能根据已经出现的内容预测下一个词。
为什么需要它
训练时,Transformer 习惯把整句话一次性喂进去并行计算;但推理时必须一个 token 一个 token 往外蹦。如果训练时不加限制,第 3 个位置的词就能直接"看到"第 4 个位置的正确答案,模型学会的是抄答案,而不是预测。等上线推理时没有未来可抄,效果立刻崩掉。
做法很朴素:注意力分数是一个 L×L 的矩阵(L 是序列长度),在 softmax 之前,把上三角部分(列号大于行号的位置)填上负无穷,softmax 之后这些位置的权重就变成 0。对角线保留——每个词还是能看到自己。
打个比方:像做一份只能顺着往下填的答卷。每写完一格,前面写过的内容都摊在桌上随便看,但后面的格子被胶带封死。这也正是"自回归(autoregressive)"的字面意思——用自己前面的输出,喂出后面的话。
和相邻概念的区别
最容易混淆的是填充掩码(padding mask)。它屏蔽的是为了长度对齐补上的占位符,和"偷不偷看未来"完全无关,实际训练里两者经常叠加使用。
| 掩码类型 | 屏蔽对象 | 目的 | 典型场景 |
|---|---|---|---|
| 因果掩码 | 当前位置之后的 token | 防止信息泄漏,保证自回归 | 解码器、对话、代码补全 |
| 填充掩码 | 补齐用的占位符 | 不去关注无意义的 token | 变长 batch 训练 |
| 不加掩码(双向) | 无 | 每个位置看到整个序列 | 编码器、分类、语义检索 |
注意"带因果掩码"和"双向"不是好坏之分,而是任务之分:前者天生是续写机器,后者天生是理解机器。
对从业者的实际意义
1. 它划定了模型的能力边界。 用因果模型做分类、做句向量检索,通常要额外设计,效果未必比双向模型好。
2. 它是 AI 词典:KV Cache">KV Cache 成立的前提。 因为每个位置只依赖过去,生成时就能只缓存历史算好的 Key/Value,不必重算整段——这是大模型能高速流式输出的工程基础。
3. 它是常见的踩坑点。 微调时把 attention mask 拼错、形状对不上,会出现 loss 掉得很快但实际效果很差的"假收敛"。具体实现细节各家框架有差异,以官方文档为准。
一句话收尾:因果掩码的本质是一条纪律——预测第 t 个词时,只准用第 1 到第 t 个词的信息,多一个字都不行。
