为什么推理能力需要专门训练

普通大模型在预训练和指令微调阶段学到的,更多是「快速联想」式的回答能力:看到一个问题,直接顺着最可能的模式把答案写出来。遇到需要多步推理的数学题、逻辑题或复杂代码任务时,这种能力就不够用了——模型会在中途出错,然后沿着错误方向一路错下去。o1 一类推理模型的出现,说明「推理」是可以被专门训练出来的:让模型在给出最终答案之前,先产出一段长长的思维链,一步一步想清楚再回答。

把推理能力训练出来,靠的不是堆更多普通文本,而是强化学习。核心思路是:让模型自由生成思考过程,然后用一个明确的奖励信号(比如数学题答案对不对、代码能不能通过测试)去强化那些「想对了」的路径,弱化那些「想错了」的路径。经过大量这样的强化,模型会逐渐学会自我纠错、回溯重试、分步验算,推理能力就自然涌现了。

推理模型的核心不是「更聪明的底座」,而是「更会思考的过程」:用强化学习把长程思考的行为固化进模型参数。
本文核心知识点
  • 思维链数据推理模型训练的基础:高质量分步思考样本。
  • 可验证奖励数学、代码等有客观答案的任务,奖励信号容易设计。
  • PPO经典强化学习算法:策略网络加价值网络,带 KL 约束。
  • GRPO去价值网络的群体相对策略优化,显存更省、实现更简单。
推理模型训练配图:中央发光大脑延伸出思维链节点序列,上方环形箭头表示强化学习反馈回路,蓝色渐变扁平风格
推理模型训练的示意:思维链节点逐级点亮,环形箭头表示强化学习的反馈回路。

推理数据:思维链与可验证奖励

强化学习训练推理模型之前,通常先做一轮监督微调(SFT),让模型见过「什么是好的思考过程」。这批思维链数据从哪里来?早期的做法是人工编写,成本极高;现在更多是用大模型蒸馏:让一个已经很强的推理模型去解数学题,把它的思维链抽出来,作为训练样本。数据覆盖的题型越广、难度越有梯度,后面强化学习的起点就越好。

有了基础能力之后,强化学习阶段不再需要人工写思维链,只需要一个奖励信号。这里的关键是「可验证奖励」:数学题直接比对最终答案,编程题让代码跑测试用例,这类任务答案是客观的,模型无法靠耍小聪明骗过奖励。反观开放式问答,奖励要么依赖人工打分,要么依赖另一个模型判断,噪声大、成本高,强化学习的效果就不那么稳定。所以推理模型的训练,一般先从数学和代码这两类「答案可验证」的任务做起。

# 可验证奖励的判定思路(以数学题为例)
# 1. 模型输出分为两部分:思维链部分 + 最终答案部分
# 2. 用规则提取最终答案(比如 \boxed{...} 里的内容)
# 3. 与标准答案比对:字符串相等或数值等价
# 4. 答对给 +1,答错给 0;格式不合规(没提取出答案)也给 0
# 5. 注意:奖励只看最终结果,不评过程对不对
def verifiable_reward(response, ground_truth):
    answer = extract_final_answer(response)
    if answer is None:
        return 0.0
    return 1.0 if is_equivalent(answer, ground_truth) else 0.0

PPO 算法拆解:策略、价值与 KL 约束

PPO(Proximal Policy Optimization)是强化学习训练语言模型最常用的算法,也是 RLHF 里那一步「强化学习」的默认选择。它的基本流程是:让当前策略模型(Policy)生成一批回答,算出每条回答的奖励,再用奖励去更新策略,让「高奖励的回答」出现概率变大。为了防止一次更新步子迈得太大把模型改崩,PPO 用「重要性采样」和「裁剪」控制每次更新的幅度。

PPO 在语言模型场景里通常还带一个价值网络(Critic),用来估计「从某个 token 开始,最后能拿到多少奖励」。价值网络的存在是为了算 Advantage(优势值)——比平均表现好多少,决定该把这个 token 的概率调高还是调低。另外,PPO 里几乎一定会加 KL 散度约束:新策略不能离参考策略(一般是 SFT 之后的模型)太远,否则模型会为了奖励彻底放飞,说胡话甚至自我重复。

# PPO 单步更新的核心伪代码
# 1. 策略模型 pi_theta 生成回答,记录每个 token 的概率
# 2. 价值网络 V 估计状态价值,计算优势 A_t
# 3. 计算新旧策略概率比 r_t = pi_new / pi_old
# 4. 裁剪目标:min(r_t * A_t, clip(r_t, 1-eps, 1+eps) * A_t)
# 5. 加上 KL 惩罚项:- beta * KL(pi_new || pi_ref)
# 6. 梯度更新,多轮 epoch 内重复采样与优化

GRPO 算法拆解:去价值网络的群体优化

GRPO(Group Relative Policy Optimization)是 DeepSeek-R1 带火的一类做法,核心思想很直接:不再训练一个价值网络,而是让策略模型对同一个问题生成一组(比如 8 条)回答,用这组回答内部的相对表现来定义优势。哪条回答比组内平均水平好,就奖励它;比平均差,就压制它。这样 Advantage 的计算完全来自采样组本身,不需要额外的价值网络。

去掉价值网络带来的好处非常实际:少了一个和策略模型差不多大的网络,显存占用明显下降,训练吞吐更高,分布式实现的复杂度也低很多。GRPO 同样保留 KL 约束,让新策略贴着参考策略走。对训练推理模型这种「采样轨迹特别长」的场景来说,GRPO 把每个问题采样多条回答的开销摊进了批次里,工程上比 PPO 更好落地。

# GRPO 单步更新的核心伪代码
# 1. 对问题 q,从策略模型采样一组回答 a_1 ... a_G(比如 G=8)
# 2. 逐条计算可验证奖励 r_i = verifiable_reward(a_i)
# 3. 组内归一化:A_i = (r_i - mean(r)) / std(r)
# 4. 优势为正的回答概率调高,为负的调低
# 5. 同样加 KL 惩罚,控制与参考策略的距离
# 6. 一个组内完成优势计算,不需要价值网络
GRPO 为什么适合推理模型训练
  • 省显存没有价值网络,少一个和策略同规模的网络。
  • 省实现优势直接来自组内采样,无需时序差分估计。
  • 够用可验证奖励噪声小,组内相对比较已经足够稳定。

PPO 与 GRPO 的工程取舍

两种算法没有绝对的优劣,只有适不适合你的场景。PPO 理论上更通用:价值网络可以处理奖励不明确的连续型任务,适合通用对齐(RLHF)这类奖励模型打分的情况;代价是显存翻倍、超参数多(学习率、裁剪阈值、KL 系数、价值网络损失权重),调起来费时费力。GRPO 是为「批量采样、奖励可验证」量身定做的,数学和代码任务里效果与 PPO 相当,但显存省、实现快,很多开源推理模型项目直接选它起步。

对比项PPOGRPO
价值网络需要,显存开销大不需要,省显存
优势计算价值估计 + 时序差分组内相对归一化
奖励类型可验证奖励、奖励模型均可更适合可验证奖励
实现复杂度较高,超参数多较低,易复现
典型场景RLHF 通用对齐数学 / 代码推理训练