Appearance
掩码自注意力(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)