大模型project面试1
1. 什么是大语言模型?和传统 NLP 模型有什么区别?
我理解大语言模型的本质,是一个用海量语料预训练、参数到百亿千亿规模、自回归生成文本的统一模型。
它和传统 NLP 模型最根本的区别有三点。
第一,传统 NLP 是「一任务一模型」,分词、命名实体识别、情感分析、问答各训各的,每个模型只会干自己那点事;LLM 是「一个模型干所有事」,因为它在预训练阶段学的是「预测下一个 token」这件最通用的事,下游任务用 Prompt 表达就行,不用再分别训练。
第二,传统 NLP 模型是判别式的,吃一段文本输出一个标签或概率;LLM 是生成式的,吃一段文本输出更多文本,理解和生成在同一个模型里完成。
第三,也是最神奇的一点,规模到了一定程度,LLM 会「涌现」出训练目标里没有显式教过的能力,比如多步推理、上下文学习、跨语言迁移,这种「量变到质变」的现象在传统 NLP 模型上是看不到的。
传统 NLP 是怎么干活的?
要理解 LLM 厉害在哪,得先看看在它之前,业界是怎么处理自然语言任务的。
传统 NLP 的工作方式是「流水线」式的,一个完整任务要拆成好几个独立步骤,每一步用一个专门的模型来完成。这不是大家想这么干,而是当时的小模型能力有限,必须把复杂问题拆解成一个个简单的子问题,每个子问题单独训练一个模型才搞得定。
举个例子,假如你要做一个智能客服。流程大概是:第一步分词,把用户的「我想退货」拆成「我 / 想 / 退货」;第二步词性标注,标出「我」是代词、「退货」是动词;第三步命名实体识别,找出有没有商品名、订单号;第四步意图分类,判断这是「咨询」还是「投诉」;第五步去知识库匹配预设答案。
光是「分词」这一步,里面就有一堆坑。中文不像英文有空格天然分隔,「南京市长江大桥」到底是「南京市/长江大桥」还是「南京/市长/江大桥」?这种歧义靠规则解决不了,必须有一个专门的分词模型来判断。而分词模型本身又依赖大量的人工标注语料,遇到训练时没见过的新词(比如「奥利给」「绝绝子」),它就懵了,这就是著名的 OOV(Out-of-Vocabulary,未登录词) 问题。
每一步都有这种独立的痛点,每一步都得有自己的模型、自己的训练数据、自己的标注规范。整个 pipeline 又长又脆,前面一步错了,后面全错。分词错了,词性标注就错;词性错了,命名实体识别就错;最终的意图分类也跟着错。这种错误是会累积传导的,而且没法事后补救。
更糟糕的是迁移成本。换个领域(比如从客服换成医疗问答),所有模型基本都得重新训练。因为医疗领域的「实体」(药名、症状、检查项目)和电商领域的「实体」(商品、订单、品牌)完全不是一回事,原来训好的模型用不上。一个公司想做几个不同领域的 NLP 应用,等于要养几套独立的模型团队,成本极高。
这就是 LLM 出现之前的世界,任务越细分,模型越多;模型越多,标注成本越高;标注越贵,迁移越难。整个 NLP 行业都被困在这个死循环里走不出来。
BERT 时代:预训练通了一半
到了 2018 年,Google 推出 BERT,整个领域出现了第一次大的转折。BERT 的核心创新是预训练 + 微调两阶段范式。
预训练阶段,BERT 在海量无标注文本(维基百科 + 图书数据,约 33 亿词)上做两件事:第一是 MLM(Masked Language Model,掩码语言模型),随机遮掉句子里 15% 的词,让模型根据上下文猜被遮的词是什么;第二是 NSP(Next Sentence Prediction,下一句预测),给两个句子,让模型判断它们是不是连续的。这两个任务都不需要人工标注,纯靠原始文本就能训练,所以可以用海量数据。
经过预训练,BERT 学到了通用的语言表示能力,简单说就是「看懂文字」的能力。然后到了下游任务,只需要在 BERT 上面接一个小的「任务头」,用少量标注数据微调一下,就能在各种 NLP 任务上拿到很好的效果。这一招直接把 NLP 各项任务的 SOTA(state-of-the-art,最佳表现)刷了个遍,整个领域为之一振。
但 BERT 走到一半就停了。它解决了「特征通用」(一个 BERT 可以服务多个下游任务),但没解决「任务统一」(不同任务还是要不同的微调副本)。原因有两个。
第一,BERT 的输出是「表示」,不是「文本」。它每一层输出的是每个 token 的向量表示,要想拿来做分类,得在最后接一个分类头(全连接 + softmax);要做命名实体识别,得接一个序列标注头;要做问答,得接一个抽取式 QA 头。每一种任务都需要单独设计的「头」、单独标注的数据、单独训练的过程。一个 BERT 在公司里被用起来,可能要派生出十几个微调副本,每个负责一个具体任务。
第二,BERT 不擅长生成。它的预训练目标 MLM 是「填空题」,每次只猜一个被遮的词,没学过怎么连续生成长文本。所以 BERT 几乎不被用来做翻译、写作、对话这类生成任务。这一块还得交给当时另一条技术路线,比如 GPT-2、T5。换句话说,BERT 把「理解」做到极致,但「生成」是它的短板。
所以 BERT 时代是个很关键的过渡。它证明了「预训练 + 大规模无标注数据」这条路是对的,但还没把所有 NLP 任务收归到同一个接口下。真正完成这一步的,是后来的 GPT 系列。
LLM 的本质:把所有任务收编成「预测下一个 token」
LLM 最根本的转变,是把所有 NLP 任务统一成了一件事,预测下一个 token。
这个训练目标叫 CLM(Causal Language Modeling,因果语言模型)。它的训练数据格式特别简单:给一段文本,模型从左到右一个字一个字地往后猜,每一步都要预测「下一个 token 是什么」。比如训练数据是「我喜欢吃苹果」,模型要学会:看到「我」预测「喜」,看到「我喜」预测「欢」,看到「我喜欢」预测「吃」,依此类推。
这种训练方式叫自回归(Autoregressive),意思是「下一步的预测依赖上一步的输出」。GPT、Claude、Qwen、DeepSeek 这些主流大模型,本质都是「自回归 + 因果掩码」的语言模型。
听起来太简单了对吧?但威力极大。看几个例子就明白了:
- 翻译:Prompt 写「把下面这句翻译成英文:我喜欢你 ->」,LLM 接着预测下一个 token,就会输出「I like you」
- 分类:Prompt 写「下面这条评论是正面还是负面?『这家店太黑了』 -> 答:」,LLM 预测下一个 token 就会输出「负面」
- 总结:Prompt 写「请用一句话总结:xxxxxx -> 总结:」,LLM 接着写下去就是总结
- 写代码:Prompt 写「写一个 Python 函数,返回斐波那契数列前 N 项 -> def」,LLM 接着续写就是完整代码
所有任务都被「Prompt + 续写」这个统一接口收编了。你不需要为每个任务训不同的模型,只需要在 Prompt 里换个说法,一个模型就能切换到不同的工作模式。
那为什么这个简单目标能学到这么多东西?关键是规模 + 数据两个杠杆。
数据的杠杆是:CLM 不需要任何人工标注,互联网上所有文本天然都是合格的训练数据。GPT-3 用了 3000 亿 token,Llama 3 用了 15 万亿 token,这种规模在 BERT 那个时代是不可想象的。BERT 当年的训练数据是几十亿词,现在 LLM 的训练数据规模翻了几千倍。
模型的杠杆是:参数量从 BERT 的 0.3B 一路堆到 GPT-3 的 175B,再到后来更大、更复杂的闭源模型。像 GPT-4 这类模型的具体参数量官方没有公开,外界只能估计,所以面试里最好别把「万亿级」当成确定事实来讲。更稳的说法是:模型规模、训练数据和算力一起放大后,「预测下一个 token」这件事被推向了新的境界。
模型要在不同上下文里准确预测,就必须学到语法、事实和推理模式。比如要预测「北京是中国的____」的下一个词,模型必须知道「北京是首都」这个事实;要预测「如果 x=2,那么 x²=____」,模型必须会算数;要预测一段代码的下一行,模型必须理解编程逻辑。
所有这些能力,都被「预测下一个 token」这个看似简单的目标逼着学会了。这就是为什么 LLM 能用一个统一的训练目标,覆盖几乎所有 NLP 任务。
还有一个让人惊讶的副产物,叫 In-Context Learning(上下文学习)。在 Prompt 里给模型几个例子,模型就能学会新的任务模式,不需要更新参数。比如:
苹果 -> apple
香蕉 -> banana
草莓 -> strawberry
橘子 ->
模型看到这个 Prompt,不需要任何额外训练,就能输出「orange」。它从 Prompt 里几个例子里推出了「中译英水果名」这个模式,然后应用到新的输入上。这种能力是 GPT-3 之后才被业界发现的,也是 Prompt Engineering 这门工程学科诞生的基础。
「涌现能力」:量变到质变的关键
LLM 还有一个让传统 NLP 模型望尘莫及的特点,叫涌现能力(Emergent Abilities)。
涌现的常见定义是:「某项能力在小模型上几乎看不到,规模到了某个临界点之后突然表现出来」。不过这里要留一个 caveat:有研究认为,一部分「突然出现」可能来自评测指标的离散性,比如 exact match 这种非黑即白的指标会把连续提升看成突变。所以面试里可以说「涌现是工程上能观察到的能力跃迁,但学术上对它是不是测量假象还有争议」。
来看几个真实数据。
第一个例子是多步算术。Google 在 2022 年的论文里测试,让模型做需要 5 步计算的应用题。参数量在 8B 以下的模型,准确率几乎是 0;到了 62B 的量级,准确率还是只有 5%;但到了 540B(PaLM)的量级,准确率突然跳到 60%。用 exact match 这类指标看,中间像是没有任何渐进过程,就是从「完全不会」直接到「会一大半」。如果换成更细的部分得分指标,曲线可能会平滑一些,这就是涌现争议的来源。
第二个例子是 In-Context Learning。GPT-3(175B)出现之前,业界的共识是「想让模型学新任务,必须在新任务上微调」。GPT-3 出来之后,OpenAI 发现只要在 Prompt 里给几个例子,模型就能学会新任务,准确率甚至能接近专门微调的小模型。这种能力在 1.5B 的 GPT-2 上完全看不到,在 175B 的 GPT-3 上突然就有了,临界点出现在 100B 左右。
第三个例子是跨语言迁移。GPT-3 主要训练数据是英文(占比 92%),但训练完之后,它能直接处理中文、日文、阿拉伯语,甚至小语种比如冰岛语。模型从来没被显式教过「中文怎么说」,它通过大规模多语言混合语料的预训练,自己学会了不同语言之间的对应关系。
为什么会涌现?业界给出的工程经验叫 Scaling Law(缩放定律)。简单说就是模型规模、训练数据量、训练算力这三者之间存在一种可预测的关系:你把这三个量按一定比例同时放大,模型的损失值(预测错误率)会沿着一条幂律曲线下降。这条经验律 OpenAI 在 2020 年的论文里提出,DeepMind 后来在 Chinchilla 论文里给出了更精细的比例(参数和数据要按 1:20 配,比如 70B 参数最好配 1.4T token)。
涌现的玄妙之处在于,你没有专门教过模型怎么做这些任务,它自己「学会」了。这是「量变到质变」的真正含义,也是为什么这两年所有家底厚的公司都在拼命扩大模型规模。
但要注意的是,涌现不是「越大越好」。最近几年的研究发现,超过某个规模之后,单纯堆参数的边际收益在递减。所以现在的趋势是,参数堆得不一定要最大,但数据要够多、算力要够花。Llama 3 的 8B 模型用 15 万亿 token 训出来,效果反而比早期的 GPT-3 175B 还好,这就是数据规模超过参数规模带来的回报。
工程层面的区别是「拼装积木」变成了「统一系统」。这个变化对工程团队的影响特别直观:团队结构不再是「N 个小模型组各管一摊」,而是变成「一个大模型组统一服务全公司」;部署成本也不再是「N 个模型同时上线各自占资源」,而是「一个模型挂上线多个场景复用」;维护方式更不一样了,过去每个小模型各自迭代各自的版本,现在所有应用统一跟着 base model 升级走。
范式层面的变化更深一层,是从「分类器思维」彻底切换到「生成器思维」。在工程实践上的体现是:用户交互方式从「在屏幕上点选项」变成「打字跟模型聊」;产品经理的核心思考问题从「如何穷举所有用户意图」变成「如何写好 Prompt」;评估指标也从过去的「准确率 / 召回率」这种判别式指标,变成「LLM-as-Judge 评分 / 用户满意度」这种生成式指标。这是整个 NLP 行业的工作方式都在被重写。
能力层面的突破最关键,是模型可以做「人没明确教过」的任务。过去想让模型多一项能力,必须为这项能力标注新数据;现在只需要在 Prompt 里描述新需求,模型就有概率能直接做。模型的能力上限不再被人工标注规模锁死,这在整个 NLP 历史上是前所未有的事,也是 LLM 真正颠覆性的地方。
这场转变对工程团队意味着什么
理解了上面三点,就能理解一个现实:这一两年所有 NLP 团队都在拥抱大模型,这不是「又出了一个新模型」,而是整个 NLP 领域的工作方式被重写了。
具体来说,过去做一个 NLP 项目,第一件事是「数据怎么标」,第二件事是「模型选哪个 BERT 变体」,第三件事是「微调怎么调超参」。现在做一个 LLM 项目,第一件事是「Prompt 怎么写」,第二件事是「需不需要 RAG 加外部知识」,第三件事是「要不要做 LoRA 微调」。工程的着力点完全变了,先想 Prompt,再想数据,最后才考虑微调。
过去 NLP 工程师的核心技能是词法分析、句法分析、特征工程、模型调参;现在 LLM 工程师的核心技能是 Prompt Engineering、RAG 系统设计、Agent 编排、对齐微调。听起来像是两个完全不同的工种,事实上也确实是。这也是为什么市面上招聘 JD 里「大模型应用工程师」这个新岗位会冒出来,工资比传统 NLP 工程师高出一截,因为底层的工作方式变了,老技能不够用了。
理解了 LLM 和传统 NLP 的本质区别,再看后续 RAG、Agent、Prompt Engineering 这些话题,会发现它们都不是凭空出现的,而是「一个模型干所有事 + 生成式 + 涌现」这三个特征延伸出来的工程实践。底层范式变了,上面的工具链当然也要跟着重写一遍。
🎯 面试总结
回答时可以这样组织:传统 NLP 是流水线,每个任务训一个模型;BERT 时代实现了「预训练 + 微调」但任务还得单独适配;LLM 把所有任务统一成「预测下一个 token」,靠 Prompt 来表达任务,一个模型搞定所有 NLP 工作。这种对照说出来,面试官就知道你不是死记硬背的。
讲完对照之后,记得带一句生成式和判别式的根本不同。判别式是输入文本输出标签,理解和生成是分开的;LLM 是输入文本输出更多文本,理解和生成在同一个模型里完成。这是范式上的根本变化,也是面试官最容易追问的点。
最关键的加分点是「涌现能力」。规模到了一定程度,模型会冒出训练目标里没显式教过的能力(多步推理、上下文学习、跨语言迁移),这是「量变到质变」的真正含义,也是 LLM 区别于传统 NLP 模型的最核心特征。能讲到这里,已经超过大多数候选人了。
如果还想再往上拔一层,可以延伸到工程视角:现在做 NLP 项目,工作方式从「先拆任务再选模型」变成了「先想 Prompt 怎么写」。这种「站在产业视角看技术变化」的回答,会让面试官印象很深。
2. 讲讲 Transformer 架构基本原理?Encoder 和 Decoder 是什么?
我理解 Transformer 最核心的创新是 Self-Attention,让每个 token 都能直接和序列里任意其他位置建立联系,一次性并行计算,彻底解决了 RNN 顺序计算慢、长距离信息衰减的两个老问题。理解 Encoder 和 Decoder 的区别时我用这个角度:Encoder 是双向的,每个词能同时看前后文,适合做「理解」类任务;Decoder 是单向的,只能看前面的词,天然适合「生成」任务。至于为什么现代大模型(GPT、Claude、Qwen)都选 Decoder-only,核心原因是「预测下一个 token」这个训练目标极其统一、可以直接在海量无标注文本上做自监督学习,规模越大涌现出的能力越强。
Transformer 之前:RNN 的致命缺陷
在 Transformer 出现之前,处理序列数据的主流方法是 RNN(循环神经网络)及其变体(LSTM、GRU)。RNN 的问题有两个,而且都是致命的。
第一个是顺序计算,无法并行。RNN 处理序列的方式是从左到右逐个处理每个词,第 N 步必须等第 N-1 步计算完才能开始,无法利用 GPU 的并行计算能力。这导致训练大型 RNN 极慢。
第二个是长距离梯度消失。当序列很长时(比如 1000 个词),RNN 理论上能记住早期的信息,但实践中梯度在反向传播时会指数级衰减,网络很难学习到「第 1 个词和第 800 个词之间的关系」。LSTM 通过门控机制有所缓解,但根本问题没解决。
2017 年 Google 在论文《Attention is All You Need》里提出了 Transformer,用一个全新的架构一举解决了这两个问题。
Self-Attention 的核心直觉
Self-Attention(自注意力)的核心思路是:让序列中的每个 token 都能直接关注序列中任意其他位置的 token,计算出「我和其他位置的相关程度」,然后根据相关程度加权聚合其他位置的信息。
这里有三个关键向量:Q(Query,查询)代表「我想找什么」,K(Key,键)代表「我有什么标签」,V(Value,值)代表「我的实际内容」。
可以用图书馆检索来类比:你有一个搜索关键词(Q),图书馆里每本书都有标签(K)和内容(V)。注意力机制就是用你的关键词(Q)去匹配每本书的标签(K),计算出相似度分数,然后按照分数的权重把书的内容(V)加权求和,得到你的搜索结果。
Q/K/V 是怎么从输入变换得到的
很多人讲 Self-Attention 容易卡在「Q/K/V 是从哪儿冒出来的」这一步。其实 Q/K/V 不是模型「凭空生成」的,而是把输入 embedding 通过三个独立的线性投影矩阵 W_Q、W_K、W_V 算出来的:
这一步就是面试里常被追问的「Q/K/V 是怎么得到的」。理解的时候有几个关键点要抓住。
最关键的一点是 Q/K/V 都是从同一个输入 X 算出来的。也就是说,输入既要扮演「提问者」(Q),也要扮演「被查者」(K + V),这就是「自注意力」里那个「自」字的含义,区别于 Encoder-Decoder 架构里 Cross-Attention 那种「Q 来自一边、K/V 来自另一边」的形式。
然后 W_Q、W_K、W_V 是三个独立学习的矩阵。这是个容易被忽略的细节,但很重要。如果让 Q/K/V 都直接等于 X 不做变换,模型就没法学到「该从什么角度提问」「该用什么标签匹配」「该返回什么内容」这种细致的差异。三个独立投影让模型有 3 倍的自由度去学习这种角度上的差异,模型容量大幅提升。
还有一个工程细节是投影维度 d_k 通常等于 d_model / H(H 是头数)。比如 d_model=512、H=8 时,d_k=64。这样做的目的是让多头总参数量和单头版本基本一致,不增加额外的计算开销。
Attention(Q, K, V) = softmax(Q · K^T / √d_k) · V
为什么要除以 √d_k:缩放点积的数学直觉
公式里的 /√d_k 这一步常被叫做 Scaled Dot-Product Attention(缩放点积注意力)。这个 √d_k 不是随便加的,背后有具体的数学动机。
直觉上的问题是这样的:当 d_k 很大时(比如 d_k=128),Q 和 K 都是 128 维的向量,它们的点积是 128 个数相加。假设 Q 和 K 的每一维都是均值 0、方差 1 的随机数,那么点积 Q·K 的方差就是 d_k=128,标准差是 √128 ≈ 11.3。
这意味着点积的数值会散布在 -30 到 +30 这种很大的范围。然后这些数过 softmax 会发生什么?softmax 对极端大的输入特别敏感,最大的那个数对应的概率会接近 1,其他数的概率会接近 0,输出几乎变成 one-hot 分布。
one-hot 分布的问题是梯度消失。softmax 的梯度公式里有 p · (1-p) 项,p 接近 0 或 1 时梯度都接近 0。整个 Attention 层的反向传播信号被压扁,模型训不起来。
除以 √d_k 之后,点积的方差被压回 1,softmax 输出分布合理,梯度能正常传播。
那能不能用其他方案替代 √d_k?理论上可以,但 √d_k 是数学上最自然的选择。
业界确实尝试过几种替代方案。一种是用 Layer Norm 来归一化,比如某些 Attention 变体(Pre-LN Transformer)会在 Attention 之前先把输入归一化到固定范围,这样后续的点积值天然就不会爆炸。但严格来说这是「在 Attention 之前做归一化」,不是真的替换 √d_k 本身。另一种是让模型自己学一个 scaling 参数,用一个可学习的标量代替 √d_k。实测效果和 √d_k 差不多,但增加了可学习参数,反而不如固定常数简洁。还有一种早期方案是直接限制 d_k 很小(比如 d_k=8),让点积自然不会爆炸,但这等于直接限制了模型的容量,不划算。
实践中所有主流 Transformer 实现(GPT、LLaMA、Qwen 等)都用 √d_k,没有改。这是一个被 8 年实践验证的「简单且数学上合理」的选择。
回到主线:除以 √d_k 之后,softmax 的输出就是稳定的注意力权重,再用这些权重对 V 做加权求和,就得到了 Self-Attention 的最终输出。整个过程对序列中所有位置的计算是可以并行的,完美解决了 RNN 的并行问题;而且每对位置之间都有直接连接(通过注意力分数),不存在长距离信息衰减的问题。
Multi-Head Attention:多角度观察
单组 Q/K/V 只能学习到一种「关联关系」,但语言中的关联是多维度的:「我」和「吃」是主谓关系,「苹果」和「吃」是宾动关系,「苹果」和前文的「苹果树」是指代关系,这些不同类型的关联需要不同的「注意力头」来捕捉。
Multi-Head Attention 就是把 Q/K/V 投影到多个不同的子空间(比如 8 个或 32 个头),每组独立计算注意力,最后把所有头的输出拼接起来。每个头可以专注于捕捉不同类型的语言关联,整体上表达能力更强。
位置编码:注入顺序信息
Self-Attention 有一个天然的缺陷:它的计算是对称的,不考虑词的顺序。「我打你」和「你打我」对 Attention 来说可能得到一样的结果,因为它只看哪些词相关,不看谁在前谁在后。
所以需要显式地给每个 token 注入位置信息,这就是位置编码。具体的位置编码方案有 sin/cos、RoPE、ALiBi 等多种选择,每种各有不同的设计哲学和长上下文外推能力,是一个独立的研究方向。本节只需要知道 Transformer 是通过加上位置编码来让模型感知词序的就够了。
前馈网络(FFN)的作用
除了注意力层,每个 Transformer 块里还有一个前馈网络(Feed-Forward Network),结构是两层全连接加一个激活函数。
FFN 对每个位置独立地做非线性变换,补充注意力层学不到的信息(注意力层本质上是线性加权,FFN 引入非线性)。研究表明 FFN 层储存了大量的「事实知识」,可以理解为模型的「记忆仓库」。
Encoder-only、Decoder-only 和 Encoder-Decoder 三种架构
理解了 Attention 的基本机制,可以解释这三种架构的区别。
-
Encoder-only(以 BERT 为代表):每个 token 可以双向关注序列中所有其他 token(没有遮蔽)。这种双向理解能力让 Encoder 非常擅长「理解任务」,比如文本分类、命名实体识别、语义相似度计算。预训练目标是 MLM(掩码语言模型),随机遮住一些词让模型预测。
-
Decoder-only(以 GPT/Claude/Qwen 为代表):使用因果掩码(Causal Mask),每个 token 只能关注它前面的 token,不能「提前看到」后面的内容。这种单向设计天然适合文本生成,预训练目标是「预测下一个 token」(CLM),目标统一而强大。现在几乎所有大语言模型都是这个架构。
-
Encoder-Decoder(以 T5、BART 为代表):Encoder 双向理解输入,Decoder 单向生成输出,Decoder 通过 Cross-Attention 读取 Encoder 的输出。这种架构适合「输入和输出是不同的文本」的任务,比如翻译、摘要、问答。但预训练目标相对复杂,超大规模训练不如 Decoder-only 简洁。

