有什么不同作用?)
Transformer 解码器中的掩码Masking一、解码器中的两种掩码Transformer 解码器每层包含三个子层其中两个涉及掩码解码器层结构: ┌─────────────────────────────────────────────┐ │ 子层1: 掩码多头自注意力 │ │ (Masked Multi-Head Self-Attention) │ │ → 应用: 因果掩码 (Causal Mask) │ ├─────────────────────────────────────────────┤ │ 子层2: 交叉注意力 │ │ (Cross-Attention, Q来自解码器, KV来自编码器) │ │ → 无掩码或仅 padding mask │ ├─────────────────────────────────────────────┤ │ 子层3: 前馈网络 (FFN) │ └─────────────────────────────────────────────┘解码器中涉及两类掩码作用不同掩码类型作用应用位置因果掩码Causal Mask防止当前位置看到未来位置子层1掩码自注意力Padding Mask遮蔽填充位避免无效计算所有注意力层编码器/解码器/交叉二、因果掩码Causal Mask核心目的自回归生成的因果性解码器按自回归Autoregressive方式生成序列每个 token 只能依赖已生成的左侧token不能偷看未来右侧token。实现方式在计算注意力分数QKᵀ后、softmax 之前将上三角区域未来位置设为-∞注意力分数矩阵 (seq_len × seq_len)以 5 个 token 为例: 位置1 位置2 位置3 位置4 位置5 位置1 [ 0.8, -∞, -∞, -∞, -∞ ] ← 只能看自己 位置2 [ 0.3, 0.5, -∞, -∞, -∞ ] ← 看位置1~2 位置3 [ 0.1, 0.2, 0.6, -∞, -∞ ] ← 看位置1~3 位置4 [ 0.4, 0.1, 0.2, 0.7, -∞ ] ← 看位置1~4 位置5 [ 0.2, 0.3, 0.1, 0.4, 0.5 ] ← 看位置1~5 ↑ 下三角可关注含对角线 ↑ 上三角被掩码为 -∞softmax 后-∞变为0未来位置的注意力权重为零softmax 后: 位置3: [0.33, 0.67, 0.00, 0.00, 0.00] ↑ 未来权重0训练阶段 vs 推理阶段维度训练阶段推理阶段输入方式Teacher Forcing完整目标序列一次性输入逐 token 生成每次输入已生成的序列因果掩码必须使用并行计算所有位置但需掩码防止看到未来形式上存在但实际不触发每次输入只有左侧已生成 token天然无未来可看计算方式一次前向传播处理整个序列每步一次前向传播KV Cache 优化训练阶段详解训练时采用Teacher Forcing将完整目标序列如BOS 我 爱 你 EOS一次性输入解码器所有位置并行计算。因果掩码确保输入: BOS 我 爱 你 EOS ↑ ↑ ↑ ↑ ↑ 输出: 我 爱 你 EOS pad 位置1(BOS) → 预测我 只能看到 BOS 位置2(我) → 预测爱 只能看到 BOS 我 位置3(爱) → 预测你 只能看到 BOS 我 爱 位置4(你) → 预测EOS 只能看到 BOS 我 爱 你没有因果掩码位置2 会看到爱 你 相当于作弊——模型不需要真正学习预测直接从未来抄答案。因果掩码保证每个位置只能利用已出现的信息与推理时的条件一致。推理阶段详解步骤1: 输入 BOS → 预测 我 步骤2: 输入 BOS 我 → 预测 爱 步骤3: 输入 BOS 我 爱 → 预测 你 步骤4: 输入 BOS 我 爱 你 → 预测 EOS每步输入的序列中只有已生成的 token不存在未来信息因果掩码在形式上仍应用保持与训练一致但上三角区域本就为空实际不产生遮蔽效果。三、Padding Mask核心目的忽略填充位置批处理时不同序列长度不一需用pad填充至等长。Padding Mask 将填充位的注意力分数设为-∞避免无效 token 干扰计算。序列: [BOS, 我, 爱, 你, EOS, pad, pad] ↑ 有效 ↑ 填充 Padding Mask: [ 0, 0, 0, 0, 0, -∞, -∞ ]应用范围位置是否需要原因编码器自注意力✅输入序列有 padding解码器自注意力✅目标序列有 padding解码器交叉注意力✅对 K 侧编码器输出含 padding四、两种掩码的叠加在解码器自注意力中因果掩码和 Padding Mask同时使用通过逐元素取最大值或相加合并最终 mask Causal Mask ∪ Padding Mask 位置1 位置2 位置3 位置4 位置5(pad) 位置1 [ 0, -∞, -∞, -∞, -∞ ] ← 因果掩码 位置2 [ 0, 0, -∞, -∞, -∞ ] 位置3 [ 0, 0, 0, -∞, -∞ ] ← -∞ 来自因果 位置4 [ 0, 0, 0, 0, -∞ ] 位置5 [ 0, 0, 0, 0, -∞ ] ← -∞ 来自 padding五、训练与推理的完整对比维度训练推理输入完整目标序列Teacher Forcing逐步增长的已生成序列并行度所有位置并行计算每步仅计算最后一个位置KV Cache因果掩码关键防止并行计算时看到未来形式上保留实际无未来可掩Padding Mask需要batch 内序列等长填充通常不需要单条序列无 padding计算量O(T²) 一次完成O(T²) 总计但分 T 步KV Cache 优化为 O(T)输出所有位置同时输出 logits每步输出一个 token掩码核心作用保证并行训练与串行推理的一致性主要保证与训练时计算路径一致六、为什么训练和推理的掩码处理必须一致这是 Transformer 自回归模型设计的核心原则训练时并行: 位置 t 的输出 f(x₁, x₂, ..., xₜ) ← 因果掩码保证 推理时串行: 位置 t 的输出 f(x₁, x₂, ..., xₜ) ← 天然保证 两者必须完全一致否则训练-推理不匹配exposure bias训练时用因果掩码模拟推理的串行条件确保模型在训练时学到的条件分布P(yₜ | y₁, ..., yₜ₋₁)与推理时实际使用的条件一致如果训练时不掩码模型学到的是P(yₜ | y₁, ..., y_T)看到全部推理时却只有P(yₜ | y₁, ..., yₜ₋₁)导致严重性能下降七、一句话总结Transformer 解码器使用两类掩码因果掩码在自注意力中将上三角未来位置置为 -∞确保自回归生成的因果性Padding Mask遮蔽填充位避免无效计算。训练阶段因采用 Teacher Forcing 并行处理整个序列因果掩码至关重要——它使并行计算等价于串行生成防止模型偷看未来推理阶段逐 token 生成天然无未来可见因果掩码形式上保留但实际不触发。两种掩码叠加使用核心目标是保证训练与推理时每个位置的条件依赖关系完全一致。