交叉注意力为什么不需要目标未来掩码
围绕 Decoder、Encoder-Decoder Attention 和两类 Mask 的描述,解释目标自注意力为什么屏蔽未来,而交叉注意力主要屏蔽源端 Padding。
相关工具
解码器的一层里有两种不同的注意力
Transformer 的解码器同时面对两套信息:目标端已经生成的前缀,以及编码器整理好的源序列记忆。资料 对解码器的描述中,先有掩码多头自注意力,再有 Encoder-Decoder Attention,后者帮助解码器关注输入句子的相关部分。
两种注意力虽然都使用 Q、K、V 和 Softmax,但输入来源不同,所需要的边界也不同。目标自注意力约束目标端的时间顺序,交叉注意力负责把当前目标状态连接到已经编码的源信息。

目标自注意力处理目标前缀,交叉注意力使用目标 Query 查询编码器源记忆。
目标自注意力为什么需要未来掩码
生成目标序列时,第 t 个位置只能依赖起始标记和已经生成的前缀,不能提前看到第 t+1 个或更后面的真实答案。训练时虽然整段右移目标可以一次送入解码器,但因果掩码仍要把当前位置右侧的目标位置遮住。
如果没有这个掩码,训练中的当前位置就能读取未来标签,模型会得到推理时不存在的信息。它可能在训练集上表现很好,却没有真正学会根据历史前缀预测下一词。因果掩码约束的是目标自注意力中的 Query 和目标 Key 之间的可见范围。
交叉注意力读取的是已经给定的源序列
交叉注意力中,Query 来自解码器当前的目标表示,Key 和 Value 来自编码器输出。源序列在进入编码器前已经完整给定,编码器已经为每个源位置形成了上下文表示。解码器不是在源序列上从左到右生成,而是在当前目标状态下查询这份源记忆。
因此,目标端未来位置不会因为交叉注意力而泄露给当前 Query。交叉注意力的 Key 和 Value 来自源端,不是目标序列右侧的未来词。它需要解决的是“当前目标位置应该读取哪些源位置”,而不是“当前目标位置能不能看到下一个目标词”。

目标端产生 Query,编码器源记忆提供 Key 和 Value,查询范围是源序列位置。
交叉注意力仍然需要屏蔽源端 Padding
源序列批次可能经过 Padding 对齐,编码器输出中也会对应这些无效位置。交叉注意力的 Key 和 Value 来自源端,所以源端 Padding 会出现在注意力矩阵的列方向。它们需要在 Softmax 前被屏蔽,避免目标 Query 把权重分给空位。
这个掩码与目标未来掩码解决的是不同问题。源端 Padding Mask 判断哪些源位置没有真实内容;目标端 Sequence Mask 判断目标当前位置能否读取未来目标位置。交叉注意力通常需要前者,但不需要后者。

源端无效位置对应交叉注意力矩阵的列,经过掩码后不参与目标 Query 的权重分配。
为什么不能把目标未来掩码套到交叉注意力上
目标未来掩码通常形成一个随目标位置变化的三角可见范围:第一个目标位置只能看自己,后面的目标位置逐渐扩大可见范围。但交叉注意力的列是源序列位置,不是目标未来位置。把这种三角规则直接套到源端,会错误地限制当前目标 Query 可以读取的源内容。
在翻译或摘要中,当前目标位置往往需要查看源句的开头、中间或结尾,源序列没有“未来目标词”这一概念。除非具体模型另有设计,否则交叉注意力应该允许 Query 查询所有有效源位置,只屏蔽源端无效占位。
目标端 Padding 仍然要单独处理
不使用目标未来掩码,不等于交叉注意力完全不需要处理目标端。批量目标序列也可能有 Padding,目标端无效位置需要在损失统计、输出选择或相应的注意力计算中按规则忽略。
关键是区分行和列:交叉注意力矩阵的行对应目标 Query,列对应源 Key/Value。源 Padding 直接影响列;目标 Padding 影响哪些目标行是否有效。目标未来约束主要由目标自注意力处理,不能把三种边界混在一张掩码里理解。
训练和推理中这个边界都保持不变
训练时,目标序列可以右移后一次送入解码器。目标自注意力通过因果掩码保证每一行只能看到真实前缀,交叉注意力则让每个目标位置查询完整有效源记忆。多行可以并行计算,但可见范围的语义不变。
推理时,目标前缀逐步变长,每一轮产生新的 Query。它仍然可以查询编码器已经形成的源记忆,源 Key 和 Value 可以复用;目标自注意力则继续遵守当前前缀的因果关系。训练和推理的计算组织不同,两个注意力子层的边界仍然一致。
用 Query、Key、Value 判断需要哪种掩码
看到一类注意力时,先问 Query、Key、Value 分别来自哪里。如果 Q、K、V 都来自目标序列,通常要考虑目标未来掩码;如果 Q 来自目标端、K/V 来自源端,重点检查源端 Padding Mask。若同一批次存在多个无效位置,还要结合行列方向判断广播形状。
这样记忆比死背“某个子层一定用某个 Mask”更可靠。掩码的根本作用,是限制当前 Query 不应读取的信息。目标自注意力不应读取未来目标,交叉注意力不应读取源端空位,但交叉注意力并没有目标未来需要遮挡。
常见问题
交叉注意力完全不需要 Mask 吗?
通常仍需要源端 Padding Mask,用来屏蔽编码器输出中的无效源位置;它一般不需要目标自注意力那种未来三角掩码。
交叉注意力为什么可以读取完整源序列?
源序列在编码阶段已经完整给定,交叉注意力是在当前目标状态下查询源记忆,不会因此看到目标序列未来。
交叉注意力矩阵里的源 Padding 在哪里屏蔽?
源 Key 和 Value 对应矩阵的列,因此源端 Padding 通常在列方向被屏蔽,并在 Softmax 前压低其分数。