☰
大模型面试八股文:从Transformer到LoRA与RAG的高频考点知识地图
2026/10/19 6:31:34 网站建设 项目流程

如果你也在准备大模型方向的技术面试,大概没少听过一个说法:大模型八股文。最初我也不太喜欢这个词,因为听起来像死记硬背。但真正把资料整理完一轮之后,我反而觉得它是有用的:大模型知识面太宽,如果不用高频问题做主线,很容易出现“学了后面忘了前面”的情况。这份资料覆盖基础面、微调、Transformer、LangChain、Agent、RAG、LoRA、推理、分布式训练这些模块,与其说是一堆答题模板,不如说是一张从底层原理到工程应用的知识地图。适合两类人:一类是正在冲刺大模型算法或应用岗位的候选人,另一类是刚入行、想系统补齐大模型知识的技术人员。

1. 先说说我为什么整理这套“大模型八股文”

1.1 “八股文”不是贬义,而是高频考点的索引

传统面试里的“八股文”常被用来形容背诵量大的基础题,比如很多算法岗候选人会被问到“过拟合怎么办”“核函数怎么选”。到了大模型时代,题目换了皮,但本质没有变:面试官需要快速判断候选人是否真的理解模型背后的机制。于是“你对注意力机制怎么看”“LoRA为什么有效”“RAG和微调怎么选择”这类固定问题就成了新一代高频考点。

我把这些高频问题整理成资料,并不是为了让大家背标准答案,而是把它们作为知识索引。每个问题背后都对应一条技术主线:位置编码为什么重要,对应的是Transformer缺少顺序信息;KV Cache是用来干什么的,对应的是推理阶段的重复计算问题;为什么要用分布式训练,对应的是单卡显存放不下大模型。把问题树搭起来之后,记起来会轻松很多,面试被追问时也能更从容地找到下一句话该说什么。

1.2 我的整理框架:按“原理—训练—部署—应用”四层切分

资料里的模块很多,如果平铺直叙会显得零散。我最终按四层来组织:基础层、训练层、推理部署层、应用层。这张表大概能说明每一层面试官真正想听什么。

层级包含模块面试官想听到什么
基础层Tokenization、Transformer、常用归一化能解释设计动机,而不是背结构图
训练层微调、LoRA、分布式训练能说清参数约束和工程取舍
推理部署层KV Cache、量化、吞吐优化能估算成本,知道瓶颈在哪
应用层LangChain、Agent、RAG能设计流程,能定义评估指标

这个分层也决定了复习顺序。我见过不少候选人一上来就背Agent的高级用法,被追问到底层Embedding原理时反而说不清,这种“上层熟、底层生”的状态在面试里最吃亏。如果你也是刚开始接触这套资料,建议先放下“最新模型叫什么”的焦虑,把基础层的几个核心问题吃透,后面的内容会顺畅很多。

1.3 整理资料时踩过的两个坑

第一个坑是只追最新模型。大模型技术更新极快,新架构、新训练技巧几乎每周都有。但如果基础不牢,单纯记新模型的名字没有任何意义。面试官更看重的往往不是“我知道最新模型”,而是“给定一个模型,我能分析它的结构、推理成本、适用场景”。第二个坑是只背概念不跑实验。八股文能帮你“说出来”,但“做出来”得靠手动实践。我后面会专门说到,哪怕只是跑一个很小的LoRA微调Demo,收获也比多背十道题大。

2. 基础面:从Tokenizer到参数量,这些考点绕不开

2.1 Tokenization:为什么大模型不直接按词切分

大部分自然语言处理任务都需要把文本变成离散的Token序列。如果按空格切词,很容易遇到未登录词,一个没见过的单词会让模型束手无策。如果按字符切,序列会变得非常长,注意力计算成本跟着上涨。所以现代模型普遍使用子词切分方法,最常见的是BPE(Byte Pair Encoding)。

BPE的核心思路很朴素:从字符开始,反复合并“当前语料里出现频率最高”的相邻符号,直到词表达到预设大小。这样既能把常见词保留成完整Token,又能把罕见词拆成几个常见子词片段,兼顾容量与泛化。资料里我特意标注了一个易错点:BPE不是按语义切分,而是按统计频率切分,所以像“unbelievable”可能被切分成“un”“believ”“able”。这个概念在后续讨论Embedding和词表设计时经常被拿出来考。

2.2 参数量估算:给“多少B”一个参照系

