| Q56 | What is autoregressive generation in the context of LLMs
1️⃣ 考察意图
面试官想确认你是否真正理解 LLM 生成文本的底层机制,而非只会调 API。这是“背概念”题,但刁钻点在于:很多人能说出“逐个 token 生成”,却说不清因果注意力掩码的具体形状、KV cache 为何能加速、以及它与双向模型(如 BERT)在训练/推理上的根本差异。答好了能展示你对 Transformer 解码器架构的扎实理解,以及从原理到工程优化的完整流程思维。
2️⃣ 标准答
定义与核心机制
自回归生成是 LLM(如 GPT 系列)生成文本的标准范式:模型逐个 token 预测,每个新 token 的生成仅依赖之前已生成的所有 token。数学上,给定序列 x_1, x_2, ..., x_{t-1},模型输出 P(x_t | x_1, ..., x_{t-1}),然后采样或 argmax 得到 x_t,再将其拼入输入,重复直到遇到 <EOS> 或达到最大长度。
因果注意力掩码
这是自回归生成在 Transformer 中的具体实现。每个 token 在计算注意力时,只能看到自身及左侧的 token,看不到右侧。实现方式是在 softmax 之前,将上三角矩阵(右上角)的元素设为 -\infty(或一个极大负数),这样 softmax 后对应位置的权重为 0。形状是 L \times L 的矩阵(L 为序列长度),对角线及以下为 0,以上为 -\infty。
与双向模型的区别
- BERT(双向编码):训练时使用 [MASK] 和全连接注意力,每个 token 能看到整个序列。适合分类、NER 等理解任务,但不适合生成,因为生成时无法看到未来 token。
- GPT(单向自回归):训练时使用因果掩码,每个 token 只依赖过去。适合文本生成,但无法利用未来上下文做理解(如完形填空)。
优点与缺点
- 优点:生成序列天然连贯,因为每一步都基于完整的历史;训练稳定,损失函数是标准的交叉熵。
- 缺点:串行生成,速度慢(O(n) 步,每步 O(n²) 注意力计算);无法像非自回归模型(如 Mask-Predict)那样并行生成。
工程优化:KV Cache
推理时,每步计算注意力需要重新计算所有历史 token 的 Key 和 Value 矩阵。KV cache 将之前步的 K、V 矩阵缓存下来,新步只需计算当前 token 的 K、V,然后拼接到缓存中。这避免了重复计算,将每步复杂度从 O(n²) 降到 O(n)(仅计算新 token 的注意力)。实际落地时,KV cache 是推理引擎(如 vLLM、TensorRT-LLM)的核心优化,但要注意内存占用:对于 7B 模型,batch size=1、序列长度 2048 时,KV cache 约占用 2GB 显存(假设 FP16)。
实际落地的坑与解法
- 坑:KV cache 导致显存碎片化,因为不同序列长度不同,缓存大小动态变化。解法:使用 PagedAttention(vLLM 的核心思想),将 KV cache 分页管理,类似操作系统的虚拟内存,减少碎片并提高利用率。
- 坑:自回归生成在长序列时容易陷入重复循环(如“I love you love you love you...”)。解法:使用 top-k(k=40
50)或 top-p(p=0.90.95)采样,或引入重复惩罚(repetition penalty,如 1.2)。
进阶优化:Speculative Decoding
为了加速,可以用一个小模型(draft model)先快速生成多个候选 token,再用大模型(target model)并行验证。如果验证通过,一次前向传播就能生成多个 token,将串行步数从 n 降到 n/γ(γ 为 draft 长度,通常 35)。这在不改变生成质量的前提下,实现了 23 倍加速。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,定义上,自回归生成是逐个 token 预测,每个新 token 依赖历史,通过因果注意力掩码实现。第二,与双向模型(如 BERT)的区别:BERT 是全连接注意力,适合理解;GPT 是单向,适合生成。第三,工程优化:KV cache 避免重复计算,speculative decoding 实现并行加速。总结一句:自回归生成是 LLM 生成文本的基石,理解其原理和优化是面试和工程落地的关键。”
4️⃣ 高频追问 & 应对
追问 1:自回归生成和非自回归生成(如 Mask-Predict)有什么区别?什么时候用非自回归?
非自回归生成(如 Mask-Predict)一次性预测所有 token,然后迭代修正。优点是速度快(O(1) 步),但生成质量通常低于自回归,因为缺乏因果依赖。适用场景:对延迟极度敏感的任务(如机器翻译中的实时字幕),且对质量要求可适当放宽。工程上,非自回归模型需要额外的迭代修正步骤,复杂度与迭代次数成正比,实际中很少用于长文本生成。
追问 2:KV cache 在训练时能用吗?为什么?
不能。训练时我们使用 teacher forcing,即每一步的输入都是 ground truth,不需要缓存历史 K、V。而且训练时序列是完整的,可以并行计算所有位置的注意力(通过因果掩码),不需要串行生成。KV cache 只在推理时有用,因为推理时输入是逐步生成的,需要重复利用历史信息。
追问 3:如果序列长度超过训练时的最大长度,自回归生成会怎样?怎么处理?
模型会退化,因为位置编码(如 RoPE)没有外推能力,导致注意力分布异常。解法:使用 ALiBi 或 xPos 等具有外推性的位置编码;或者使用 sliding window attention(如 Mistral 的 4096 窗口),只关注最近 N 个 token,避免长序列退化。实际中,对于超长序列,建议先用 RAG 检索相关片段,再在片段内生成,而不是直接让模型生成长文本。
5️⃣ 避坑 · 常见错误答法
- ❌ 说“自回归生成就是 GPT 生成文本的方式,没什么特别的” → ✅ 应该解释因果注意力掩码的具体形状(上三角矩阵置为 -∞)和 softmax 后的效果,展示对 Transformer 内部机制的了解。
- ❌ 说“KV cache 能加速训练” → ✅ 明确 KV cache 只用于推理,训练时用 teacher forcing 和并行计算。
- ❌ 说“自回归生成是唯一的生成方式” → ✅ 补充非自回归生成(如 Mask-Predict)和 speculative decoding 作为对比和优化,展示知识广度。
6️⃣ 简历呼应
- 如果你有 LLM 推理优化项目:从 KV cache 和 PagedAttention 切入,讲你如何用 vLLM 或 TensorRT-LLM 优化推理吞吐,并对比自回归生成在 batch 推理时的显存管理。
- 如果你只做过传统 NLP(如 LSTM 语言模型):用 RNN 的自回归特性做类比,然后强调 Transformer 的因果掩码和并行训练优势,展示迁移能力。
- 如果你是校招无项目:聚焦论文复现,讲你实现过一个 2 层 Transformer 解码器,对比了有无 KV cache 的推理速度(如 128 token 时加速 3 倍),并分析生成序列的连贯性。
- 《Attention Is All You Need》—— Transformer 原始论文,理解因果掩码的数学定义
- 《Language Models are Few-Shot Learners》—— GPT-3 论文,展示自回归生成在 few-shot 场景的应用
- 《Efficient Memory Management for Large Language Model Serving with PagedAttention》—— vLLM 论文,深入 KV cache 优化
- 《Fast Inference from Transformers via Speculative Decoding》—— speculative decoding 原理解析
- 《RoFormer: Enhanced Transformer with Rotary Position Embedding》—— RoPE 位置编码,理解外推性问题