面试题7:Encoder-only、Decoder-only、Encoder-Decoder三种架构的差异与适用场景?

张开发
2026/5/8 13:42:01 15 分钟阅读

分享文章

面试题7:Encoder-only、Decoder-only、Encoder-Decoder三种架构的差异与适用场景?
摸鱼匠个人主页 个人专栏《大模型岗位面试题》 没有好的理念只有脚踏实地文章目录一、三种架构的灵魂差异与适用场景1. Encoder-only (代表BERT, RoBERTa, DeBERTa)2. Decoder-only (代表GPT 系列, Llama, Qwen, Mistral)3. Encoder-Decoder (代表T5, BART, Flan-T5, NLLB)二、训练与推理阶段的深度解析工程视角1. 训练阶段 (Training)2. 推理阶段 (Inference)三、面试题专业级深度解析❓ 考点一为什么现在的开源大模型LLM几乎清一色选择了 Decoder-only 架构放弃了 Encoder-Decoder 吗❓ 考点二请手写或口述 Decoder-only 推理时 KV Cache 的更新过程。如果不使用 KV Cache 会怎样❓ 考点三BERT (Encoder-only) 能做生成任务吗如果能怎么做有什么缺陷❓ 考点四在 RAG 系统中为什么检索阶段用 Embedding (often Encoder-only)而重排序 (Rerank) 阶段也常用 Cross-Encoder (Encoder-only)它们有什么区别总结与建议你好那咱们就跳过那些“什么是Transformer”的基础科普直接切入架构设计的底层逻辑、工程落地的权衡以及面试中那些能一眼看出你水平的“深水区”问题。现在的技术圈2026年视角虽然 Decoder-only 一统江湖但理解另外两种架构的兴衰和特定场景下的优势依然是区分“调包侠”和“架构师”的关键。一、三种架构的灵魂差异与适用场景这三种架构的本质区别不在于层数多少而在于信息流动的方向注意力掩码和训练目标的哲学。1. Encoder-only (代表BERT, RoBERTa, DeBERTa)核心机制双向注意力 (Bidirectional Attention)。每个 Token 都能“看到”序列中所有的其他 Token除了自己。训练目标MLM (Masked Language Modeling)。把句子挖空让模型根据上下文猜词。这是一种“完形填空”式的理解训练。适用场景纯理解任务文本分类、情感分析、命名实体识别 (NER)。RAG 中的重排序 (Rerank)这是目前最火的落地场景。因为双向视野能精准计算 Query 和 Document 之间的深层语义匹配度比向量检索Embedding更准。语义相似度匹配如 Sentence-BERT。致命弱点无法直接用于自回归生成。因为它训练时看到了“未来”如果用来生成一旦第一个词出来后续词就会依赖“未来的答案”导致推理时的分布偏移Exposure Bias。2. Decoder-only (代表GPT 系列, Llama, Qwen, Mistral)核心机制因果注意力 (Causal/Masked Attention)。每个 Token 只能看到自己和它之前的 Token。这是一个下三角矩阵的掩码。训练目标Next Token Prediction。根据前面的词猜下一个词。适用场景生成式任务对话、代码生成、创意写作。通用大模型 (AGI 方向)目前的绝对主流。通过 Prompt Engineering 和 In-context Learning它能模拟分类、抽取甚至推理任务。流式输出天然支持一个字一个字往外蹦。优势训练数据利用率极高每个位置都算 Loss推理工程优化KV Cache极其成熟。3. Encoder-Decoder (代表T5, BART, Flan-T5, NLLB)核心机制混合模式。Encoder 部分双向注意力负责“读懂”输入。Decoder 部分单向注意力 Cross-Attention。Decoder 不仅看自己生成的历史还通过 Cross-Attention 去“查询”Encoder 输出的完整语义表示。训练目标Seq2Seq。输入一个序列输出另一个序列可以是翻译、摘要也可以是带指令的文本。适用场景强转换任务机器翻译尤其是低资源语言、长文档摘要输入极长输出极短、结构化数据生成。需要严格遵循输入语义的场景因为 Encoder 把输入压缩成了完美的 Context VectorDecoder 不容易“幻觉”掉输入中的关键信息。现状在大模型时代由于需要训练两套参数显存成本高且推理速度受限于 Cross-Attention纯 Decoder 架构正在吞噬它的领地。但在特定垂直领域如高精度翻译它依然有不可替代性。二、训练与推理阶段的深度解析工程视角这部分是面试中考察“你是否真的手搓过模型”或“是否深入看过源码”的关键。1. 训练阶段 (Training)架构输入处理注意力掩码 (Mask)Loss 计算关键细节Encoder-only整句输入随机 Mask 掉 15% token无因果掩码全连接。但需 Mask 掉被遮盖的 token 防止偷看。仅计算被 Mask 位置的 Loss。需要特殊的[MASK]标记。推理时没有这个标记存在预训练 - 微调偏差。Decoder-only整句输入因果掩码 (下三角)。位置i ii只能 attend0 → i 0 \to i0→i。计算所有位置(或除第一个外) 的 Loss。数据利用率高。通常会将 Padding 部分的 Loss 屏蔽掉。Encoder-Decoder输入给 EncoderTarget 右移一位给 DecoderEncoder: 全连接。Decoder: 因果掩码 Cross-Attention(Q 来自 Decoder, KV 来自 Encoder)。仅计算Decoder 输出端的 Loss。Teacher Forcing训练时 Decoder 输入是真实的上一时刻标签而不是自己预测的。2. 推理阶段 (Inference)Encoder-only:一次性前向传播。输入整个句子直接拿到每个位置的 Hidden State。速度极快并行度最高。用途直接接分类头输出类别或计算[CLS]向量做检索。Decoder-only:自回归 (Autoregressive)不能并行生成。必须S t e p 1 → T o k e n 1 → S t e p 2 … Step_1 \to Token_1 \to Step_2 \dotsStep1​→Token1​→Step2​…KV Cache (核心考点)原理在生成第t tt步时历史序列0 → t − 1 0 \to t-10→t−1的K KK和V VV矩阵是不变的。我们把它缓存起来每一步只计算当前新 Token 的Q , K , V Q, K, VQ,K,V然后拼接到 Cache 上。作用将计算复杂度从O ( N 2 ) O(N^2)O(N2)降为O ( N ) O(N)O(N)(针对每一步)极大提升推理速度。显存代价随着序列变长KV Cache 占用显存线性增长这是长上下文推理的瓶颈。Encoder-Decoder:两阶段Encode一次性跑完 Encoder缓存所有输入的K , V K, VK,V(作为 Cross-Attention 的源)。Decode类似 Decoder-only 的自回归但每一步除了更新自身的 KV Cache还要去查 Encoder 缓存的K , V K, VK,V。瓶颈Cross-Attention 需要每次解码步都重新计算对 Encoder 输出的注意力且显存要存两套权重。三、面试题专业级深度解析作为面试官我问这些问题不是为了听背书而是看你对**Trade-off权衡**的理解。❓ 考点一为什么现在的开源大模型LLM几乎清一色选择了 Decoder-only 架构放弃了 Encoder-Decoder 吗标准答案逻辑训练效率与数据利用率Decoder-only 可以对序列中每一个 Token 计算 Loss除了首个而 Encoder-only (MLM) 只能对 15% 的 Mask token 计算 Loss。这意味着同样的数据量Decoder 的梯度更新信号多 6-7 倍收敛更快。推理工程统一性Decoder-only 架构在推理时只需维护一套权重和一套 KV Cache 机制。Encoder-Decoder 需要加载两部分参数且 Cross-Attention 增加了显存带宽压力和延迟。在追求极致推理速度TPOT, Time Per Output Token的场景下Decoder 更优。In-Context Learning (ICL) 能力研究发现单纯的 Decoder 架构在大规模预训练后展现出了惊人的少样本学习能力。通过 Prompt它可以模拟分类、抽取等 Encoder 擅长的任务虽然精度可能略逊于专用 Encoder但通用性碾压。生态马太效应GPT 的成功证明了 Scaling Law 在 Decoder 上的有效性所有的算子优化如 FlashAttention, PagedAttention都优先适配 Decoder导致后来者只能跟进。易错点/减分项只说“GPT 效果好”没提到数据利用率和推理显存/带宽的工程细节。断言“Encoder-Decoder 已死”。加分项指出在低资源机器翻译、极度精炼的摘要任务或者需要严格对齐输入输出的场景中T5/BART 类架构仍有价值只是不适合做通用基座模型。❓ 考点二请手写或口述 Decoder-only 推理时 KV Cache 的更新过程。如果不使用 KV Cache 会怎样标准答案逻辑过程假设生成了t − 1 t-1t−1个 token缓存了K c a c h e , V c a c h e K_{cache}, V_{cache}Kcache​,Vcache​(形状[ b a t c h , h e a d s , s e q _ l e n t − 1 , d i m ] [batch, heads, seq\_len_{t-1}, dim][batch,heads,seq_lent−1​,dim])。输入第t tt个 tokenx t x_txt​。计算当前的q t , k t , v t q_t, k_t, v_tqt​,kt​,vt​。拼接K n e w c o n c a t ( K c a c h e , k t ) K_{new} concat(K_{cache}, k_t)Knew​concat(Kcache​,kt​),V n e w c o n c a t ( V c a c h e , v t ) V_{new} concat(V_{cache}, v_t)Vnew​concat(Vcache​,vt​)。计算 Attention:A t t e n t i o n ( q t , K n e w , V n e w ) Attention(q_t, K_{new}, V_{new})Attention(qt​,Knew​,Vnew​)。更新缓存供下一步使用。后果如果不使用 KV Cache每一步生成都需要将整个历史序列重新输入模型重新计算所有历史 Token 的K , V K, VK,V。计算量随序列长度呈O ( N 2 ) O(N^2)O(N2)增长。生成第 1000 个字时要把前 999 个字重算一遍速度会慢到无法接受延迟从几十毫秒变成几秒。易错点搞混Q , K , V Q, K, VQ,K,V的来源。记住只有当前步的Q QQ是新的历史的K , V K, VK,V是查表得来的。忽略显存问题。提到 KV Cache 不仅加速还消耗显存这是长上下文Long Context的主要瓶颈引出 PagedAttention 等优化技术会是巨大的加分项。❓ 考点三BERT (Encoder-only) 能做生成任务吗如果能怎么做有什么缺陷标准答案逻辑理论上能但不推荐。方法伪自回归每次预测一个 Mask 位置填上后再 Mask 下一个位置循环往复。插入法类似 Insertion Transformer预测在两个 token 之间插入什么。缺陷推理极慢无法并行生成且每次都要重新跑一遍 Encoder。分布偏移 (Exposure Bias)训练时看到的是[MASK]标记推理时看到的是自己生成的可能错误的Token。这种输入分布的不一致会导致错误累积。多模态问题双向注意力导致它倾向于生成“平均化”的词缺乏多样性。加分项提到MaskGIT或非自回归生成 (Non-autoregressive Generation)的研究说明你关注前沿。这些技术试图用 Encoder 架构做并行生成通过迭代去噪的方式解决上述问题。❓ 考点四在 RAG 系统中为什么检索阶段用 Embedding (often Encoder-only)而重排序 (Rerank) 阶段也常用 Cross-Encoder (Encoder-only)它们有什么区别标准答案逻辑Embedding (Bi-Encoder)Query 和 Document分别通过 Encoder 得到向量然后算余弦相似度。优点可以预先计算好文档向量线上只做一次 Query 编码速度极快 (O ( 1 ) O(1)O(1)查找)。缺点交互不充分精度相对低。Rerank (Cross-Encoder)Query 和 Document拼接在一起[CLS] Query [SEP] Doc [SEP]输入同一个 Encoder。优点利用双向注意力Query 的每个词都能 attend 到 Doc 的每个词捕捉细粒度语义关联精度极高。缺点无法预计算。每来一个 Query要和所有候选文档做一次前向传播计算量大 (O ( N ) O(N)O(N))只能用于精排Top 100 - Top 5。考点本质考察对Bi-Encoder vs Cross-Encodertrade-off 的理解这是工业界落地的经典问题。总结与建议作为程序员在面试或架构选型时默认选 Decoder-only除非你有极其明确的理由如超低延迟的特定翻译任务、纯分类任务且资源受限否则现在的大模型基座、微调、应用开发首选 Decoder。不要忽视 Encoder在 RAG 的 Rerank 阶段、敏感内容过滤、高精度语义匹配中BERT 类模型依然是王者性价比极高。理解原理大于背诵面试官更想听到你讲KV Cache 的显存瓶颈、双向注意力的训练推理差异、数据利用率的数学本质而不是背诵定义。希望这份解析能帮你在面试中“降维打击”如果有具体的代码实现细节想探讨欢迎一起学习

更多文章