在Transformer模型中,注意力机制在编码和解码过程中起着至关重要的作用,而填充掩码(Pad Mask)则用于确保这些注意力机制正确处理输入序列中的无效或填充(PAD)标记。避免了Decoder在生成预测时错误地将注意力集中在这些无关的填充标记上。

填充掩码(通常称为Attention Pad Mask)是一个二元tensor(张量),其元素值用True和False表示。在应用Softmax函数计算注意力权重之前,掩码中标注为True的位置会在注意力分数上置-∞,所以在实际的注意力计算中被忽视。

例如,如果输入序列是两个长度不等的样本,它们在经批量处理时通过添加填充标记(假设标记值为0)对齐长度。假定原始序列及其填充后的形态如下所示:

seq_q = [[1, 2, 3, 0, 0], [4, 5, 6, 7, 0, 0, 0]] # 查询序列
seq_k = [[1, 0, 0, 0, 0, 0, 0], [4, 5, 6, 7, 0, 0, 0]] # 键序列

这里,seq_q和seq_k分别代表了查询和键的序列。在实际应用中,它们可能会有所不同,但为了简化,我们假设在这个例子中它们是一样的。

针对seq_k中填充标记的位置,我们可以使用一个特定的函数(如get_attn_pad_mask)来产生相应的填充掩码:

pad_attn_mask = [[False, True, True, True, True, True, True], [False, False, False, False, True, True, True]]

在计算注意力权重时,序列1的第4和第5个位置以及序列2的最后三个位置由于对应了填充标记0,因此它们在填充掩码中的标记为True。当原始注意力分数与掩码相结合时,这些位置的分数将变得无穷小。