Attention Mask 笔记
一句话:Mask 是在计算 softmax 之前,把某些位置的注意力分数强制设为 $-\infty$,使 softmax 后这些位置的权重变为 0,相当于"屏蔽掉"不该看的位置。 一、为什么需要 Mask? Attention 的计算是: $$ \text{scores} = \frac{QK^T}{\sqrt{d_k}}, \quad \text{weights} = \text{softmax}(\text{scores}), \quad \text{output} = \text{weights} \cdot V $$ 默认情况下,每个 token 的 Q 会和序列中所有 token 的 K 做点积,包括: 无意义的 [PAD] 填充 token 未来还没生成的 token(训练时) 这两种情况都需要用 Mask 屏蔽掉。 二、两种 Mask 2.1 Padding Mask(填充遮罩) 问题:一个 batch 里不同句子长度不同,需要用 [PAD] token 补齐到相同长度,但 [PAD] 是无意义的,不应该被 Attention 到。 batch 里两个句子(补齐到长度5): 句子1: ["今", "天", "好", "[PAD]", "[PAD]"] ← 实际长度3,补了2个PAD 句子2: ["天", "气", "真", "不", "错" ] ← 实际长度5,无需补 Padding Mask(1=有效位置,0=PAD位置): 句子1: [1, 1, 1, 0, 0] 句子2: [1, 1, 1, 1, 1] 屏蔽效果: ...