后训练模型的产生:基座 SFT 对齐 推理 部署


资料截至 2026-10

全景

阶段 一句话 代表工作
基座模型 学会语言:预测下一个 token GPT 系、LLaMA 系
SFT 学会说话:把”续写”变成”回答” FLAN、InstructGPT
DPO / RLHF 学会选择:在好答案和坏答案之间站队 Christiano 2017、DPO
GRPO / RLVR 学会思考:用”可验证的对错”当奖励 DeepSeekMath、DeepSeek-R1
量化 / 蒸馏 学会省着用:压到 4bit,或让小模型学大模型 GPTQ、AWQ、Hinton 蒸馏
多模态 学会看:图文对齐 CLIP、LLaVA
工具使用 学会行动:输出结构化调用而不是聊天 Toolformer、function calling

从基座模型到智能体LLM能力进化路线图

一、基座模型:学会语言

本质是在海量文本上做下一个 token 预测:给定前文,预测下一个词的概率分布,用交叉熵当损失。听起来简单得不像能教会模型什么,但要让这个预测足够准,模型不得不把语法、常识、事实、甚至推理的痕迹都压进参数里。

这一站的成本结构决定了后面所有事:注意力的开销随序列长度平方增长,参数量、数据量、算力与最终效果之间存在可预测的缩放关系(scaling law)——所以它是整条流水线里最贵的一站,通常只有少数机构在做。

有一个很容易忘的事实:基座模型只会续写,不会听指令。你问它”什么是递归”,它极可能接着给你编几道类似的题目,因为它的训练目标里从来没有”回答”这个概念。网上那些”base 模型 vs instruct 模型”的对比视频看起来像两个物种,原因就在这里。

坑也集中在数据上:去重和去污染是硬要求(测试集泄漏进训练集,评测分数直接作废);词表、上下文长度这类决定一旦定了,后面想改就要重训。

二、SFT:学会说话

SFT(监督微调)用”指令 → 回答”的配对数据继续训练。数据长这样:

{
  "instruction": "把下面这句话改成更礼貌的说法",
  "input": "你这个方案不行。",
  "output": "这个方案我觉得还有一些可以改进的地方,我们讨论一下?"
}

上面这个是 Alpaca 格式,也是最常见的一种。实际工程里主流有三种写法,差别不只是”长得不一样”:

格式 结构 能表达什么
Alpaca instruction + input + output(可选 system、history) 单轮问答为主,多轮要用 history 手工拼
ShareGPT conversations 列表,每项带 from:human / gpt / observation / function 原生多轮,而且能表达工具调用轨迹(function 是调用、observation 是工具返回)
OpenAI messages 列表,每项带 role:system / user / assistant ShareGPT 的特例,多一个 system 角色

(这三种是 LLaMA-Factory 官方文档里的划分;文件可以是 json / jsonl / csv / parquet / arrow,列名靠 dataset_info.json 映射。)

格式选错会直接影响训练结果,两个细节特别容易踩:

  • 哪些内容会被学(计入 loss):Alpaca 格式里 history 中的历史回答也会被模型学习;ShareGPT 格式里 gpt 和 function 的内容会学,human 和 observation 不会。没想清楚就选格式,你可能在无意中训练模型去模仿用户的说话方式
  • 推理模型的思维链怎么放:有 CoT 的数据要把思维链放在回答里(<think>…</think> 后面接最终答案);没有 CoT 时 LLaMA-Factory 会自动补一段空 CoT,而 enable_thinking 参数决定它算不算 loss。这个参数训练和推理时必须保持一致,否则效果会莫名其妙地掉

InstructGPT(2203.02155,NeurIPS 2022)把整套流程确立下来,它本身就是三段式的:先用标注员写的示范数据做 SFT,再收集”哪个回答更好”的排序数据训奖励模型,最后用强化学习优化——也就是下一节要讲的 RLHF。

FLAN(2109.01652,ICLR 2022)在 137B 的模型上用 60 多个 NLP 任务做指令微调,结论很有说服力:在 25 项任务的评测里,零样本超过了 175B 的 GPT-3 中的 20 项。也就是说,”教模型听懂指令”的效率,比单纯堆参数高得多。

工程上有几条经验值得记住:

  • 数据质量远重于数量:几千条干净、多样、格式统一的样本,常常打得过几十万条脏数据。多样性尤其关键——只覆盖一类任务,模型就只会那一类
  • 样本里要有”不做什么”:拒答、承认不知道、拒绝越界请求,都得有示范
  • loss 通常只算在回答部分:指令是条件,不是要学的内容
  • 小心格式过拟合:模型可能学会了模板的”腔调”(动不动就分点、堆小标题),但能力没涨——表现是评测分很高、真实使用很僵

