
🎪 摸鱼匠:个人主页
🎒 个人专栏:《大模型岗位面试题》
🥇 没有好的理念,只有脚踏实地!

文章目录
-
-
- 一、三种架构的灵魂差异与适用场景
-
- [1. Encoder-only (代表:BERT, RoBERTa, DeBERTa)](#1. Encoder-only (代表:BERT, RoBERTa, DeBERTa))
- [2. Decoder-only (代表:GPT 系列, Llama, Qwen, Mistral)](#2. Decoder-only (代表:GPT 系列, Llama, Qwen, Mistral))
- [3. Encoder-Decoder (代表:T5, BART, Flan-T5, NLLB)](#3. Encoder-Decoder (代表:T5, BART, Flan-T5, NLLB))
- 二、训练与推理阶段的深度解析(工程视角)
-
- [1. 训练阶段 (Training)](#1. 训练阶段 (Training))
- [2. 推理阶段 (Inference)](#2. 推理阶段 (Inference))
- 三、面试题专业级深度解析
-
- [❓ 考点一:为什么现在的开源大模型(LLM)几乎清一色选择了 Decoder-only 架构?放弃了 Encoder-Decoder 吗?](#❓ 考点一:为什么现在的开源大模型(LLM)几乎清一色选择了 Decoder-only 架构?放弃了 Encoder-Decoder 吗?)
- [❓ 考点二:请手写或口述 Decoder-only 推理时 KV Cache 的更新过程。如果不使用 KV Cache 会怎样?](#❓ 考点二:请手写或口述 Decoder-only 推理时 KV Cache 的更新过程。如果不使用 KV Cache 会怎样?)
- [❓ 考点三:BERT (Encoder-only) 能做生成任务吗?如果能,怎么做?有什么缺陷?](#❓ 考点三:BERT (Encoder-only) 能做生成任务吗?如果能,怎么做?有什么缺陷?)
- [❓ 考点四:在 RAG 系统中,为什么检索阶段用 Embedding (often Encoder-only),而重排序 (Rerank) 阶段也常用 Cross-Encoder (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 Vector,Decoder 不容易"幻觉"掉输入中的关键信息。
- 现状:在大模型时代,由于需要训练两套参数(显存成本高)且推理速度受限于 Cross-Attention,纯 Decoder 架构正在吞噬它的领地。但在特定垂直领域(如高精度翻译),它依然有不可替代性。
二、训练与推理阶段的深度解析(工程视角)
这部分是面试中考察"你是否真的手搓过模型"或"是否深入看过源码"的关键。
1. 训练阶段 (Training)
| 架构 | 输入处理 | 注意力掩码 (Mask) | Loss 计算 | 关键细节 |
|---|---|---|---|---|
| Encoder-only | 整句输入,随机 Mask 掉 15% token | 无因果掩码,全连接。但需 Mask 掉被遮盖的 token 防止偷看。 | 仅计算 被 Mask 位置 的 Loss。 | 需要特殊的 [MASK] 标记。推理时没有这个标记,存在预训练 - 微调偏差。 |
| Decoder-only | 整句输入 | 因果掩码 (下三角) 。位置 i i i 只能 attend 0 → i 0 \to i 0→i。 | 计算 所有位置 (或除第一个外) 的 Loss。 | 数据利用率高。通常会将 Padding 部分的 Loss 屏蔽掉。 |
| Encoder-Decoder | 输入给 Encoder;Target 右移一位给 Decoder | Encoder: 全连接。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 \dots Step1→Token1→Step2...
- KV Cache (核心考点) :
- 原理 :在生成第 t t t 步时,历史序列 0 → t − 1 0 \to t-1 0→t−1 的 K K K 和 V V V 矩阵是不变的。我们把它缓存起来,每一步只计算当前新 Token 的 Q , K , V Q, K, V Q,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, V K,V (作为 Cross-Attention 的源)。
- Decode :类似 Decoder-only 的自回归,但每一步除了更新自身的 KV Cache,还要去查 Encoder 缓存的 K , V K, V K,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-1 t−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 t t 个 token x t x_t xt。
- 计算当前的 q t , k t , v t q_t, k_t, v_t qt,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, V K,V。计算量随序列长度呈 O ( N 2 ) O(N^2) O(N2) 增长。生成第 1000 个字时,要把前 999 个字重算一遍,速度会慢到无法接受(延迟从几十毫秒变成几秒)。
- 过程 :
-
易错点:
- 搞混 Q , K , V Q, K, V Q,K,V 的来源。记住:只有当前步 的 Q Q Q 是新的,历史的 K , V K, V K,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-Encoder trade-off 的理解,这是工业界落地的经典问题。
- Embedding (Bi-Encoder) :Query 和 Document 分别 通过 Encoder 得到向量,然后算余弦相似度。
总结与建议
作为程序员,在面试或架构选型时:
- 默认选 Decoder-only:除非你有极其明确的理由(如超低延迟的特定翻译任务、纯分类任务且资源受限),否则现在的大模型基座、微调、应用开发,首选 Decoder。
- 不要忽视 Encoder:在 RAG 的 Rerank 阶段、敏感内容过滤、高精度语义匹配中,BERT 类模型依然是王者,性价比极高。
- 理解原理大于背诵 :面试官更想听到你讲 KV Cache 的显存瓶颈 、双向注意力的训练推理差异 、数据利用率的数学本质,而不是背诵定义。
希望这份解析能帮你在面试中"降维打击"!如果有具体的代码实现细节想探讨,欢迎一起学习!