Transformer 的两种掩码:Padding Mask 与 Sequence Mask 到底有什么区别
解释填充掩码和序列掩码分别解决什么问题,以及它们如何影响注意力可见范围。
相关工具
掩码不是把内容删掉
Transformer 中的 Mask 可以理解为一张可见范围表:它告诉注意力,哪些位置可以参与当前计算,哪些位置应该被忽略。被遮住的位置通常仍然存在于输入张量中,只是在计算注意力分数时不让它产生有效影响。
资料 资料介绍了两种常见掩码:Padding Mask 和 Sequence Mask。前者处理为了对齐长度而补出来的空位,后者限制解码器的目标位置不能看到未来。它们都叫掩码,但处理的是两种完全不同的风险。

Padding Mask 处理补齐位置,Sequence Mask 处理目标序列中的未来位置。
Padding Mask 解决什么问题
一个批次里的句子长度往往不同。为了让它们能够组成同一个张量,较短的句子通常会在末尾补上特殊的填充标记。填充标记只是为了对齐形状,并不代表真实词语,也不应该被模型当成句意的一部分。
Padding Mask 就是把这些补齐位置标记出来。进行注意力计算时,真实词可以继续互相查看,而填充位置不会被当成有意义的 Key 参与权重分配。这样,短句不会因为后面多出几列空位而改变表示。
Padding Mask 需要和实际的填充位置对应。如果把真实词错误地标成填充,模型会丢掉本该使用的信息;如果漏掉填充位置,注意力可能把一部分权重浪费在没有语义的空位上。
Sequence Mask 为什么只出现在解码器自注意力
解码器生成目标序列时必须遵守从左到右的顺序。预测第一个词时只能使用起始标记,预测第二个词时可以使用第一个词,不能提前看到第二个词之后的答案。Sequence Mask,也叫因果掩码,就是为这个顺序提供约束。
它通常呈现为一个下三角可见区域:当前位置及其左侧可以查看,右侧未来位置被遮住。解码器的每个位置都能看到过去,但看不到自己尚未预测的内容。这样,训练时虽然可以并行计算所有位置,学习到的条件仍然和推理时的逐词生成一致。

下三角区域表示目标位置可以看到自己和过去,右上方未来位置被遮住。
掩码如何影响注意力分数
注意力会先计算 Query 和 Key 的相关性,再缩放并通过 Softmax 得到权重。掩码通常在 Softmax 之前生效:允许查看的位置保留原始分数,被遮住的位置被替换成一个很小的值。这样经过 Softmax 后,遮住位置的权重就接近于零。
把掩码放在 Softmax 之前很重要。若先把所有分数归一化成概率,再事后删除某些位置,就会破坏原本的概率分布;在归一化之前屏蔽,剩余可见位置才能重新分配全部注意力。

掩码先改变不可见位置的分数,再经过 Softmax 形成新的注意力权重。
编码器、解码器和交叉注意力分别怎么用
编码器的自注意力通常需要 Padding Mask,因为源序列中可能有补齐位置;它不需要遮住未来,因为编码器要理解完整的源句。解码器的自注意力通常同时需要 Padding Mask 和 Sequence Mask:前者忽略补齐位置,后者限制未来目标位置。
交叉注意力的 Query 来自解码器,Key 和 Value 来自编码器输出。它主要需要屏蔽源序列中的填充位置,避免解码器把注意力分给空位。它不是在目标序列内部逐位置查看,因此不使用与目标自注意力相同的因果三角掩码。
训练和推理时掩码的作用有什么变化
训练时,目标序列通常右移后一次性送进解码器。Sequence Mask 让每个位置只能看到目标前缀,Padding Mask 则排除补齐位置。由于可见关系提前确定,多个位置可以并行计算,同时仍然遵守从左到右的预测条件。
推理时,模型每次只把已经生成的前缀作为输入,未来词本来就还不存在,因此因果限制在输入形式上已经体现出来。不过实际计算仍常保留相应的注意力约束,尤其是在缓存或批量处理不同长度前缀时,Padding Mask 依然不能省略。
几个容易混淆的判断
第一,Padding Mask 不是只给句子末尾使用的固定规则,真正要遮住的是批次中所有填充标记对应的位置。第二,Sequence Mask 不是把整句话都遮住,而是只遮住当前位置右侧的未来区域。第三,两种掩码可以同时出现,它们解决的问题不同,不是二选一。
还要注意源序列和目标序列是两套位置。编码器的 Padding Mask 关注源输入,解码器自注意力的 Sequence Mask 关注目标生成顺序,交叉注意力再把目标查询和源记忆连接起来。看清楚掩码作用在哪一侧,往往比记住名称更重要。
把掩码放回 Transformer 主线
Transformer 的注意力之所以既能并行又能保持正确的信息边界,靠的就是掩码和数据排列共同完成约束。Padding Mask 让模型忽略为了对齐而产生的空位,Sequence Mask 让解码器保持因果顺序,二者共同决定每个位置能看到什么。
因此,掩码不是结构图上的附属标记,而是注意力计算的一部分。词嵌入提供内容,位置编码提供顺序,掩码规定可见范围,注意力再在允许的范围内分配权重。理解这条关系,才能真正看懂编码器和解码器为什么可以在同一套框架下处理不同长度的序列。
常见问题
Padding Mask 和 Sequence Mask 能同时使用吗?
可以。解码器自注意力中经常同时忽略填充位置并遮住未来位置,它们分别处理无效空位和因果顺序。
为什么不直接删除填充位置?
批量计算需要统一的张量形状,直接删除会让不同样本难以放在一起。Padding Mask 可以保留统一形状,同时让填充位置不参与有效注意力。
交叉注意力需要使用因果掩码吗?
通常不需要目标自注意力那种因果掩码。交叉注意力主要读取编码器输出,需要屏蔽源序列的填充位置;目标端的未来约束由解码器自注意力负责。