为什么 Decoder-only 赢了
现代通用生成式大模型为什么大多选择 Decoder-only 架构?这是面试里最容易被追问的点。
根本原因是「预测下一个 token」这个目标极其统一。所有类型的任务(问答、写作、推理、代码生成、翻译)都可以统一表达成「续写」这一件事,不需要区分「这是理解任务」还是「那是生成任务」,一套训练目标搞定一切。
更关键的是,这个目标可以直接在海量无标注文本上做自监督训练。互联网上的大量公开文本天然可以构造成训练样本,不需要像传统监督任务那样逐条人工标注。这一点是 BERT 那种 MLM 目标做不到的(MLM 也是无标注,但训练效率不如 CLM 适合 scale up)。
最厉害的是,随着模型规模增大,这个简单目标下涌现出的能力越来越强。模型从「会续写文本」开始,逐渐学会数学、推理、代码、跨语言迁移……这些能力都是「预测下一个 token」这个目标在足够大规模下自然涌现的。
所有这些特性加在一起,使得 Decoder-only 架构在大规模生成式预训练时代取得了压倒性的优势。Encoder-only 和 Encoder-Decoder 这两种架构并没有消失,它们在检索、分类、嵌入、翻译、摘要等场景仍然有价值;只是如果目标是做一个通用对话和生成模型,Decoder-only 更容易 scale up,也更符合「一个模型续写所有任务」的统一接口。