“7B模型到底有多少参数”“为什么显存装不下”是高频题。一个Decoder-only模型的参数主要来自词嵌入和每层Transformer块。以常见的实现为例,如果隐藏维度为h、层数为L,那么单层Transformer参数通常接近12h²的量级:自注意力部分约4h²,也就是Q、K、V三个投影加输出投影,MLP部分约8h²,对应两层全连接。再加上词嵌入,一个模型的参数量基本可以估算出来。

用这个公式可以做数量级判断。假设一个0.5B级别的小模型,隐藏维度约1024,层数约24,单层参数约1200万,24层约3亿,加上词嵌入和输出头,规模就落在5亿左右。面试时不需要背精确数字,能说出“主要参数集中在Transformer层”“嵌入层占比随词表变大而上升”就已经比单纯背参数的人强得多。能估算参数量,后面判断“需要多少张卡”才会有杆秤。

2.3 位置编码与归一化:最容易被忽略却最常被追问

注意力机制本身没有顺序概念,所以需要显式加入位置信息。早年的位置编码是绝对正余弦,后来大家更常用相对位置编码或旋转位置编码。旋转位置编码通过给向量应用旋转矩阵,使两个Token的内积只与它们的相对位置有关,这种性质对大模型长度外推有实际帮助。被问到“为什么旋转位置编码能外推”时,核心回答是:它把位置信息融合进注意力计算,模型在长序列上更容易捕获相对距离,而不是机械记忆绝对位置。

归一化方面,早期Transformer使用LayerNorm,现在很多大模型选择RMSNorm。LayerNorm对每个样本的特征做归一化,和BatchNorm不一样,不会受batch大小波动影响,更适合变长文本。RMSNorm进一步去掉了均值平移,只保留缩放项,计算更省,训练也更稳定。能说清“为什么不用BatchNorm”,面试官通常就会觉得你对基础部分是认真过的。

3. Transformer与微调:把架构和训练串成一条线

3.1 自注意力:Q、K、V以及那个 sqrt(d_k)

自注意力是Transformer的基石。输入序列中的每个Token都会生成三个向量:Query、Key、Value。可以这样理解:Query表示“当前Token想查询什么”,Key表示“其他Token能提供什么”,Value表示“实际提供的内容”。注意力分数等于Query和Key做点积,再除以根号下Key的维度,然后经过Softmax得到权重,最后对Value做加权求和。

除根号维度这一步经常被追问。点积数值会随向量维度增大而变大,比如维度是64时,每一维如果期望是0、方差是1,点积后的方差大约就是64,数值跨度变大后Softmax容易进入饱和区,梯度会变小。除以根号维度相当于把方差拉回1左右,让Softmax的分布不至于极端,训练更稳定。至于多头注意力,就是把注意力拆到多个子空间里,让模型能同时关注词法、指代、句法等不同关系,最后再拼接回完整维度。我在资料里特别标注了一个小点:单个头的表达能力会随维度下降,所以头数不是越大越好,而是要和模型尺寸匹配。

3.2 残差与归一化:为什么它们能让Transformer堆到几十层

如果只用自注意力加全连接堆叠,深层网络极易出现梯度消失或表示退化。残差连接的意义是给梯度提供一条“抄近道”的通道,让模型在很深的层数下仍能稳定训练。每个子层输出等于“输入+子层处理结果”,这样即使子层内部参数发生变化,输入信息也能被完整保留。归一化则是为了控制每一层输出的数值范围,避免数值过小或过大。

在Transformer里通常用LayerNorm,它对每一个样本的所有特征归一化,不受其他batch样本影响,因此天然适合动态长度的文本输入。这个组合衍生出两个经典问题:先归一化还是先残差?早期实现大多在残差之后做归一化,现在很多模型选择Pre-LN,也就是先归一化再进入子层。Pre-LN训练更稳定,但理论上表达能力略有损失。候选人能提到这两种顺序的区别,说明不是只看过结构图,而是真的理解过训练过程中的数值流动。

3.3 微调与LoRA:低成本更新模型的底层逻辑

全量微调的一个重大问题是成本太高:7B级别的模型,即使只更新少量epoch,也需要保存梯度、优化器状态,显存压力远大于推理。参数高效微调因此成为大模型应用的主流路线,LoRA是其中最常用的方法之一。

LoRA的核心思想非常直白:不修改原始权重矩阵W,而是在旁边增加一个低秩增量ΔW。前向时计算h = Wx + ΔWx,其中ΔW被分解成B×A。A从高斯分布初始化,B初始化为全零,所以训练刚开始时增量就是0,模型保持原版状态。训练结束后,可以把W和B×A合并成一个新权重,推理时几乎没有额外开销。

