Padding Mask 为什么要在 Softmax 前屏蔽无效位置
围绕 Padding Mask、补齐序列和 Softmax 的描述,解释无效位置如何被屏蔽,以及为什么必须在归一化之前处理。
相关工具
不同长度的句子为什么需要补齐
Transformer 通常以批次形式处理多个序列,但同一批次中的句子长度不一定相同。矩阵计算需要较规整的张量形状,因此较短序列会在末尾补上 Padding,使它们和批次中的最长序列对齐。
资料 对 Padding Mask 的说明抓住了关键:补齐位置只是为了让张量形状一致,本身没有真实语义。模型仍然需要知道哪些位置有效、哪些位置只是占位符,否则注意力会把这些空位当成普通输入参与计算。

较短序列通过 Padding 对齐形状,但补齐位置不代表真实词元。
Padding 位置为什么不能直接留在注意力里
注意力会为 Query 和各个 Key 计算相关性,再把分数转换成权重。如果 Padding 位置不做任何处理,它也会得到一个分数,进而在 Softmax 后占据一部分概率。即使这个位置没有内容,Value 仍可能把无意义的数值带进输出。
问题不只是多了一个空位置。序列越短,Padding 占比可能越高;如果多个无效位置共同分走权重,真实词元的权重就会被稀释。这样得到的当前位置表示混入了批量对齐带来的噪声,而不是只由有效源内容形成。
掩码的核心是让无效位置失去概率
已有的做法是:把需要屏蔽的位置加上一个非常大的负数,近似看成负无穷。这样,经过 Softmax 后,这些位置的概率会接近 0。有效位置仍然保留自己的相对分数,注意力权重会在剩余有效位置之间重新分配。
从结果看,Padding Mask 不是把无效位置从张量里物理删除,而是在分数计算完成、概率归一化之前改变它们的数值。这样既能保持批量矩阵形状,又能让无效位置在注意力输出中不再发挥作用。

无效位置在 Softmax 前加入极小分数,归一化后对应权重接近零。
为什么一定要在 Softmax 之前处理
Softmax 会把一组分数转换成概率分布,所有候选的概率相加为 1。如果先对所有位置做 Softmax,再把 Padding 位置的概率设为 0,原本分给无效位置的概率就被直接丢掉了,剩余有效位置的总和不再是 1,除非再做一次重新归一化。
在 Softmax 前把无效位置设为极小值,Softmax 会自然地把概率集中到有效位置上,并在有效范围内完成归一化。这种顺序既符合概率计算,也让后续的加权 Value 保持清晰的权重含义。
一个简单的权重例子
假设某个 Query 对三个真实位置和两个 Padding 位置产生五个分数。没有掩码时,五个位置都会进入 Softmax;其中某个 Padding 位置即使分数不高,也可能获得非零概率。加上 Padding Mask 后,两个无效分数被压到极小值,Softmax 的有效概率几乎全部分配给三个真实位置。
因此,Mask 不会强行指定真实位置之间谁最重要。它只划定可参与竞争的范围。真实位置之间的权重仍由 Query 和 Key 的相关性决定,Mask 做的是先把不该参与竞争的位置排除。
Padding Mask 和 Sequence Mask 解决不同问题
Padding Mask 处理的是“哪些位置没有真实内容”。它可以出现在需要计算注意力的各类场景中。Sequence Mask,也常被称为因果掩码,处理的是“解码器当前位置能不能看到未来目标词”,主要用于 Decoder 的 Self-Attention。
两者有时会同时作用在解码器的自注意力中:Padding Mask 屏蔽批量中的空位,Sequence Mask 屏蔽当前位置右侧的未来位置。它们的原因不同、形状边界不同,不能因为都叫 Mask 就互相替代。

Padding Mask 屏蔽无效占位,因果 Mask 屏蔽目标未来,两者共同约束解码器自注意力。
交叉注意力中通常屏蔽源端 Padding
在 Encoder-Decoder Attention 中,Query 来自解码器,Key 和 Value 来自编码器输出。因此,源序列中的 Padding 对应注意力矩阵的列,源端掩码需要作用在这些列上。每个目标 Query 仍然可以查询有效源位置,但不能把权重分给源端空位。
目标端如果也存在 Padding,还需要在目标位置相关的损失或输出处理中单独处理。判断掩码位置时,先看 Query、Key、Value 分别来自哪一侧,再决定无效位置落在矩阵的行还是列。
掩码不会删除位置编码和张量形状
Padding 位置通常仍然存在于输入张量中,也可能经过 Embedding 和位置编码。Mask 的职责是在注意力计算中限制它们的影响,而不是把张量裁剪成每条序列各自的长度。这样做可以保留批量矩阵计算的规整形状。
这也是“形状”和“有效语义”要分开看的原因。张量可以有统一的最大长度,但注意力权重、损失统计和输出选择仍然需要知道哪些位置真实有效。Padding Mask 正是把这层语义边界带进矩阵计算。
用四步检查 Padding Mask 是否正确
第一,确认批次中的补齐位置已经被标记;第二,确认掩码作用在注意力分数或等价的归一化前位置;第三,确认无效位置经过 Softmax 后权重接近零;第四,确认剩余有效位置的权重重新归一化。
如果结果异常,可以优先检查掩码方向、广播形状和应用时机。Padding Mask 的目标不是让输出变成全零,而是让注意力只在有效位置之间分配信息。理解这一点,调试不同长度批次时会更容易找到问题所在。
常见问题
Padding Mask 会把补齐位置从输入张量中删除吗?
通常不会。它保留统一的批次张量形状,只在注意力分数或归一化前把无效位置屏蔽掉。
为什么不能 Softmax 后再把 Padding 概率设为零?
这样会破坏原有概率和为 1 的分布,除非再次归一化。Softmax 前屏蔽可以让有效位置直接获得重新归一化后的权重。
Padding Mask 和 Sequence Mask 可以混成一个规则吗?
实现上可以组合,语义上仍应区分。Padding Mask 屏蔽无效占位,Sequence Mask 限制解码器不能读取未来目标位置。