参数高效微调(LoRA / QLoRA)主要就用在这一层。同样是 7B 模型,全参 SFT 要约 120GB 显存,LoRA 约 16GB,4bit QLoRA 约 6GB——这就是为什么个人玩家能在单卡上做微调。

三、DPO / RLHF:学会选择

SFT 教的是”这样回答”,这一站教的是”哪种回答更好”。数据形态变了,是配对:

&#123;
  "prompt": "为什么天空是蓝色的?",
  "chosen": "因为大气对阳光的散射强度与波长有关……(准确、有条理)",
  "rejected": "因为大海是蓝色的,反射上去的。(常见误解)"
&#125;

RLHF 的经典路线(1706.03741,NeurIPS 2017)确立于 2017 年,当时是给强化学习智能体用的:人类只需要比较两段轨迹的优劣,就能定义目标。论文里有个很惊人的数字——只用不到 1% 的交互给出反馈,就足以解决复杂任务。这套思路后来被搬到了语言模型上。

把原理拆开看,RLHF 其实就是三步:

第一步,把”偏好”变成可优化的目标。 用的是经典的 Bradley-Terry 模型:两段回答里”好的那个”被选中的概率,等于两者奖励之差过一个 sigmoid:

P(好回答 优于 差回答) = sigmoid( r(好) − r(差) )

第二步,训一个奖励模型。 拿成对的偏好数据拟合上面这个目标——让”好的比差的奖励高”这件事的概率尽可能大。训完它就是一个会给任意回答打分的小模型。

第三步,用强化学习优化策略。 这时的目标不是”奖励越高越好”,而是:

最大化   E[奖励] − β · KL(新策略 ‖ 参考模型)

那个 KL 项是整个 RLHF 的关键:它约束新策略不要跑离参考模型太远。没有这一项,模型很快会学会用极端措辞去骗奖励模型——这正是 reward hacking 的温床。β 越大越保守,越小越激进。

PPO 在这个框架里负责”怎么稳定地更新”:它比较新旧策略的概率比,把比值截断在 [1−ε, 1+ε] 之内,防止一次更新过猛;另外还要一个价值网络来估计基线、降低方差。

DPO 的聪明之处是把这三步压成一步:既然”最优策略的奖励”可以用策略与参考模型的对数概率比表达出来,奖励模型就是多余的——偏好数据可以直接写成损失函数。它省掉的是奖励模型和整套 RL 采样循环,只剩两个模型(策略 + 参考),稳定性自然好得多。

代价也要说清:DPO 是离线的——只在固定的偏好数据集上学,数据没覆盖到的行为学不到;而 PPO 那套在线采样还留着探索能力。所以”DPO 便宜好用”和”PPO 上限更高”并不矛盾,是各自适用面的问题。

传统 RLHF 的麻烦在于要同时伺候四个模型:策略模型、参考模型、奖励模型、价值网络,显存和训练稳定性都很吃紧。DPO(2305.18290,NeurIPS 2023)的价值就在这里:它证明了可以跳过奖励模型,直接用偏好数据优化策略。直觉上,模型自己对”好回答”和”差回答”的概率比,本身就能当成一个隐式奖励;再用一个系数管住偏离参考模型的程度,就等价于在优化那个隐式奖励。结果是只需要两个模型(策略 + 参考),训练稳定得多,这也是它现在成为主流的原因。

这一站最著名的坑是 reward hacking——奖励模型只是人类偏好的代理,模型很快就会学会骗它。三个典型形态:

  • 长度偏置:更长的回答平均得分更高,于是模型开始灌水
  • 谄媚:附和用户的错误观点,而不是纠正
  • 格式刷分:堆小标题、堆列表,看起来”专业”

对策也很具体:偏好数据里控制长度分布、专门收集”长但差”的样本、把”纠正用户”写进偏好数据,以及定期人工抽检。

四、GRPO / RLVR:学会思考

这一站让模型”多想一想再答”,钥匙是一个约束:奖励必须能自动验证。

  • RLVR(可验证奖励的强化学习):数学题有标准答案、代码能跑单元测试,于是奖励可以写成一个函数,不需要人类打分:
def reward(question, model_answer):
    if not is_valid_format(model_answer):   # 必须给出最终答案段
        return 0.0
    gold = ground_truth[question]
    return 1.0 if normalize(model_answer.final) == normalize(gold) else 0.0
  • GRPO(组内相对策略优化):同一个问题采样一组答案,用组内的相对得分当优势,省掉了 PPO 里的价值网络——也就是又少养一个模型。它出在 DeepSeekMath(2402.03300)里,配套成果是个 7B 模型:用 120B 数学 token 继续预训练后,在竞赛级 MATH 基准上拿到 51.7%(不借助工具、不做投票),自一致性采样 64 次可以到 60.9%。

