Transformer 中的注意力遮蔽(Attention Masking)的工作原理是什么?
Transformer 中的注意力遮蔽(Attention Masking)的工作原理是什么?
这道题考的是 Transformer 解码器中"因果遮蔽"的核心机制——怎么让模型生成第 i 个词时,只看到前面 i-1 个词,而不能偷看后面的内容。
我分四个部分来讲:遮蔽是什么、怎么用数学实现、解码器输入怎么处理、还有 Encoder 和 Decoder 注意力的区别。
什么是注意力遮蔽——解码器的"因果之眼"
先说清楚问题。Transformer 的编码器处理输入时,所有位置都能看到彼此——这是双向注意力。但解码器不一样,它在生成任务(翻译、文本生成)中必须遵守时序约束:生成第 i 个 token 时,只能基于前面已经生成的内容,不能偷看还没生成的部分。
举个例子。把 "I love you" 翻译成 "我爱你",解码器是怎么工作的?
第一步:输入起始符 ,预测出"我"
第二步:输入 我,预测出"爱"
第三步:输入 我 爱,预测出"你"
每一步都只能看到"过去",看不到"未来"。这个约束就是注意力遮蔽要解决的问题。
你可以把遮蔽想象成作文考试的阅卷规则——考生只能基于已经写完的内容继续往下写,不能翻到后面偷看答案。注意力遮蔽就是解码器的"阅卷规则"。
Mask 的实现机制——数学层面的操作
具体怎么实现?先看标准的注意力计算:
Attention(Q, K, V) = softmax(QK^T / √d_k) × V
Mask 在这里怎么加进去?
核心思想:把需要遮蔽的位置的注意力分数设成负无穷,Softmax 后权重就变成 0。
看这张图展示的完整流程:
- QK^T:计算所有 query 和 key 的点积,得到原始注意力分数矩阵
- Scale:除以 √d_k 防止点积过大
- Mask:把右上三角(表示"未来"位置)加上 -∞
- Softmax:-∞ 被压成接近 0 的概率
- 乘 V:权重为 0 的位置对最终输出没有任何贡献
这个过程就像给信息通道装阀门。Softmax 把负无穷压成接近 0 的概率,相当于把这条信息通路彻底封死。
数学上,完整的 Masked Attention 公式是:
MaskedAttention(Q, K, V) = softmax((QK^T + M) / √d_k) × V
其中 M 是 mask 矩阵,遮蔽位置是 -∞,其他位置是 0。
解码器的自回归生成——输入偏移的秘密
你可能会问:解码器的输入是怎么构造的?
解码器的输入有个关键操作——右移一位。
还是翻译的例子。假设要生成 "我爱你":
- 解码器的 input 是 我 爱
- 解码器的 output(目标)是 我 爱
看到了吗?input 右移了。
是起始符,加在开头。然后真实输出整体往右挪了一位。
这样配合 Mask,就能实现严格的 autoregressive 生成:
- 位置 1 的 token(对应 )只能 attend 到自己
- 位置 2 的 token(对应 "我")只能 attend 到 和 "我"
- 位置 3 的 token(对应 "爱")只能 attend 到前三个 token
输入偏移确保了每一步解码时,模型只能看到"历史",而"未来"被 Mask 彻底挡住。
Encoder 与 Decoder 注意力的核心差异
Transformer 的解码器其实有两层注意力,理解这个区别很重要。
第一层:Masked Self-Attention
- 作用在解码器自己的输入上
- 单向因果,只能看"过去"
- 防止信息泄露
第二层:Cross Attention
- Q 来自解码器,K 和 V 来自编码器输出
- 这一层不受 mask 限制,可以看完整的 encoder 输出
- 负责"对齐"源序列和目标序列
简单说,Encoder 是"读完所有材料再答题",双向可见。Decoder 是"边读边答,不能看答案"——但答的时候可以回看材料(通过 Cross Attention)。
面试怎么答
基础版(100字左右):
注意力遮蔽是为了防止解码器在生成时看到"未来"token。在计算注意力分数后,把右上三角的注意力分数设为负无穷,经过 Softmax 后权重变成 0,这样这些位置就对输出没有贡献。同时,解码器输入右移一位,配合 Mask 实现严格的自回归生成,确保第 i 步只能attend到前 i-1 个位置。
加分版(多讲几点):
除了因果遮蔽,还有 Padding Mask——用于处理变长序列,把 padding 位置遮蔽掉,避免无意义的位置干扰。
从工程角度,Mask 是在 QK^T 之后、Softmax 之前加进去的,可以和矩阵运算融合,不影响并行效率。
对比 RNN 的隐式遮蔽,Transformer 的显式 Mask 优势明显——既能保证因果约束,又能充分利用并行计算能力。
一句话总结
注意力遮蔽的本质是在注意力分数上动手脚,用 -∞ + Softmax 把"未来"位置的权重压成 0,配合输入右移实现严格的因果解码。
