Q923LLM 基础概念真题解析LLM 基础AgentAlpha 社区真题库约 8 分钟更新 2026-09-29

八股:Encoder与decoder的中Attention区别

八股:Encoder与decoder的中Attention区别

1️⃣ 考察意图

面试官想考察你对Transformer核心机制的理解深度,而非简单背诵。这是典型的“背概念”题,但刁钻点在于:你是否能清晰区分Encoder的双向自注意力(Bidirectional Self-Attention)与Decoder的因果自注意力(Causal Self-Attention)及交叉注意力(Cross-Attention),并解释为什么这样设计。答好了能展示你对自回归生成、信息泄露、序列建模等底层原理的掌握,以及从BERT到GPT再到T5的架构演进逻辑,这是大模型岗位的硬实力。

2️⃣ 标准答

核心区别:注意力范围与掩码机制

  • Encoder Self-Attention(双向):每个token可以关注序列中所有token(包括自身),使用无掩码的全连接注意力。例如BERT,通过[MASK]预测任务,需要上下文双向信息。计算时,Q、K、V均来自同一序列,注意力分数矩阵无上三角掩码,每个位置都能看到全局。
  • Decoder Self-Attention(因果/单向):每个token只能关注自身及之前位置,使用因果掩码(Causal Mask),将未来位置的注意力分数设为负无穷(softmax后为0)。例如GPT系列,自回归生成时,预测第t个token只能依赖前t-1个,防止信息泄露。实际实现中,掩码矩阵是下三角全1矩阵(含对角线),与注意力分数相加前应用。
  • Decoder Cross-Attention(编码-解码交互):Decoder的Query来自自身(当前生成位置),Key和Value来自Encoder的最终输出。这实现了从源语言到目标语言的映射,是Seq2Seq(如T5、机器翻译)的关键。计算时,注意力范围是整个Encoder输出序列,无因果限制,但Decoder自身仍受因果掩码约束。

工程取舍与落地坑

  • 为什么Encoder不用因果掩码? 理解任务(分类、NER)需要全局上下文,双向注意力能捕捉更丰富的语义关系。如果强行用单向,BERT在GLUE上会掉3-5个点【通用知识】。
  • 为什么Decoder需要因果掩码? 生成任务必须保证自回归性,否则训练时模型会“偷看”未来token,导致推理时性能崩溃。例如训练翻译时,若Decoder能看到完整目标句,模型会直接复制而非学习映射。
  • 实际落地的坑:掩码实现细节。在FlashAttention或稀疏注意力中,因果掩码不能简单用布尔矩阵,需结合块稀疏模式。例如,用FlashAttention时,需将掩码分块处理,避免OOM。我曾遇到一个bug:在Decoder中误将Cross-Attention的Key也加了因果掩码,导致生成时无法关注源语言后半部分,BLEU直接掉到0。解法是:Cross-Attention的掩码应为None(或全1矩阵),仅对Self-Attention应用因果掩码。
  • Trade-off:计算效率。双向注意力计算量是O(n²),因果注意力可通过KV Cache优化为O(n)(推理时)。但训练时,因果注意力仍需完整矩阵,因为需要并行计算所有位置的损失。这也是为什么GPT训练比BERT慢(需逐位置计算,但实际通过掩码矩阵并行化)。

具体方法名与论文

  • 掩码类型:Padding Mask(忽略填充token)、Causal Mask(因果)、Sliding Window Mask(如Longformer)。
  • 注意力变体:Multi-Head Attention(Vaswani et al., 2017)、Grouped Query Attention(GQA,用于LLaMA)、FlashAttention(Dao et al., 2022)。
  • 架构示例:BERT(纯Encoder)、GPT(纯Decoder)、T5/BART(Encoder-Decoder)。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从三个层面回答:第一,注意力范围不同——Encoder是双向全连接,Decoder是因果单向;第二,掩码机制不同——Encoder无掩码,Decoder有因果掩码,且Decoder多一个Cross-Attention;第三,应用场景不同——Encoder适合理解任务,Decoder适合生成任务,Encoder-Decoder适合Seq2Seq。总结一句:核心区别在于是否允许关注未来信息,这决定了模型是双向理解还是单向生成。”

4️⃣ 高频追问 & 应对

追问 1:为什么BERT用双向注意力,但GPT用单向?双向不是更好吗?

双向注意力在理解任务上确实更强,因为能捕捉上下文。但生成任务必须自回归,否则推理时无法逐词生成。如果强行用双向,比如用BERT做生成,需要特殊设计(如Masked LM的随机采样),效率低且质量差。实际中,双向模型(如BERT)在NLU上领先,单向模型(如GPT)在NLG上领先,这是任务本质决定的。

追问 2:Decoder的Cross-Attention中,Q、K、V分别来自哪里?为什么这样设计?

Q来自Decoder的当前层输出(经过Self-Attention后),K和V来自Encoder的最终输出。这样设计是为了让Decoder在生成每个token时,能动态关注源语言的不同部分。例如翻译“I love you”到中文,生成“爱”时,Cross-Attention会重点对齐“love”。如果Q也来自Encoder,就变成了Encoder的Self-Attention,失去了编码-解码交互。

追问 3:如何实现因果掩码的高效计算?特别是长序列场景。

可以用FlashAttention的块稀疏掩码,将因果掩码分解为多个块,只计算下三角块。或者用Sliding Window Mask(如Mistral),限制每个token只关注前W个位置,降低复杂度到O(nW)。对于超长序列(如100K tokens),结合KV Cache和分页注意力(PagedAttention,vLLM使用),只缓存已生成token的KV,避免重复计算。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“Encoder和Decoder的注意力完全一样,只是输入不同” → ✅ 正确切入:强调掩码机制是核心区别,Encoder无掩码,Decoder有因果掩码,且Decoder多一个Cross-Attention。
  • ❌ 说“Decoder的Self-Attention是双向的,因为训练时能看到所有位置” → ✅ 正确切入:训练时虽然并行计算,但通过因果掩码强制每个位置只看之前,推理时同样逐位置生成。
  • ❌ 说“Cross-Attention只在Decoder中有,Encoder没有” → ✅ 正确切入:正确,但需补充Cross-Attention的Q来自Decoder,K/V来自Encoder,这是Seq2Seq的关键。

6️⃣ 简历呼应

  • 如果你有RAG项目:从检索增强生成切入,说明Encoder(如BERT)用于文档编码,Decoder(如LLaMA)用于生成,Cross-Attention在RAG中体现为检索结果与生成上下文的交互。
  • 如果你只做过传统NLP:用机器翻译类比,Encoder负责理解源语言(双向),Decoder负责生成目标语言(单向),Cross-Attention实现对齐,类似统计机器翻译的短语对齐。
  • 如果你是校招无项目:聚焦论文复现,比如用PyTorch实现一个简化Transformer,分别构建Encoder和Decoder模块,在IWSLT数据集上对比性能,并分析掩码对梯度传播的影响。
  • Vaswani et al., “Attention Is All You Need” (2017) - Transformer原始论文,理解注意力机制基础。
  • Devlin et al., “BERT: Pre-training of Deep Bidirectional Transformers” (2019) - 双向Encoder代表作。
  • Radford et al., “Improving Language Understanding by Generative Pre-Training” (2018) - 单向Decoder代表作(GPT-1)。
  • Dao et al., “FlashAttention: Fast and Memory-Efficient Exact Attention” (2022) - 高效注意力实现,含因果掩码优化。
  • Lewis et al., “BART: Denoising Sequence-to-Sequence Pre-training” (2020) - Encoder-Decoder架构,结合双向和单向。

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。