DeepSeek-R1(2501.12948,Nature 2025)把这条路的潜力又往前推了一步:它的 R1-Zero 说明,纯强化学习就能让模型自己长出长思维链——自我验证、回头看、换思路这些行为没有被人手写进训练数据,是涌现出来的,而且完全不需要人类标注推理轨迹。

边界也很硬:

  • 只在可验证领域成立。换成写作、咨询、产品设计这类没有标准答案的任务,奖励函数就写不出来——这是当前最大的限制
  • 采样成本高:一次更新要采一组答案,算力开销远大于 SFT
  • 长思维链很贵:推理时输出 token 可能翻几倍,钱是实打实花在推理上的

五、量化 / 蒸馏:学会省着用

前四站把模型养大了,这一站开始纠结怎么塞进你买得起的机器。先把账算给你看(只算权重,7B 模型):

精度 权重显存 说明
fp16 / bf16 约 14 GB 原始精度
8bit 约 7 GB 一般几乎无损
4bit 约 3.5 GB 主流折中点,消费级显卡能跑

实际还要加上 KV cache 和激活值,所以真实占用比这张表高。

量化这件事可以先分成三层来看,选方案时按这三层把需求说清楚就不会乱:

  • 什么时候做:PTQ(训练完再量化,成本低、是主流)vs QAT(训练时就模拟量化误差,精度更好但要把模型重训一遍)
  • 量化什么:只量化权重(weight-only,主要收益是省显存)vs 权重和激活都量化(W8A8 这类,能实打实提速,但要硬件和算子支持)
  • 以什么粒度量化:per-tensor(一个张量共用一组缩放参数,最省额外存储)→ per-channel → per-group(一组共享一组,最准,但元数据也更占地方);另外还有对称与非对称表示之分,决定零点怎么放

长上下文时代还有一个容易忽略的大头:KV cache。它随上下文长度和并发数线性增长,权重压到 4bit 之后,KV cache 往往反而成了显存第一大户——所以现在也有专门的 KV cache 量化(fp8 / int8)。

  • GPTQ(2210.17323,ICLR 2023):一次性的逐层量化,量化时用二阶信息做误差补偿。它的时代背景是——那时候推理一个大模型要好几张 GPU,压缩是刚需
  • AWQ(2306.00978,MLSys 2024 最佳论文):核心发现是权重并不一样重要,只保护 1% 的显著通道就能大幅降低量化误差;而判断”显著”要看激活值分布,不看权重本身。又简单又有效
  • GGUF:让 4bit 模型在消费级设备上跑起来的那套格式,Ollama 走的就是这条路

另一条线是蒸馏:让大模型当老师、小模型当学生。按”学生学什么”可以分三类(这也是蒸馏综述里的经典划分):

  • 学输出(logits 蒸馏):Hinton 那篇(1503.02531)的原始做法——让学生学老师的概率分布,而不是只学最终答案。软标签里带着”哪些错误答案比较像”的信息(所谓暗知识),这是它比硬标签强的原因;代价是得能拿到老师的 logits
  • 学中间层(特征蒸馏):对学生和老师的中间层表示做对齐,约束更强,但对两者的结构能否对上是有要求的
  • 学数据(数据蒸馏):拿不到 logits 时的通用解——用大模型生成高质量数据去训小模型。现在开源小模型大多走这条路

语言模型上还有一个专门的改进:on-policy 蒸馏(MiniLLM,2306.08543,ICLR 2024)。传统做法是老师生成、学生模仿,学生会遇到”训练时看老师的、推理时自己走”的分布不匹配;MiniLLM 改成让学生自己生成、老师来评估,把这个 gap 补上。

坑只有一个但很重要:量化不是无损的,而且不同任务对量化的敏感度差别很大。别人的基准分只能当参考,上线前必须拿自己的任务测。

六、多模态:学会看

结构上是三件套:视觉编码器 + 投影层 + 语言模型——把图像编码成向量,投影到语言模型的表示空间,然后就当”另一种 token”处理。

  • CLIP(2103.00020,ICML 2021)解决的是”怎么让图和文可比”:用 4 亿对图文做对比学习,配对的拉近、不配对的推远。它训出来的视觉编码器,后来成了几乎所有多模态模型的标配
  • LLaVA(2304.08485,NeurIPS 2023 Oral)的做法特别值得学:用纯文本的 GPT-4 来生成多模态指令数据(给它图片的描述和框,让它造出对话、推理、细节问答),再用这些数据做视觉指令微调——本质上是给多模态补了一节 SFT

工程上最容易低估的是 token 账:图像被切成 patch 后,每个 patch 就是一个 token。按常见的 14×14 patch 算,一张 336×336 的图大约就是 576 个 token;多图、高分辨率、视频帧的场景下上下文会被迅速吃满,这就是”多模态很贵”的直接原因。

