Transformer自注意力机制中的掩码(Mask) 本质是为了模拟序列的时序依赖关系,确保模型在预测时只能看到当前位置之前的信息,而无法“偷窥”未来的内容。以下从需求场景、实现原理到直观案例逐步解析:
一、为什么需要掩码?——自回归生成的因果约束
在语言生成任务(如翻译、文本续写)中,模型需要根据已生成的前缀预测下一个词,例如:
- 输入前缀“我喜欢”,预测下一个词“自然”时,模型只能依赖“我”和“喜欢”的信息,不能提前知道“自然”后面的词(如“语言处理”)。
掩码的作用:强制模型遵循“因果关系”,即每个位置的预测只能基于其左侧已生成的内容,避免“未卜先知”导致训练失效。
二、掩码的直观形式:上三角矩阵的“信息屏蔽”
以序列长度为3的句子为例(token顺序为A→B→C),因果掩码是一个上三角矩阵,矩阵中“1”表示允许关注,“0”表示屏蔽:
掩码矩阵(序列长度3):
[
[1, 0, 0], # A只能看到自己
[1, 1, 0], # B能看到A和自己
[1, 1, 1] # C能看到A、B和自己
]
可视化效果:
位置1(A):■ □ □
位置2(B):■ ■ □
位置3(C):■ ■ ■
(■表示可见,□表示屏蔽)
核心逻辑:每个位置i只能看到位置1到i的信息,无法看到i+1到n的未来信息。
三、掩码在计算中的实际操作:负无穷抑制
掩码的数学实现并非直接用0和1,而是通过将屏蔽位置的注意力分数设为负无穷(-inf),再经softmax后权重趋近于0:
- 计算注意力分数:假设序列长度为3,QK^T得到分数矩阵:
[[2, 4, 1], [3, 1, 2], [5, 2, 3]]
- 应用掩码:将上三角位置(未来信息)设为-∞:
[[2, -∞, -∞], [3, 1, -∞], [5, 2, 3]]
- softmax后:
[[1, 0, 0], [0.7, 0.3, 0], [0.5, 0.3, 0.2]]
效果:每个位置i的注意力权重仅分布在i及之前的位置,未来位置的权重为0。
四、掩码如何实现并行计算中的时序约束?
Transformer的优势是并行处理整个序列,但生成任务需要模拟“按顺序生成”的因果关系。掩码通过以下方式平衡两者:
- 训练时:一次性输入完整序列,但用掩码强制每个位置“假装”只能看到左侧信息。例如,预测位置3时,掩码让模型无法使用位置3的真实值,只能依赖位置1和2的信息。
- 推理时:每次只生成一个位置,无需掩码(因下一个位置尚未生成),但训练时的掩码机制已让模型学会按顺序预测。
五、案例:“我 爱 自然 语言 处理”的掩码应用
假设序列分词为5个token,索引0到4,掩码矩阵如下(上三角为-∞):
索引0: [0, -∞, -∞, -∞, -∞]
索引1: [0, 0, -∞, -∞, -∞]
索引2: [0, 0, 0, -∞, -∞]
索引3: [0, 0, 0, 0, -∞]
索引4: [0, 0, 0, 0, 0]
计算注意力时:
- 当计算索引2(“自然”)的注意力时,只能看到索引0(“我”)和索引1(“爱”)的信息,无法看到索引3(“语言”)和索引4(“处理”),确保模型预测“自然”时不依赖未来词汇。
六、掩码的变种:Padding掩码 vs 因果掩码
- 因果掩码(Causal Mask):上述案例中的上三角掩码,用于自回归生成任务(如GPT)。
- Padding掩码:处理不等长序列时,将填充位置(Padding)的注意力分数设为-∞,避免模型关注无意义的填充token。
总结:掩码的本质是“时序幻觉”
Transformer通过掩码在并行计算中创造了“序列顺序”的幻觉:
- 对模型而言,每个位置的预测只能依赖历史信息,符合语言生成的因果逻辑;
- 对硬件而言,所有位置的计算可并行完成,大幅提升效率。
这种设计让Transformer既能像RNN一样处理序列依赖,又能利用矩阵运算实现百倍速的并行加速,是其成为大模型核心架构的关键之一。