标准回答
结论先行
Encoder 和 Decoder 的多头自注意力机制并不相同。它们底层的计算公式(缩放点积注意力 + 多头)一致,但在「能看到哪些位置」以及「Q/K/V 从哪里来」这两点上有本质差别,这正是序列理解任务和自回归生成任务的需求差异决定的。
Encoder:双向自注意力
Encoder 的目标是充分理解整条输入序列,所以它的自注意力是双向、无掩码的:序列中任意一个位置在计算注意力时,都能同时看到它左边和右边的所有 token。比如理解「他把苹果吃了」,编码「苹果」这个词时既能参考前面的「他」,也能参考后面的「吃」,从而得到融合全局上下文的表示。
Decoder:带因果掩码的单向自注意力
Decoder 用于自回归地逐个生成 token,生成第 t 个词时,模型只应该依赖已经生成的前 t-1 个词,绝不能「偷看」还没生成的未来词,否则训练(teacher forcing)与推理就会不一致,造成信息泄露。
实现方式是因果掩码(causal mask / look-ahead mask):在 softmax 之前,把注意力分数矩阵中所有「未来位置」对应的元素置为 -∞,softmax 后这些位置的权重变为 0。于是每个位置只能注意到自己及之前的位置,形成下三角的注意力结构。这就是 Encoder 与 Decoder 自注意力最直观的区别——一个全可见,一个只看过去。
Decoder 还多一层 Cross-Attention
标准 Encoder-Decoder 架构里,Decoder 每个 block 通常包含两层注意力:先是上面说的带掩码的自注意力,紧接着是一层 cross-attention(编码器-解码器注意力)。
cross-attention 的关键在于 Q、K、V 的来源不同:Query 来自 decoder 当前层的输出(解码端正在生成的内容),而 Key 和 Value 来自 encoder 的最终输出(源序列的编码表示)。这一层让解码端在生成每个词时,去「查询」源序列里哪些部分最相关——这正是机器翻译里对齐源语言与目标语言的机制。注意 cross-attention 通常不需要因果掩码,因为整条源序列在生成时本就全部可见。
两类掩码/注意力的区别要讲清
总结成一句:因果掩码控制的是「同一序列内部,每个位置往回能看多远」;cross-attention 控制的是「解码端如何把另一条序列(编码端输出)的信息引进来」。前者是关于时间方向的约束,后者是关于跨序列的信息融合,面试时把这两点分开说清楚最能体现理解深度。
常见误区
⚠️ 常见踩坑
常见错误一:以为 Encoder 和 Decoder 的注意力完全一样,只是参数不同——其实掩码方式和层数结构都不同。错误二:把因果掩码和 padding 掩码混为一谈——padding 掩码屏蔽的是补齐用的无效 token,与方向无关,因果掩码屏蔽的是未来位置。错误三:以为 cross-attention 也要加因果掩码——源序列在解码时整条都可见,通常无需因果遮挡。
追问
追问 1:为什么纯 Decoder 架构(如 GPT)没有 cross-attention,却依然能工作?
GPT 这类纯 Decoder 模型把输入和待生成内容拼成一条序列,统一用带因果掩码的自注意力处理,prompt 部分自然充当了「上下文」,模型靠自注意力就能关注到前文,因此不需要单独的 cross-attention 层。cross-attention 主要存在于 Encoder-Decoder 架构(如原始 Transformer、T5)中,用来连接两条独立的序列(源与目标)。
追问 2:因果掩码具体在注意力计算的哪一步生效,softmax 前还是后?
在 softmax 之前。计算出 QKᵀ/√d 的注意力分数矩阵后,对所有「未来位置」对应的分数加上一个极大的负数(如 -1e9 或 -∞),再做 softmax,这些位置的指数项趋近于 0,权重几乎为零。若放在 softmax 之后再置零,则剩余权重之和不再为 1,破坏了归一化,所以必须在 softmax 前完成掩码。
追问 3:训练时 Decoder 能并行计算所有位置,推理时却要逐个生成,这与掩码有什么关系?
训练用 teacher forcing,完整的目标序列已知,靠因果掩码保证每个位置只用到它之前的真实 token,于是所有位置可以一次性并行算完。推理时未来 token 尚未生成,只能自回归地一步一步产出,每生成一个再喂回去,因此天然是串行的。掩码让训练阶段在「全序列可见」的张量上模拟出「只能看过去」的效果,从而兼顾并行效率与生成正确性,常配合 KV Cache 加速推理。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习