回到开头那段对话,问到 Transformer 架构,最重要的是先把 RNN 的两个致命缺陷讲清楚,因为这是 Transformer 出现的动机。RNN 顺序计算无法并行(训练慢)+ 长距离梯度消失(看不到远处),这两个问题在序列稍长就会致命。
接下来讲 Self-Attention 怎么解决的。每个 token 通过 Q、K、V 三个独立的线性投影变换得到查询、键、值向量,然后用 Q 去和所有 K 做点积算注意力分数,按分数加权聚合所有 V。这一段能讲到「Q/K/V 是从同一个 X 通过三个独立矩阵投影得到的」「除以 √d_k 是为了防止点积过大让 softmax 变 one-hot 导致梯度消失」这两个细节,就比一般候选人深刻一层了。
最关键的一句话是讲清为什么 Decoder-only 赢了。「预测下一个 token」这个目标极其统一,所有 NLP 任务都能用它表达;可以直接在海量无标注文本上做自监督训练;规模越大涌现的能力越强。这种「目标统一 + 数据规模 + 涌现」的组合让 Decoder-only 在大模型时代完胜。
如果还想再加分,可以提一句「FFN 层储存了大量事实知识,可以理解为模型的『记忆仓库』」这种从可解释性角度看 Transformer 的视角。能讲到这一层,面试官就知道你不是只在背架构图,是真的理解了 Transformer 的设计哲学。
更多推荐

所有评论(0)