用 Python 理解推理模型训练四环节
文章围绕评估、推理时计算扩展、强化学习和蒸馏,解释推理模型的构建过程,并配有 Python 示例。涉及多数投票、可验证奖励强化学习,以及向小模型迁移推理能力的方法。
AI 深度解读
推理模型的进步,不只是模型变大,也来自回答时多花计算,以及训练后期更明确的奖励信号。这篇文章沿着评估、推理时扩展、强化学习、蒸馏四个环节,解释模型如何学会拆解问题,再把能力迁移到更小的模型。
对程序员来说,最有用的不是照着几段 Python 就开始训练,而是分清:多试几次、修改模型权重、换用蒸馏模型,分别解决什么问题。原文提供了直观示例,也有几处把经验判断写成定论,需要拆开看。
先测会不会,再看多试几次值不值
原文以 Sebastian Raschka 在 2026 年 10 月发布的课程和书籍为线索,但展示的是教学代码,没有提供作者完整训练模型的实验记录。
它把推理模型描述为经过额外训练、会生成中间步骤并尝试纠错的 LLM。过去的思维链(chain-of-thought)主要靠提示词引导,现在则可以通过后训练强化这种行为。不过,推理模型依然逐 token 生成文本,中间步骤也不能直接等同于可信的内部思考记录。
第一步是评估。数学可以用 GSM8K、AIME,编程可以用带自动测试的 LiveCodeBench。关键是答案能不能被可靠检查。
原文介绍了两个指标:pass@1 看一次回答是否成功;pass@k 看 k 次尝试中是否至少有一次成功。后者允许更多机会,通常比 pass@1 更容易命中。原文称它「更严格」并不准确,两者差距也不能单独证明模型具备真实推理能力。
假如模型偶尔能做对,可以先尝试推理时扩展(inference-time scaling):增加回答时的计算量,包括延长生成、并行采样、搜索不同路径,而不修改权重。
下面是 self-consistency 的最小示例,它解决的是从多个候选答案中选一个:
from collections import Counter
def self_consistency(answers):
votes = Counter(answers)
winner, count = votes.most_common(1)[0]
return winner
samples = ["42", "41", "42", "42", "40"]
print(self_consistency(samples))
结果是 42,五个样本中有三个投给它。要看的是 Counter(answers):这里统计的是已经整理好的答案,没有生成推理链,也没有处理答案格式差异。
这类方法由 Wang 等人在 2022 年的工作中系统讨论。best-of-n 则用验证器或奖励模型评分,允许少数候选胜出。原文还列出 Monte Carlo Tree Search 和按 token 预算延长或截断生成的 budget forcing,但具体能否用于闭源 API,要看接口暴露了什么控制能力。
多采样是在增加找到正确答案的机会,不是在更新模型能力。
它还会增加 token、延迟和费用。多个候选如果重复同一种错误,多数票只会让错误更稳定。
RL 真正依赖的,是一个难以钻空子的验证器
要改变模型行为,需要更新权重。可验证奖励强化学习(RLVR)的做法是:模型生成完整回答,验证器判对给 1,判错给 0,再用奖励调整生成这些回答的概率。
它省去了逐步标注推理过程的成本,但把压力集中到了验证器上。原文的数学检查函数用正则 r"-?\d+(?:\.\d+)?" 提取第一个数字,再比较字符串。它适合演示,却不能可靠提取最终答案,也处理不好等价表达。拿它直接做奖励,模型可能学会迎合格式。
这就是 reward hacking:模型优化的是评分规则,规则有漏洞,训练就可能朝漏洞走。
原文用 DeepSeek-R1 说明这条路线。2025 年的 R1-Zero 直接从基础模型进行强化学习,出现了推理行为,也出现语言混杂、可读性差等问题;最终 R1 加入了 RL 前的监督微调。这里必须区分 R1-Zero 和 R1,不能笼统说所有 DeepSeek-R1 都没有前置监督训练。
算法上,PPO 使用价值网络估计状态好坏;DeepSeekMath 引入的 GRPO 则在同一道题的多个回答之间计算相对优势,省去独立价值网络。
下面的代码展示这种组内比较:
import numpy as np
def grpo_advantages(rewards):
rewards = np.array(rewards, dtype=float)
return (rewards - rewards.mean()) / (rewards.std() + 1e-8)
group_rewards = [1.0, 0.0, 1.0, 1.0, 0.0]
print(np.round(grpo_advantages(group_rewards), 3))
输出为 [ 0.816 -1.225 0.816 0.816 -1.225]。要看的是标准化那一行:正确回答获得正优势,错误回答获得负优势;1e-8 用来避免除零。
这还不是完整 GRPO。原文也提到,训练通常包含相对参考策略的 KL 惩罚,限制模型为了奖励偏离过远。至于省掉价值网络就能让训练内存「减半」,原文没有给配置和测量,不能当作通用比例。
结果奖励(ORM)只检查最终答案;过程奖励(PRM)逐步评分,信号更细,但标注更贵。最终答案正确,不保证中间步骤正确。
蒸馏能降低部署门槛,但不是把大模型原样装进去
强化学习需要反复生成、验证和更新权重。蒸馏(distillation)换了一条路:让已经训练好的 teacher 提供学习目标,由较小的 student 模仿。
原文区分两种方式。
一种是监督微调(SFT):teacher 生成推理文本,筛选后交给 student 学习。原文将部分基于 Qwen、Llama 的 DeepSeek-R1 蒸馏模型归入这一路线。
另一种沿用 Hinton 等人在 2015 年讨论的方法,让 student 模仿 teacher 的 token 概率分布。示例使用 PyTorch 的 F.log_softmax、F.softmax 和 F.kl_div,设置 temperature=2.0,采用 reduction="batchmean",最后乘以 temperature ** 2;原文给出的损失约为 0.1195。
温度用于软化分布,让训练利用候选 token 的相对概率。但这些概率不是「答案接近正确」的直接证明,低概率 token 也未必代表有价值的推理路径。
两条路线的接入门槛不同:拿到 teacher 的文本输出,可以做文本蒸馏;要复现完整分布的 KL 蒸馏,还需要相应 logits 或概率访问能力,普通聊天 API 未必提供。
小模型可能更适合低成本部署,但手机或无独立 GPU 的服务器能否运行,还取决于参数量、量化、上下文长度和延迟要求。原文没有给硬件实测。
我的判断
我认可这篇文章把验证放在前面。对代码任务,自动测试既能衡量输出,也可能成为训练奖励,工程价值很直接。
但标题中的「四阶段」更适合作为技术地图,不是每个团队都必须依次执行的流水线。评估应贯穿全过程;推理时扩展可以独立使用;蒸馏也可以直接利用现成 teacher,不必先自行做 RL。
原文对一些结论说得过满。例如「student 永远不能超过 teacher」,不能当作蒸馏的普遍定理;「RL 是超越任何 teacher 的途径」也缺少适用条件和对照数据。文章没有展示任务成功率、训练成本或蒸馏损失的系统比较,这些更接近路线说明,而非效果证明。
产品案例也只能帮助理解。原文列出 GPT、Gemini、Qwen、Anthropic,并提到 OpenAI 的 o1、o3、Qwen3 的快慢模式和 Claude 的扩展推理,但同时承认部分产品没有公开完整训练方法,不能从界面上的推理开关反推训练配方。
对一般开发团队,先把验收和预算做好,比立即训练推理模型更容易获得可判断的收益。
能拿来做什么
- 给 AI 修复前端或 Node bug 建立独立评估集,保留失败用例、回归测试和单次成功率;训练题与评估题分开,定期补充新题,降低记忆答案造成的假进步。
- 对偶尔能解出的任务尝试多候选,并记录成功率、token 和耗时。代码优先交给测试验证,别只让几个回答互相投票;测试通过后仍需关注未覆盖的边界。
- 先运行教学示例理解机制。Linux 或 macOS 可用 Python 3.10 及以上,依次执行
python3 -m venv venv、source venv/bin/activate、pip install torch numpy,再用python nombre_archivo.py运行;Windows 将激活命令换为venv\Scripts\activate。这些小计算不需要 GPU,也不代表已经训练了模型。 - 如果考虑从小型 Qwen3 起步做蒸馏,先确认 teacher 能提供文本还是概率分布,再抽查推理步骤。只按最终答案过滤,会把碰巧答对的错误过程一起教给 student。