七、工具使用:学会行动

最后一站,模型从”会说”变成”能做”:不再用自然语言说”你可以查一下天气”,而是输出结构化的调用请求。一次请求大致长这样:

&#123;"tool_calls": [&#123;"function": &#123;"name": "get_weather",
                             "arguments": "&#123;\"city\": \"成都\", \"unit\": \"c\"&#125;"&#125;&#125;]&#125;

起点是 Toolformer(2302.04761,NeurIPS 2023):让模型自己学会”什么时候该调 API”。现在这条路两端都在标准化:

  • 协议侧:MCP(当前规范版本 2026-07-28)把”工具怎么暴露给模型”统一成一个接口,工具方写一次、所有客户端都能用
  • 部署侧:各家模型的调用格式依然不统一。vLLM 需要显式指定 --enable-auto-tool-choice 和 --tool-call-parser <模型族>,它的解析器清单有几十个名字(hermes、llama3_json、mistral、deepseek_v3、glm45、kimi_k2、qwen3_xml……),这份清单本身就是”格式碎片化”的证据

真跑起来会遇到的坑:

  • 模型编工具名:调用一个不存在的函数——所以工具列表要短、名字要自解释
  • 参数类型错:该传整数的地方传了字符串,需要在服务端做校验和重试
  • 工具报错后模型不会自救:错误信息要设计得让模型看懂并改(这也是 ACI 设计的一部分)
  • 注入风险:工具返回的内容里可能藏着指令,而模型会照做

工具调用是 agent 的”手”,而 agent 是”工具调用 + 循环 + 记忆”。

小结

语言(基座)→ 听话(SFT)→ 选择(对齐)→ 思考(RLVR)→ 省着用(量化蒸馏)→ 看(多模态)→ 做(工具)

每一站都在解决上一站留下的问题:会续写但不听话,SFT 来解决;会听话但不会挑,对齐来解决;会挑但不会想,RLVR 来解决;会想但跑不动,量化和蒸馏来解决;能跑但不会看、不会做,多模态和工具来解决。

所以看一个新模型的能力边界,可以顺着这条线问两个问题:它走到第几站了?哪一站投入不够?

参考

  • 1706.03741 — Deep Reinforcement Learning from Human Preferences — NeurIPS 2017(CCF-A)
  • 1503.02531 — Distilling the Knowledge in a Neural Network — NIPS 2014 深度学习 workshop
  • 2103.00020 — Learning Transferable Visual Models From Natural Language Supervision(CLIP)— ICML 2021(CCF-A)
  • 2109.01652 — Finetuned Language Models Are Zero-Shot Learners(FLAN)— ICLR 2022(CCF-A)
  • 2203.02155 — Training language models to follow instructions with human feedback(InstructGPT)— NeurIPS 2022(CCF-A)
  • 2210.17323 — GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers — ICLR 2023(CCF-A)
  • 2302.04761 — Toolformer: Language Models Can Teach Themselves to Use Tools — NeurIPS 2023(CCF-A)
  • 2304.08485 — Visual Instruction Tuning(LLaVA)— NeurIPS 2023 Oral(CCF-A)
  • 2305.18290 — Direct Preference Optimization: Your Language Model is Secretly a Reward Model — NeurIPS 2023(CCF-A)
  • 2306.00978 — AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration — MLSys 2024 最佳论文
  • 2402.03300 — DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models(提出 GRPO)— 预印本
  • 2501.12948 — DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning — Nature 2025
  • 2306.08543 — MiniLLM: On-Policy Distillation of Large Language Models — ICLR 2024
  • 2103.13630 — A Survey of Quantization Methods for Efficient Neural Network Inference — 书籍章节(Low-Power Computer Vision)
  • 2006.05525 — Knowledge Distillation: A Survey — 期刊综述

文章作者: Halensea
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Halensea !
 上一篇
停更四年 重新上线 停更四年 重新上线
2022 年 9 月停更,2026 年 10 月重新打开——第一件发现的事不是文章过时,而是站点域名指向了一个已停运的服务,199 个页面全部带着死链。这篇是完整的复活记录:体检清单、抢救顺序、四个"看起来没问题一用就坏"的坑,以及如果重来我会提前做的三件事。
2026-10-10
下一篇 
AI Agent:一个循环、五个部件,和工程上真正难的地方 AI Agent:一个循环、五个部件,和工程上真正难的地方
agent 不是"更聪明的聊天机器人",而是一个"想—做—看"的循环加上五个部件。这篇按这个骨架把 agent 讲清楚:workflow 和 agent 的界限在哪、模型要多什么能力、工具怎么标准化(MCP)、记忆和规划怎么做、以及工程上真正难的是什么。
2026-10-10
  目录