为什么低秩增量有效?很多资料只回答“公式简单”,但没有解释“为什么秩低没关系”。一个重要的观察是,模型在微调任务上的权重变化很多时候只需要一个很小的子空间来描述,并不需要重新学一遍整个矩阵。打个比方:一个知识渊博的专家学习新领域时,只需要修改一小部分笔记,而不是重写整本百科全书。这也是LoRA能在极低显存开销下保持不错效果的原因。

实际操作中,秩r、缩放alpha和学习率需要一起调。我常用的基础配置是r=8、alpha=16,数据量更小时用r=4,数据更复杂时用r=16或32。需要注意,r并不是越大越好,过大的秩可能带来过拟合和更高的显存开销。关于作用在哪些矩阵上,很多早期实验发现只更新Q和V矩阵也能得到不错的效果,但实践中如果显存允许,我更倾向更新Q、K、V和输出投影,让模型有更多表达空间。

4. 分布式训练与推理优化:从模型能用到大规模部署

4.1 并行策略选型:数据并行、张量并行与流水线并行

单个GPU放不下大模型,是分布式训练存在的根本原因。但这并不意味着拿到多卡就直接开数据并行,需要根据模型尺寸和卡数判断。数据并行适合每张卡都能放下完整模型的场景:每张卡保留一份模型副本,处理不同batch,反向传播后同步梯度。如果模型单卡放不下,就必须上车模型并行。

模型并行有两个方向。一种是按层切分,叫流水线并行:第一张卡算完前几层再把中间结果传给下一张卡。它降低了单卡显存压力,但会出现流水线气泡,因为各卡不是完全同时工作。另一种是张量并行,也叫层内并行,把一层里的矩阵运算拆到多张卡。比如把注意力投影矩阵按列切分,各卡算完一部分再做拼接。张量并行的通信压力比流水线并行大很多,因为每一层前向反向都有多次集合通信。

实际训练中很少只用一种并行。常见组合是“数据并行×张量并行×流水线并行”,在卡数足够时还要考虑参数分片技术,比如ZeRO或FSDP。ZeRO的核心思路是把优化器状态、梯度、参数按等级分片,避免每个进程都保存一份完整副本。面试时把层次讲清楚即可:数据并行减少训练时间,模型并行解决显存容量,分片进一步压缩冗余,三者可以叠加使用。能举出一个简单例子说明“显存不够时先加哪种并行最划算”,基本就能过这一关。

4.2 KV Cache与量化:推理优化绕不开的两个话题

推理阶段最典型的优化是KV Cache。自回归生成时,每算一个新Token都要重新计算它和之前所有Token的注意力权重。如果不缓存,历史Token的Key和Value每次都会被重复算一遍,白费算力。KV Cache的做法是把前面已经算好的K、V保存在显存里,新Token只算自己的Q,再和缓存的K做点积。

KV Cache的显存占用可以估算:需要保存2份数据,也就是K和V,乘上模型层数、每层隐藏维度、序列长度、batch和字节数。一个粗略的数量级:常见的7B量级模型如果层数32、隐藏维度4096,FP16精度,单条序列长度2048时,缓存占用大约是2×32×4096×2048×2字节,接近1GB。所以长上下文场景下,显存大头往往不是模型权重,而是KV Cache。量化则是把权重和激活从FP16降到INT8甚至INT4,减少数据搬运量。精度降低会带来一定损失,但在多数任务上可控。被问到“量化为什么能行”时,可以提到权重冗余和分布集中这两个方向,而不是只说“省显存”。

5. LangChain、Agent与RAG:应用层八股文的重点不是框架API

5.1 LangChain:组件编排的思想,不是某个固定库

大模型应用很少只调用一个API就完事,往往需要写提示词、管理对话历史、连接检索库、记录中间结果。LangChain最核心的价值是提出了组件化思想:把模型调用、提示词、记忆、检索、工具调用拆成独立模块,再用链或图的方式组合。

面试高频题往往是“LangChain里的Chain和Agent有什么区别”。我的回答是:Chain更像固定流水线,提前定义好每一步执行顺序,问题怎么走是确定的;Agent则让模型自己决定下一步调用哪个工具,动态性更强。这个区分不只是API层面的,而是设计哲学层面的。如果只是给一个固定模板填参数,用Chain更可预测;如果需要应对开放问题,Agent更灵活,但也要承担失控风险。

