Skip to content

掩码自注意力(Masked Self-Attention, MSA)

1.作用

在Transformer模型中,掩码自注意力(Masked Self-Attention)用于控制模型, 能看到什么,不能看到什么, 防止模型 偷看答案看到未来

生成第 i 个 token 时,只允许模型看到 i-1 之前的 token。

就像考试时,遮住答案,学生才会根据之前的知识,写出猜测的答案。

2.举例

想象你在玩「你画我猜」:

  • 画一个「熊猫吃竹子」
  • 完整答案是「熊猫吃竹子」

在没有掩码的情况下,模型可以看到答案:

  • ❓你猜第1个字:
  • 👀偷看答案:「熊猫吃竹子」直接说「熊」✅
  • ❓你猜第2个字:
  • 👀偷看答案:「熊猫吃竹子」直接说「猫」✅
  • 这就是作弊了。

问题

模型没有真正学会「预测」

训练时作弊,推理时就不会了

有掩码模式下:

  • ❓你猜第1个字:
  • 👀只能看:[开始]
  • 🤔基于上下文:「动物?是不是...」
  • 猜测:「熊」
  • ❓你猜第2个字:
  • 👀只能看:[开始]「熊」
  • 🤔基于「熊」:「熊+?可能是熊猫...」
  • 猜测:「猫」

规则

只能看已经猜出的词, 不能看未来的词,

这才是真正的「预测能力」

3.原理

在矩阵计算中 任何数字 + 负无穷(掩码) = 负无穷

在标准自注意力的Softmax之前,通过矩阵加法强制将未来位置的注意力分数变为负无穷(屏蔽未来位置的注意力权重),从而在计算层面掐断了信息从未来流向过去的可能性(确保模型生成当前词时仅依赖已知信息),这是它与标准自注意力唯一的、但也是最本质的区别。

python
# 标准自注意力
a = [[1,2,3],
     [4,5,6]]

# 掩码矩阵
b = [[0,0,-inf],
     [0,-inf,-inf]]

# a + b = [[1,2,-inf],
#          [4,-inf,-inf]]

实现原理是利用来softmax函数的数学特性,即指数运算e^x,当x趋于负无穷时,数值下溢得到精确的0。 从计算角度来看权重为0,贡献就是0,当前token就无法看到未来token(因为未来token贡献为0)

京ICP备2024093538号-1