推理能力从哪里来
ChatGPT 不是天生的。预训练提供知识和语言能力,微调教会模型如何回答,偏好优化(RLHF / DPO 等)调整行为,而推理训练强化复杂逻辑能力。今天我们看到的 ChatGPT、Claude、Gemini、o3、DeepSeek-R1,都不是“一个模型一次训练”直接长成的,而是多阶段迭代出来的结果。
为什么要读这篇
上一篇文章讲了 LLM 的底层机制:Transformer、Attention、Token Prediction。那篇文章解决的是一个“机器内部怎么运转”的问题:模型为什么能读懂上下文、为什么能预测下一个 token、为什么参数越大通常越强。
但理解底层机制以后,很多人会立刻冒出第二个问题:
如果 LLM 本质上只是“下一个 token 预测器”,那它为什么后来能聊天、能写代码、能做规划,甚至看起来像在“推理”?
答案就在训练流程里。
一个“裸”的预训练模型,往往并不会好好和你对话。你问它一个问题,它可能继续接龙;你让它输出 JSON,它可能写一半自然语言;你让它做复杂任务,它也未必知道应该先拆步骤再回答。换句话说,预训练给了模型原始能力,但并没有把这些能力整理成“人类可用”的产品形态。
本文要讲的,就是这条完整的训练链路:
- 预训练:让模型学会语言和知识
- 监督微调(SFT):让模型学会“按要求回答”
- 偏好优化(RLHF / DPO):让模型更有用、更安全、更符合人类偏好
- 推理训练(Reasoning Post-Training):让模型更擅长多步思考和复杂任务
- 推理时计算扩展(Test-time Compute Scaling):在运行时用更多计算换更高准确率
如果你想理解:
- 为什么 Base Model 和 Chat Model 差别这么大
- 为什么不同模型“性格”不一样
- 为什么同样是 LLM,有些模型特别擅长代码和数学
- 为什么 o3、DeepSeek-R1 这样的“推理模型”看起来像更会思考
那么这篇文章就是把这些问题串起来的一张总图。
一个核心问题
很多人第一次接触 LLM 时都会问:
为什么 GPT-4 / o3 能推理,而 Base Model 不会?
这个问题本身就有一点误导性。因为“会不会推理”并不是某一个开关突然被打开,而是多个训练阶段层层叠加出来的结果。
你可以把整个过程想象成一条生产线:
Pretraining
↓
SFT
↓
Preference Optimization (RLHF / DPO)
↓
Reasoning Post-Training
↓
Test-time Compute Scaling
每一步都在解决一个不同的问题:
| 阶段 | 主要解决什么问题 |
|---|---|
| 预训练 | 让模型“知道世界”,学会语言、知识、模式 |
| SFT | 让模型“知道怎么回答你”,学会指令遵循 |
| 偏好优化 | 让模型“更像你想要的助手”,更有用、更安全 |
| 推理训练 | 让模型在复杂任务上更擅长分步思考 |
| 推理时扩展 | 让模型在运行时用更多计算换更高准确率 |
如果用一句更直白的话来总结:
预训练决定模型“有什么原材料”,后训练决定模型“怎么把这些材料组织起来为人服务”。
想深入?
1. 预训练(Pre-training)
一句话:
在海量文本上做 next token prediction,让模型学会语言规律、世界知识和大量隐含模式。
这是所有能力的基础。
预训练到底在做什么
从形式上看,预训练很朴素:给模型一段文本,让它预测下一个 token 是什么。
比如:
法国的首都是 → 巴黎
for i in range(10): → ...
光合作用的作用是 → ...
训练目标并不复杂,但当数据规模足够大、模型规模足够大时,这个任务会逼着模型学会很多东西:
- 它要理解语法和句法,否则连一句话都接不顺
- 它要记住常识和事实,否则很多文本预测不准
- 它要捕捉上下文关系,否则不知道当前句子在讲什么
- 它要学习代码、数学、论文写作、对话风格等不同分布的模式
所以预训练虽然看起来只是“猜下一个词”,本质上却是在压缩整个人类语言世界里的统计规律。
训练什么
| 维度 | 典型配置 | 说明 |
|---|---|---|
| 数据 | 万亿级 token | 网页、书籍、代码、论文、问答、论坛等 |
| 时长 | 数周到数月 | 取决于模型规模、集群规模和优化效率 |
| 目标 | 最小化 token 预测误差 | 标准自监督训练,不依赖人工标注 |
但这张表只是表面。更重要的是理解:预训练学到的不是“答案列表”,而是一种分布式表示能力。
也就是说,模型并不是把每个问题和答案硬背下来,而是在参数里压缩了大量模式:
- 什么问题通常对应什么回答
- 哪些概念经常一起出现
- 一个句子在不同语境下可能怎么继续
- 某种逻辑推演在文本里通常如何展开
这也是为什么大模型经常会表现出“像理解了一样”的能力。
模型学到了什么
预训练通常会让模型获得四类核心能力:
1. 语言模式
这是最基础的一层。模型学会了语法、句式、文风转换、多语言映射、长距离依赖等能力。没有这一层,后面所有对话能力都谈不上。
2. 事实知识
因为训练语料里包含了大量百科、书籍、代码库、新闻、论坛和文档,模型会在参数中吸收大量事实性知识。比如地理常识、历史事件、编程 API、学术术语等,很多都来自这一阶段。
3. 任务模式
虽然预训练不是专门的“任务训练”,但海量语料里本来就包含各种任务形式:问答、摘要、翻译、改写、解释、代码补全、论文写作。模型会逐渐习得这些模式,因此即使没有专门微调,它也可能已经能做出一些任务型输出。
4. 基础推理能力
这是很多人最感兴趣的部分。模型会在预训练中学到一些简单推理模式,比如:
- 常见数学模板
- 因果表达
- 类比和对应关系
- 代码中的控制流与依赖关系
- 文本里反复出现的逻辑链条
所以要特别注意:
很多推理能力其实已经在预训练阶段出现。
随着模型规模和数据规模扩大,研究者发现模型会表现出越来越强的“涌现能力(emergent abilities)”。这意味着很多看起来像“思考”的能力,并不完全是后训练硬塞进去的,而是在大规模预训练中逐渐长出来的。
Base Model vs Chat Model
这是理解整个 pipeline 最关键的区分之一。
| 类型 | 训练阶段 | 表现 |
|---|---|---|
| Base Model | 仅预训练 | 会接龙,但不会稳定对话 |
| Chat Model | 预训练 + 后训练 | 会对话、遵循指令、风格更稳定 |
Base Model 的典型问题不是“它什么都不会”,而是“它不知道怎样以你希望的方式用会的东西”。
比如你输入:
请用 3 个要点解释什么是强化学习
一个 Base Model 可能会:
- 继续模仿互联网上的问答页面
- 输出一段风格混乱的解释
- 接着生成别人的追问
- 或者干脆把你的问题当成文章标题继续写下去
这不是它没有知识,而是它没有被训练成一个“助手”。
因此 Base Model 常见问题是:
- 不遵循指令
- 输出格式不稳定
- 不知道什么时候该拒绝
- 容易继续接龙而不是完成任务
- 可能输出有害或不合适内容
所以,从 Base Model 到 Chat Model,真正发生的不是“模型突然变聪明”,而是:
模型开始学会把已有能力组织成可用的对话行为。
这一步靠的就是后续的对齐训练。
2. 微调(Fine-tuning)
一句话:
用高质量任务数据继续训练模型,让它学会 如何回答问题、如何遵循指令、如何输出特定格式。
为什么预训练后还需要微调
如果预训练已经学了那么多,为什么不能直接拿来做产品?
因为预训练的目标和“做一个助手”的目标并不一致。
预训练优化的是:
“给定前文,最可能出现的下一个 token 是什么?”
而用户真正需要的是:
“给定我的任务,给我一个清晰、正确、符合要求的答案。”
这两个目标是相关的,但不是一回事。
举个简单例子。你给模型一句话:
请把下面内容总结成三点。
预训练模型可能知道“总结”这个概念,也见过类似文本;但它未必知道此时最好的行为是:
- 先读完输入内容
- 抽取关键点
- 严格输出三条
- 不额外发挥
SFT 的作用,就是用大量高质量的“输入—输出”示范,把模型从“会语言”进一步训练成“会完成任务”。
监督微调(SFT)
SFT(Supervised Fine-Tuning)最直观的形式,就是给模型看很多高质量示范。
例如:
输入: 请解释机器学习
输出: 机器学习是让计算机从数据中自动学习规律的技术。
再例如:
输入: 请把这段内容改写成正式邮件语气
输出: 尊敬的……
模型在这个阶段学到的,不只是答案本身,而是:
- 收到某类任务时应该采用什么结构
- 何时简洁,何时展开
- 什么是好的列表格式
- 如何遵守“只输出 JSON”“控制字数”“分步骤解释”等指令
你可以把 SFT 理解成:给模型上“示范课”。
SFT 主要解决什么问题
SFT 对模型的改善通常体现在几个方面:
1. 指令遵循
模型更懂得“你是在下任务,而不是在闲聊或接龙”。
2. 输出格式稳定
比如更容易遵守:
- 用表格回答
- 输出 JSON
- 分三点解释
- 先结论后展开
3. 对话风格成形
模型开始更像一个助手,而不像一台补全文本的机器。
4. 任务适配
通过不同领域数据,模型可以学会更专业的术语、语气和问题结构。
数据质量比数量更重要
SFT 阶段有一个经常被低估的事实:
高质量数据,往往比大规模低质量数据更重要。
因为这个阶段不是在“补知识总量”,而是在“塑造行为模板”。
如果数据里充满:
- 冗长空话
- 模糊指令
- 错误答案
- 风格不统一
- 低质量格式示范
那模型学到的就会是这些坏习惯。
这也是为什么很多开源模型参数不小,但聊天体验仍然不稳定——问题往往不只是 Base Model,而是后训练数据质量和配方的差距。
LoRA 与 QLoRA
在工程实践里,很多团队并不会从头全量微调一个大模型,而是使用更省资源的方法。
| 方法 | 可训练参数 | 显存需求 |
|---|---|---|
| 全量微调 | 100% | 极高 |
| LoRA | 0.1–1% | 低 |
| QLoRA | 0.1–1% + 4bit | 更低 |
LoRA 是什么
LoRA(Low-Rank Adaptation)的核心思想是:不要改整个大模型,只额外训练一小部分低秩适配参数。
原模型参数冻结,只训练少量附加矩阵。这样做的好处是:
- 显存占用更低
- 训练速度更快
- 更适合做领域适配
- 可以为同一个 Base Model 挂多个不同任务的适配器
QLoRA 又是什么
QLoRA 在 LoRA 的基础上进一步把底座模型量化到更低精度,例如 4bit,从而进一步节省显存。
这使得“用消费级显卡做大模型微调”成为可能。
但这里要避免过度乐观。常见说法是“24GB 显卡能微调 70B 模型”,这在某些配置下确实成立,但通常伴随:
- 极小 batch size
- gradient checkpointing
- CPU/offload
- 训练速度很慢
- 工程调参复杂
所以更准确的说法是:
QLoRA 把原本几乎不可触及的大模型微调,变成了小团队和个人开发者也能尝试的事情,但它不等于“廉价且轻松”。
微调 vs Prompt Engineering
很多团队在项目初期都会纠结:到底该不该微调?
一个很实用的经验法则是:
先试 Prompt,不行再微调。
原因很简单。Prompt 的成本最低、迭代最快、可解释性也更强;而微调一旦做错,代价更高。
| 场景 | 推荐 |
|---|---|
| 通用任务 | Prompt |
| 固定格式输出 | Prompt + 示例 |
| 专业领域术语 | 微调 |
| 高频调用、长 prompt 成本高 | 微调 |
| 复杂规则反复失效 | 微调或 RAG |
更直白一点:
- 如果问题只是“让模型按某种方式说话”,先试 prompt
- 如果问题是“模型始终不稳、老忘规则、每次都要喂一大堆示例”,微调才更值得
微调不是魔法。它更像是:把某种行为固化进模型里,减少每次推理时临时引导的成本。
3. 偏好优化(RLHF / DPO)
一句话:
通过人类偏好数据,让模型生成 更符合人类期望的回答。
RLHF 是其中一种典型方法,但从更广义上说,这一类方法都可以归到 Preference Optimization(偏好优化)。
为什么 SFT 之后还不够
SFT 可以教会模型“怎么回答”,但很难彻底解决一个更细的问题:
两条都看起来正确的回答,哪一条更好?
比如同一个问题:
- 回答 A:正确,但太简短
- 回答 B:也正确,但更清晰、有条理、有边界提醒
- 回答 C:内容全面,但太啰嗦
SFT 的训练目标更像“模仿示范答案”,但人类真正关心的,往往是这种更细腻的偏好排序:
- 哪条更 helpful
- 哪条更 harmless
- 哪条更 honest
- 哪条更符合场景期待
偏好优化就是在解决这个层次的问题。
RLHF Pipeline
经典 RLHF 可以概括为三步:
1. 收集偏好数据
2. 训练 Reward Model
3. 用 RL 算法优化 LLM
展开来看是这样:
第一步:收集偏好数据
让模型针对同一个 prompt 生成多个回答,然后由人类标注者排序:
A 比 B 好
B 比 C 好
这里不是简单打“对/错”,而是比较哪一个更符合人类偏好。
第二步:训练奖励模型(Reward Model)
奖励模型输入:
(prompt, response)
输出:
一个偏好分数
它学的是:对于这种问题,人类更喜欢什么样的回答。
第三步:优化原模型
再用 PPO 等强化学习方法,让原模型不断生成答案,由奖励模型打分,并朝着“更高奖励”的方向更新。
这样,模型就不只是会回答,而是会慢慢偏向人类更喜欢的回答风格。
PPO vs DPO
随着时间发展,业界开始发现:传统 RLHF 虽然有效,但工程复杂度高、训练不稳定、成本也大。因此后面出现了很多更直接的偏好优化方法。
| 方法 | 原理 |
|---|---|
| PPO | 经典 RLHF 路线,用奖励模型做强化学习 |
| DPO | 直接用偏好对优化,无需单独训练 RM |
| RLAIF | 用 AI 反馈替代部分人类反馈 |
2025–2026 年,一个明显趋势是:
- DPO
- IPO
- KTO
- ORPO
这类方法越来越流行。
原因也很现实:
- 实现更简单
- 训练更稳定
- 不需要完整 RL pipeline
- 对中小团队更友好
所以今天再说“RLHF”,很多时候其实是在泛指整类偏好优化方法,而不一定严格指 PPO + Reward Model 的经典三段式。
偏好优化到底改变了什么
偏好优化的作用,不是给模型增加很多新知识,而是改变模型在多个可选回答之间的偏好分布。
典型变化包括:
- 更愿意正面回答问题,而不是绕弯子
- 更少输出明显冒犯、有害或危险的内容
- 更会控制语气和边界
- 更容易保持一致的人设和回答风格
- 更懂得在不确定时表达不确定
这也是为什么 ChatGPT 相比 Base Model 更“像一个助手”。
更准确地说:
偏好优化是 Chat Model 之所以“好用”的主要原因之一。
偏好优化的局限
这一步虽然关键,但也不是万能的。
因为它主要解决的是“行为偏好”,不是“底层认知上限”。
也就是说,它可以让模型:
- 更愿意讲清楚
- 更少乱说
- 更符合规范
但它并不能自动让模型在高难数学、复杂代码、长程规划上突然跃升。
这也是为什么后面还会出现一个单独的方向:推理训练。
4. 推理模型(Reasoning Models)
定义:
推理模型(Reasoning Models,或 LRM)通常指那些:
- 在训练阶段更深地内化分步推理模式
- 在推理阶段主动使用更多计算来提升复杂任务准确率
的模型系列。
如果说普通 Chat Model 的目标是“更会回答”,那推理模型的目标更像是:
在复杂问题上,不急着立即回答,而是更擅长先分解、再求解、再验证。
为什么还需要推理训练
一个模型即使已经经过预训练、SFT 和偏好优化,也未必就擅长复杂推理。
原因在于:
- 预训练学到的是广泛模式,不一定针对高难推理优化
- SFT 更关注“像人类示范那样回答”
- 偏好优化更关注“人类更喜欢什么回答”
但数学证明、复杂代码调试、多步决策规划,这些任务对模型的要求更高:
它不仅要“会说”,还要“会拆步骤、能坚持逻辑、尽量减少中途跑偏”。
这就是推理模型出现的背景。
推理能力的两个来源
推理模型的能力,通常来自两个相互关联但不完全相同的机制:
训练阶段
CoT 内化 + 过程监督
↓
推理阶段
Test-time Compute Scaling
这两个机制经常被混在一起讲,但最好分开理解。
4.1 训练阶段:CoT 内化与过程监督
“先想再答”并不是一句口号,而是训练目标上的变化。
模型会接触大量带有推理过程的数据,例如:
题目
↓
中间步骤
↓
最终答案
常见方法包括:
| 方法 | 说明 |
|---|---|
| CoT 微调 | 用带推理步骤的数据做监督微调 |
| ORM | 只对最终答案打分 |
| PRM | 对每一步推理过程打分 |
CoT 微调在做什么
CoT(Chain-of-Thought)微调最核心的作用,是让模型习惯于把复杂问题展开成中间步骤,而不是直接跳到答案。
比如一道多步数学题,如果训练数据里经常呈现这种形式:
- 先列条件
- 再写公式
- 再代入
- 最后给结论
那么模型就更容易在面对类似问题时,自动激活这种“分步生成”的模式。
这并不意味着它每一步都真的像人在脑中演算,但它确实更容易沿着合理的步骤结构往前走。
PRM vs ORM
| 类型 | 评分方式 |
|---|---|
| ORM | 只看最终答案是否正确 |
| PRM | 对中间推理步骤也给奖励或惩罚 |
ORM(Outcome Reward Model)只关心结果。
PRM(Process Reward Model)则关心:你是怎么走到这个结果的。
这两者差别非常大。
只看最终结果时,模型可能会学到一种“碰运气”的策略:
只要最后答案对,中间乱写一点也没关系。
而 PRM 会鼓励模型形成更稳定的中间步骤,因为训练信号不再只在最后一刻出现,而是沿着整个推理过程展开。
所以在 2025 之后,PRM 越来越被认为是推理训练的重要组成部分。
一个重要提醒:推理链不一定都“真实”
这里也要保持技术上的克制。
虽然模型会生成推理链,但这并不意味着每一步都是严格意义上的“真实思考过程”。
有些情况下,模型可能是:
- 先大致锁定答案
- 再生成一段看起来合理的解释
也就是所谓的 post-hoc rationalization(事后合理化)。
所以更严谨的表述是:
推理链可以显著帮助模型完成复杂任务,但它并不保证每一步都等价于人类脑中的真实推理过程。
这也是为什么仅仅“让模型多写几步”并不总能提升质量,关键在于训练时有没有把过程本身纳入优化目标。
4.2 推理阶段:Test-time Compute Scaling
训练阶段解决的是“模型会不会分步做题”,而推理阶段解决的是另一个问题:
模型在真正回答时,愿不愿意花更多算力认真想。
传统 LLM 的运行方式更像是“一次前向、顺着输出”。
而推理模型强调的是:面对难题时,单次快速输出不一定最好,模型可以通过更多计算换更高准确率。
这类方法包括:
- 生成更长的内部推理链
- 多次采样不同解法
- 自我检查、自我纠错
- 对候选答案做排序
- 在必要时做搜索或工具调用
这就是所谓的 test-time compute scaling。
为什么这会有效
原因很像人类做题:
- 简单题一眼就能答
- 难题往往需要列草稿、回头检查、尝试不同方法
如果一个模型在运行时只允许“马上回答”,那它很可能在复杂题上失误。
但如果允许它“多想一会儿”,就可能显著提高正确率。
因此,今天很多推理模型的优势,并不只是“参数更大”,而是:
它们被训练成了会在难题上主动消耗更多推理预算。
真实代价
这类能力当然不是免费的。
推理模型通常比普通 chat model 昂贵得多。
复杂问题下,它可能消耗:
数千到数万 reasoning tokens
典型影响是:
| 指标 | 变化 |
|---|---|
| 延迟 | ×10 – ×100 |
| 成本 | ×5 – ×20 |
所以在工程实践里,“推理模型更强”并不自动等于“适合所有场景”。
例如:
- 客服问答、轻量写作、简单总结,未必需要 reasoning model
- 数学、代码、规划、科学问题,reasoning model 往往更值
本质上,这是一个精度、延迟、成本之间的权衡。
代表模型
| 模型 | 特点 |
|---|---|
| OpenAI o3 / o4-mini | 内部思考链不可见,强调推理时计算扩展 |
| DeepSeek-R1 | 推理链部分可见,强调多阶段训练与推理能力开源化 |
| Gemini / Claude 部分模型 | 也在探索类似的推理增强路线 |
o3 vs DeepSeek-R1
虽然它们都被归入“推理模型”,但路径并不完全相同。
| 模型 | 训练路径 | 推理链 |
|---|---|---|
| o3 | 大规模 RL on CoT,结合过程监督与推理时扩展 | 不可见 |
| DeepSeek-R1 | 多阶段后训练,强化推理模式与可解释输出 | 部分可见 |
| 其他推理模型 | 路线不一,通常结合 SFT、偏好优化、推理训练和 test-time scaling | 不公开或部分公开 |
这说明一件事:
推理模型不是某个固定配方,而是一类共同朝向“复杂任务性能”优化的训练范式。
5. 能力进阶路线图
如果把整条链路压缩成一张图,大概就是这样:
Base Model(预训练)
↓
会语言、懂知识、出现基础推理
↓
SFT
↓
学会按指令回答、输出格式稳定
↓
Preference Optimization
↓
更有用、更安全、更符合人类偏好
↓
Reasoning Post-Training
↓
更擅长多步推理、复杂规划、数学和代码
↓
Test-time Scaling
↓
在难题上用更多计算换更高准确率
这一整条路线,才构成了今天主流强模型的能力来源。
各阶段贡献
| 阶段 | 贡献 |
|---|---|
| 预训练 | 语言能力、知识储备、基础模式识别 |
| SFT | 指令遵循、对话结构、输出格式 |
| 偏好优化 | 有用性、安全性、风格一致性 |
| 推理训练 | 复杂逻辑、多步推理、过程稳定性 |
| 推理时扩展 | 在高难任务上进一步提升正确率 |
一个最容易记住的总结
如果你只想记住一句话,那就是:
预训练决定模型“知道多少”,SFT 决定模型“会不会按要求说”,偏好优化决定模型“说得像不像一个合格助手”,推理训练和 test-time scaling 决定模型“遇到难题时能不能多想几步”。
核心概念速查
| 概念 | 一句话 |
|---|---|
| 预训练 | 在海量文本上做 token 预测,学语言和知识 |
| Base Model | 只有预训练,擅长接龙,不擅长稳定对话 |
| SFT | 用高质量示范教模型如何回答 |
| LoRA | 低成本微调,只训练少量参数 |
| QLoRA | 在量化模型上做 LoRA,进一步省显存 |
| RLHF | 用人类反馈优化模型行为 |
| DPO | 更简单的偏好优化方法 |
| PRM | 对推理步骤打分,而不只看结果 |
| 推理模型 | 更擅长复杂任务和多步思考的模型 |
| Test-time compute | 推理时给模型更多计算预算,提高准确率 |
下一篇
模型的能力来自训练,但训练完成以后,模型在运行时又是如何“利用上下文”的?
为什么有的模型明明上下文窗口很长,却还是会忘记前面说过的话?
为什么 RAG 有时候有效,有时候又像“外挂失败”?
为什么“更长上下文”不等于“真正记住”?
下一篇我们就来讲这些问题:
- 上下文窗口到底是什么
- 模型为什么会“失忆”
- RAG、Memory、总结链分别解决什么问题
- 为什么即使有 1M 上下文,工程上仍然要做检索和记忆设计