5.2 Agent:从链式调用到让模型自己做决策

Agent常见的实现方式是ReAct,也就是把“推理”和“行动”交替进行:模型在每一步输出一个思考,然后调用外部工具,再把工具返回结果作为新的观察,继续下一次推理,直到得出最终答案。这里需要说明的是,工具调用不一定要靠特殊API,可以把工具使用规则写进提示词,让模型以结构化文本输出“我要搜索某某关键词”,再交给代码层解析执行。

准备Agent问题时,重点不是背框架的函数名,而是说清几个权衡:什么任务该用Agent、什么时候只靠固定Chain就够了、如何降低错误调用成本。我见过一些候选人一上来就谈“多智能体协作”,但连“工具返回结果如何进入下一轮Prompt”都说不清,这种状态在面试里很容易被追问穿帮。一个稳的回答是:先描述ReAct循环,再举例说明“搜索→阅读→再搜索”的迭代过程,最后补一句“运行时要设置最大轮数,防止模型陷入循环”。

5.3 RAG:检索、增强、评估是一个闭环

RAG解决的是两类问题:一是知识更新,模型训练完成后没法低成本记住新增资料;二是幻觉,模型会一本正经地编造答案。外挂知识库是更可控的路线,这也是RAG为什么比微调更适合知识问答场景的原因。

RAG的标准流程可以拆成四步。离线部分:文档加载、切分、Embedding、存入向量库。在线部分:用户问题转成向量,检索出最相关的片段,经过可能的重排,再拼接成Prompt交给模型生成。这里面最容易翻车的点是切分粒度:太短会丢失上下文,太长会引入噪声且成本高。我自己的经验是先按标题或段落结构做初步切分,再按长度控制在500到800字,并设置100到200字的重叠区域,必要时再根据检索效果调整。

RAG还有一个常被忽略的部分是评估。只搭出流程不代表效果好,需要定义指标:检索命中率、生成答案的准确率、可溯源比例。没有评估闭环的RAG Demo,在面试里只能算“运行过”,不能算“做过系统”。这也是我在这套资料最后补充的应用层重点:不要只背流程,要能说出你用什么指标验证。

6. 用这套资料自测:把“看过”变成“能讲”

6.1 按依赖顺序复习,不要按目录顺序背

资料里模块虽然多,但存在依赖关系:先有Transformer,才能理解微调和推理;先理解推理,才能理解部署时为什么需要缓存和量化;先理解模型调用,才能理解RAG和Agent。所以我建议大家复习时不要从头到尾看,而是按“模型结构→训练→推理→应用”的顺序。顺序不对,很多结论会显得很突然。比如“为什么要用LoRA”必须先理解全量微调的成本,“为什么要用RAG”必须先理解模型幻觉是怎么来的。

6.2 30秒电梯陈述法

我检查自己是否真正掌握一个考点时,会用“30秒电梯陈述法”:如果对方只有半分钟听我讲,我要怎么把这个问题说清楚。以LoRA为例,30秒版本是:LoRA冻结原权重,在旁路上加一个低秩矩阵,训练时只更新这个低秩增量,推理时再把增量合并回原权重,所以显存和存储成本都低。如果能说出来,再问自己三件事:为什么低秩不弱?为什么初始化B为0?alpha和rank怎么配?能答出后两个,就说明不是背答案。

6.3 自测清单:从“知道”到“能追问”的验证

我整理了一个简单的自测表,适合在面试前一周使用。每一题对自己打分,低于标准就回炉。

考点能说结论能解释原因能说出权衡和局限
旋转位置编码高高中
LoRA秩与alpha高高中
KV Cache显存估算高高高
三种并行策略中中高
RAG评估闭环中高高

这个表格不是让大家机械打分,而是提醒自己:面试官很少只问“是什么”,更多会追问“为什么”和“如果换一种场景怎么办”。我在实际准备中,会把每道题按“结论—原理—取舍”三个层次写成一张纸质卡片,模拟被追问的过程。能对着一张空白纸把这三点流畅讲完整,才算过关。

最后再分享一个小技巧:我在复习时会把每个模块的“高频追问”单独存成问题列表,面试前一天不看完整答案,只看问题名,逼自己快速复述。刚开始很多问题只能讲半截,但多过两轮之后,那些半截就都会被补齐。这是很笨但很有效的方法,比反复读资料更能暴露薄弱点。如果只能选一种复习方式,我会选这个。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询