Loading

【大模型Wiki】18 · 推理模型与强化学习

推理模型与强化学习:从 CoT 提示到 RLVR

大模型 Wiki · 补充篇 14 | 2026-09 整理

如果说 2020–2023 的主旋律是"预训练 Scaling Law",那 2024–2026 的主旋律就是推理时间计算(test-time compute):让模型想得更久、更强,并且用强化学习把这种能力练出来。

这一转变的底层逻辑非常朴素:预训练把"世界知识"压缩进了权重,但"如何正确思考一个问题"并不能仅靠 next-token 预测学会——它需要在"试错—反馈"的循环里被强化。于是 2024 年 OpenAI 用 o1 证明了一条新路:用强化学习(RL)直接优化"思考过程"本身,让模型在回答前先产出一长串可验证、可纠错的思维链(Chain-of-Thought, CoT),再把思考结果收敛成最终答案。

本篇沿着"提示式 CoT → 搜索式推理 → RL 训练长 CoT → 可验证奖励 RL → agentic RL"的脉络,把推理模型的方法学、训练算法(重点是 GRPO)与工程形态讲透,并在末尾给出实践小结。

一、时间线

时间 事件 意义
2022 Chain-of-Thought 提示 上下文里"想一步"
2023 Self-Consistency、ToT 采样/搜索式推理
2024-09 OpenAI o1 发布 首个商用"思考型"模型,RL 训练长思维链
2025-01 DeepSeek-R1 开源 RLVR 路线跑通且开源,行业引爆点
2025 Claude 3.7 混合推理、QwQ-32B、Gemini Thinking 思考/快速双模式成标配
2025-08 GPT-5(内置路由) 统一快模型与推理模型
2026 GPT-6 Astra、DeepSeek-V4、Kimi K3 RL 压榨到极致,agentic RL 成主战场

把这张表读成一条"能力释放曲线"会更清楚:

  • 2022 的 CoT 提示只是"告诉模型你该一步步想",思考质量取决于模型已有的能力,没有人专门去训练它"想得好"。
  • 2023 的 Self-Consistency / Tree-of-Thought(ToT)把推理从"一次性生成"变成"多次采样 + 搜索/投票",属于推理时的算法增强,不改动模型权重,但显著提升了数学与谜题类任务的准确率。
  • 2024 的 o1第一次把"长思考"烧进权重:模型在训练阶段就被 RL 教会"先展开长 CoT、再给答案",推理时只需设一个预算,模型自己决定想多久。
  • 2025 的 R1把整套方法开源(含训练配方与蒸馏小模型),直接把"推理模型"从奢侈品变成人人可复现的基线能力。
  • 2026的竞争焦点已经不是"会不会想",而是"想完之后能不能在真实环境里把事办成"——这就是 agentic RL。

一句话:CoT 是"被提示出来的思考",o1/R1 是"被强化出来的思考",agentic RL 是"在真实世界里被验证的思考"。

二、RLHF → RLVR:奖励信号的革命

推理模型能跑通,关键在于奖励信号从"人类主观偏好"换成了"客观可验证结果"。这一节先讲清楚旧范式为什么不够,再讲新范式为什么有效。

2.1 RLHF 的困境

传统 RLHF(基于人类反馈的强化学习)用奖励模型(reward model,RM)打分——RM 本身是用人类偏好标注训练出来的一个神经网络。第 02 篇已述其三阶段流程(SFT → RM 训练 → PPO 对齐)。它在"有用、无害、诚实"这类主观维度上效果很好,但放到推理场景有三个硬伤:

  1. reward hacking(奖励黑客):RM 是个可欺骗的神经网络。模型会学会生成"看起来符合人类偏好"的话术(比如更啰嗦、更谄媚、更爱用列表),而非真正更好的答案。一旦优化步数够多,策略会钻 RM 的空子,真实质量反而下降——这就是著名的"Goodhart 定律"在 RLHF 上的体现。
  2. 标注昂贵且不可扩展:每一条偏好标注都要人看、要比对,数学/代码这种"对错一眼可判"的任务也要人标,成本极高,且难以覆盖海量题目。
  3. 主观标不准:对"哪个回答更有洞见",不同人差异很大;RM 学到的往往是"平均人类偏好",会拉低尖端推理能力(聪明人觉得对的,普通人未必觉得好)。

因此 RLHF 适合"对齐价值观",但不适合"提升硬推理"。推理需要的是"对错分明、即时反馈、不可作弊"的信号——这就是 RLVR。

2.2 RLVR(可验证奖励强化学习)

RLVR(Reinforcement Learning with Verifiable Rewards)对答案可自动验证的任务(数学、代码、逻辑、形式化证明),直接用规则/测试通过率当奖励,彻底绕开奖励模型:

奖励 = 答案是否正确(数学:最终结果比对;代码:单元测试通过)

具体落地时,奖励通常由两部分组成:

  • 准确性奖励(accuracy reward):数学题把模型最终答案解析出来(通常用 <boxed{...}> 等定界符抽取),与标准答案字符串比对;代码题把生成代码放进沙箱跑隐藏测试用例,按通过率给分。
  • 格式奖励(format reward):鼓励模型把"思考"包在固定标签(如 <think:6124c78e>...</think:6124c78e>)里、"答案"放在固定标签里,便于解析与工程化。格式奖励是可验证的(正则即可判),不算主观。

RLVR 为什么能解锁推理能力:

  • 无法被"讨好"式 hacking(几乎):模型没法靠话术骗过"单元测试"或"数值比对"——要么对要么错。这把优化目标钉死在"真正做对题"上。
  • 零人工标注、无限供给:只要有一堆带标准答案/测试用例的题,奖励就能自动产生,数据规模不再受人力约束。
  • 信号稠密且即时:每道题一发完就有对错,比"人类偏好"这种噪声大、延迟高的信号干净得多。

注意措辞"几乎":RLVR 仍有盲区。比如模型可能记住某道题的特定测试用例、或把答案写成"恰好能通过正则"的形式而不真懂。所以工业界通常会叠加"测试集多样性 + 去重 + 格式鲁棒性"等工程护栏。

  • GRPO(Group Relative Policy Optimization,DeepSeek 提出):同题采样一组,组内相对优势代替 critic,省显存省算力,已成事实标准;后续变体 GSPO(阿里)、CISPO(MiniMax)、SAO(智谱)各有取舍。

2.3 从"会考试"到"会干活":agentic RL

2026 年 RL 的新战场是长程任务:在真实环境(终端、浏览器、IDE)里多步执行,用任务完成度做奖励。Grok 4.5 用 Cursor 开发会话轨迹做异步 agentic RL;GPT-6 Astra 的 OSWorld/AutomationBench 成绩就是这条路线的产出。要点:多轮环境交互、稀疏奖励、轨迹过滤(trainability filtering)、熵控制防止模式坍缩。

和"做题"相比,agentic RL 难在三点:

  1. 奖励极度稀疏:写一个功能、修一个 bug,往往是几十上百步操作后才有"测试通过/任务完成"这一条信号,中间全是 0 奖励。如何在稀疏信号下不训崩,是核心难题。
  2. 轨迹可训练性过滤(trainability filtering):不是所有失败轨迹都有学习价值。一条"第一步就跑偏、后面全错"的轨迹,梯度噪声极大;工程上会过滤掉"太简单(全对,无梯度)"和"太难(全错,梯度爆炸)"的样本,只保留"有得学"的中间难度轨迹。
  3. 熵控制防模式坍缩:长程任务里,策略容易过早收敛到某一种"看起来安全但低效"的固定套路。需要保熵(entropy regularization)鼓励探索,又不能在推理任务上抖得太厉害——这是 2026 年各家的调参重心。

2.4 GRPO 算法原理:为什么去掉 critic

GRPO 是 R1 能够"开源且可复现"的算法基石。要理解它,先回顾 PPO(RLHF 用的主力)。

PPO 为什么重:PPO 是 actor-critic 架构,除了策略模型(policy / actor)外,还要训练一个价值模型(critic / value)来估计每个状态的价值 V(s),用作优势函数 A = R - V(s) 的基线(baseline)。价值模型要和策略模型一样大,于是训练时显存与算力接近翻倍;而且价值模型本身也要训准,不准就会带偏优势估计。

GRPO 的核心洞见:对"同一道题"采样一组(group)回答,用这组回答奖励的均值当基线,组内相对高低就是优势——根本不需要单独的价值模型。

对 prompt x:采样 G 条回答 {o_1 ... o_G}
计算每条奖励 {r_1 ... r_G}
组内基线  mean = (Σ r_i) / G
组内标准差 std = sqrt(Σ (r_i - mean)^2 / G)
优势 Â_i = (r_i - mean) / std        # 组内相对优势,天然去中心化

为什么"组内相对"就够?因为强化学习要的是"哪些回答更好"的比较信号,而不是"绝对有多好"。同一道题的 G 条回答共享同一上下文,彼此可比;用组均值做基线,等价于用一个"随 prompt 变化的、零参数的条件基线",既消除了奖励量纲差异,又省掉了 critic。

GRPO 的目标函数(带 KL 约束,防止策略离参考模型太远而跑飞):

L_GRPO = - E_x [ (1/G) Σ_i min( ρ_i · Â_i,  clip(ρ_i, 1-ε, 1+ε) · Â_i ) ]  +  β · KL(π_θ || π_ref)

其中 ρ_i = π_θ(o_i | x) / π_ref(o_i | x)   # 新旧策略概率比,PPO 式裁剪
     Â_i = (r_i - mean(r)) / std(r)          # 组内相对优势
     β   = KL 惩罚系数,把策略拉在参考模型附近

工程收益小结:

  • 省显存:去掉一个和策略同规模的 critic,训练显存常降 30–50%。
  • 省算力、更稳:少一个要训准的网络,梯度噪声更小,超参更友好。
  • 天然适配 RLVR:RLVR 的奖励是 per-sample 的标量,正好喂给"组内标准化",无需价值网络插值。

也正因为 GRPO 把"推理 RL"的工程门槛砍掉一大截,R1 才能把完整配方开源,带动后续 GSPO(阿里,对概率比做裁剪的位置更稳)、CISPO(MiniMax,裁剪重要性采样权重防离群)、SAO(智谱)等变体百花齐放——它们都在"组内相对优势"这同一个骨架上做局部改良。

伪代码实现见下方"实现过程"小节。

2.5 奖励建模的工程实践:格式 + 准确性 + 稳定性

工业界把 RLVR 奖励落地的几个经验:

  • 答案抽取要鲁棒:数学题不能只比"最后一个数字",要解析 <boxed{}>、处理单位/格式;代码题要把"隐藏测试"与"可见测试"分开,防止过拟合可见集。
  • 格式奖励要轻:格式奖励权重过高会诱导"空话套格式";常见做法是格式只占小比例,主力仍是准确性。
  • 重复/长度惩罚:长 CoT 容易陷入"换汤不换药"的重复,需要加重复 n-gram 惩罚或长度惩罚,避免模型用"写更长"骗取探索。
  • KL 系数要调:β 太大模型不敢探索、收益上不去;太小则分布漂移、生成乱码。R1 系多在训练中逐步退火 β。
# 一个最小可用的 RLVR 奖励函数(伪代码,带中文注释)
def rlvr_reward(question, model_output, gold=None, tests=None):
    # 1) 抽取思考与答案部分
    think = extract_tag(model_output, "think")     # 思考内容(仅记录,不奖励)
    answer = extract_tag(model_output, "answer")   # 最终答案

    acc = 0.0
    if gold is not None:                            # 数学/客观题:结果比对
        pred = parse_answer(answer)
        acc = 1.0 if normalize(pred) == normalize(gold) else 0.0
    if tests is not None:                           # 代码题:跑沙箱测试
        acc = run_tests(answer, tests)              # 返回 0~1 的通过率

    fmt = 0.1 if (think and answer) else 0.0        # 轻量格式奖励
    return acc + fmt                                # 主信号是 acc

三、思考模式的工程形态

推理能力进了权重,接下来是"怎么把它交到用户手里"的工程问题:模型该想多久、怎么想、想崩了怎么办。

3.1 混合推理

Claude 3.7 首创"一个模型两种模式":简单问题秒回,难题进入思考模式展开长 CoT。现为主流设计。

混合推理的本质是在同一个权重里塞下"快思考"与"慢思考"两套行为,靠一个开关或系统提示切换:

  • 快速模式:直接出答案,延迟低、成本低,适合闲聊、补代码、格式转换。
  • 思考模式:先 <think:6124c78e> 长链再 <answer>,适合数学、竞赛题、复杂多步规划。

为什么"一个模型两种模式"比"两个独立模型"好?因为共享权重让快/慢模式互相借力:思考模式里学到的推理能力,会悄悄提升快速模式的准度;而快速模式的高频使用数据,又能反哺思考模式的表达。GPT-5 之后更是内置实时路由器,由模型自己判断"这题要不要想",用户无感知。

3.2 思考预算(thinking budget)

控制推理 token 上限/强度。GPT-6 Astra 提供 low→max 五档推理强度,用户按任务难度权衡成本——思考深度本身成了定价维度(见第 15 篇"推理速度商品化")。

思考预算的工程实现通常有两种:

  • 软预算:在系统提示里写"请用不超过 N 个词思考",靠模型自觉;实现简单但不可控。
  • 硬预算:推理时统计 <think:6124c78e> 内 token,超过上限强制截断并进入"收尾"阶段;更可控但可能截断在关键步。

预算档位对应的其实是"test-time compute 的旋钮":low 档省 token 但易错,max 档贵但准。对用户而言,"这道题值不值得让模型多想"成了一个需要自己做的成本决策——这正是推理商品化的核心。

3.3 有效的技巧

  • 让模型"再想一步"(追问、反思、自我验证)通常有收益,但要防过度思考(简单任务上浪费 token,甚至自我怀疑翻车)。
  • 结构化输出 + 工具调用穿插思考:代码类任务"写代码 → 跑测试 → 修错"的外部反馈循环,比纯内部 CoT 更有效。

补充几条实战经验:

  • 追问比一次到位更稳:对难题,先要"草稿",再要"定稿",往往比一次生成终稿更准(本质是把 test-time compute 显式分段)。
  • 把验证外包给工具:数学让模型"先给解法,再代入检验";代码让模型"写完立刻跑测试"——外部可执行反馈比模型自我感觉可靠得多。
  • 温度与思考预算联动:难题用低温度保一致性,简单题用高温度保多样;思考预算高时温度可略高以鼓励探索。

3.4 思维链长度与效果的关系

"想得越久越好吗?"——经验上正相关但有拐点。

  • 上升段:在任务难度适中时,更长的 CoT 让模型有机会展开子目标、验证中间结论,Pass@1 随长度稳定上升。这也是 test-time scaling 的直观证据:同样的权重,给它更多 token,它就更强。
  • 平台段:到达某个长度后收益递减,再加 token 只是换种说法重复,准确率不再涨。
  • 下降段(过度思考):过长时模型会"自我怀疑"——先得出正确结论,又在后续步骤里反复推翻、绕回错误分支,反而把对答案改错。R1 系模型在简单题上尤其容易"想太多翻车"。

所以"长度缩放"不是无脑拉长,而是按难度配预算:难题给足,简单题收紧。这也是思考预算(3.2)存在的意义。

准确率
  │        ╱─────────╲
  │      ╱             ╲___  下降(过度思考)
  │    ╱   平台(递减)
  │  ╱ 上升(test-time scaling)
  │╱
  └──────────────────────────► CoT 长度

3.5 反思与验证机制

推理模型最迷人的涌现行为,是会"回头看":

  • 回溯(backtracking):当某条推导走死,模型会在 CoT 里写"等等,这里不对",然后换个方向——R1-Zero 训练中期自发出现,被称为"aha moment(顿悟时刻)"。
  • 自我验证(self-verification):在给出答案前,模型会重算关键步骤、代入检验、交叉核对约束。
  • 多视角校验:难题里模型可能"先假设 A 推一遍、再假设 B 推一遍",最后选更自洽的。

工程上可以显式强化这些机制:

  • 在 RLVR 奖励里加"是否做了验证步骤"的轻奖励;
  • 用提示引导"请先列出验证方式,再作答";
  • 更彻底的是"生成 + 独立验证两模型"或"采样多解投票"(Self-Consistency 思路的 RL 版)。

但要警惕:验证本身也会被 hack——模型可能写出"看似在验证"的空话。验证的有效性最终仍要靠可验证信号的闭环(测试通过、结果一致)来保证。

四、与蒸馏的分工

第 11 篇已详述,这里给结论:

  • RL 负责"创造":把模型能力推到教师之上(R1 的涌现、Astra 的 FrontierMath 97.6%)。
  • 蒸馏负责"普及":把 RL 习得的能力以 1/100 成本传给小模型(R1-Distill 系列)。
  • 两者的组合是当前所有前沿实验室后训练管线的骨架。

把分工说得更细:

  • RL 是"能力上限的拓荒者":只有大模型(数十亿激活以上)才喂得动长程 RL——它要试错、要探索、要扛住稀疏奖励。RL 产出的不是"一个答案",而是"一种会思考的权重分布"。
  • 蒸馏是"能力的搬运工":用小模型去模仿大模型(教师)在难题上的思考轨迹(CoT 蒸馏),让 7B/14B 级别模型也能"学着像大模型那样想"。代价极低——一次 SFT 即可,无需 RL 的昂贵采样。
  • 互补而非替代:蒸馏的小模型上限被教师锁死(不会超过教师),但 RL 又依赖大模型才跑得动。于是"大模型 RL 拓荒 → 蒸馏下沉到小模型"成了标准闭环。R1-Distill 系列正是把 R1(671B)的推理行为蒸馏进 Qwen/LLaMA 系的 1.5B~70B 小模型,让消费级显卡也能跑强推理。

实践提示:如果你只有单卡/小集群,别硬上 RL——直接用 R1-Distill 类权重做 SFT 微调,性价比远高于自己训 RL。

五、R1 训练流程全解:从 R1-Zero 到多阶段流水线

这是本篇的方法学高潮。DeepSeek 把"推理 RL"拆成两条路线公开,理解它能吃透整代推理模型的训练哲学。

5.1 R1-Zero:纯 RL,不做 SFT

R1-Zero 的起点是 DeepSeek-V3-Base(基座,未经指令微调),直接上 GRPO:

DeepSeek-V3-Base
   │  直接 RL(GRPO + RLVR 奖励:准确性 + 格式)
   ▼
R1-Zero  ← 没有任何 SFT 冷启动

它的惊人之处在于:不教任何"怎么思考"的示范,模型自己从"对错反馈"里涌现出了长 CoT、反思、多步规划。这证明"会推理"可以由 RL 端到端逼出来,而非必须先有人类示范。

但 R1-Zero 有两个可见缺陷,促使了 R1 的诞生:

  • 可读性差:思考过程语言混杂、格式乱,人类难读。
  • 语言混杂:中英混杂、符号乱飞,不利于对齐与落地。

5.2 R1:多阶段 SFT + RL 流水线

R1 用"先给少量示范、再 RL、再回收、再对齐"的四段式,既保留 R1-Zero 的能力,又修掉可读性:

① 冷启动 SFT:用几千条"高质量长 CoT"示范微调基座
      ↓
② 推理 RL(GRPO):在数学/代码上强化,奖励同 R1-Zero
      ↓
③ 拒绝采样 SFT:用训练好的策略采样大量回答,只保留正确且可读的,
   混合通用能力数据(写作/角色/安全)做一轮 SFT
      ↓
④ 通用 RL(对齐):在推理能力之上叠加有用性 + 安全性奖励,
   输出最终 R1

各阶段意图:

  • ① 冷启动:给模型一个"好思考长什么样"的初始模板,避免从零探索的混乱;少量即可(远少于 RL 所需数据)。
  • ② 推理 RL:把能力推到顶(对应 R1-Zero 那一步,但有更好起点)。
  • ③ 拒绝采样:用"策略自己生成 + 自动筛选正确答案"的方式,廉价地造出大批高质量 SFT 数据,顺便把写作/安全等通用能力混进来,避免"只会做题"。
  • ④ 通用 RL:最后用含安全性/有用性的奖励做整体对齐,压住越权与有害输出。

这条流水线揭示的方法论:RL 负责"能力",SFT(冷启动 + 拒绝采样)负责"形态与可读性",通用 RL 负责"对齐"。三者各管一段,比"一把梭 RL"更可控、可调试。

5.3 实现过程:GRPO 一步训练(伪代码)

把 2.4 的算法落成可运行骨架:

import torch, statistics

# GRPO 训练一步(伪代码,带中文注释)
def grpo_step(policy, ref_policy, prompts, reward_fn, G=8, beta=0.0, eps=0.2):
    batch = []
    for x in prompts:
        # 1) 对同一个 prompt 采样 G 条回答(同一策略、同温度)
        responses = [policy.sample(x) for _ in range(G)]
        # 2) 用可验证奖励给每条打分(数学判对错/代码跑测试)
        rewards = [reward_fn(x, r) for r in responses]
        # 3) 组内标准化:用组的均值和标准差做基线,无需 critic
        mean = statistics.mean(rewards)
        std = statistics.pstdev(rewards) + 1e-6
        advantages = [(r - mean) / std for r in rewards]
        for r, a in zip(responses, advantages):
            batch.append((x, r, a))

    # 4) 策略梯度更新(组内相对优势做权重 + KL 约束)
    policy.optimizer.zero_grad()
    for x, r, a in batch:
        logp = policy.logprob(x, r)
        logp_ref = ref_policy.logprob(x, r)        # 冻结的参考模型
        ratio = torch.exp(logp - logp_ref)
        # PPO 式裁剪,防止单步更新过猛
        clipped = torch.clamp(ratio, 1 - eps, 1 + eps) * a
        unclipped = ratio * a
        policy_loss = -torch.min(unclipped, clipped).mean()
        kl = beta * (logp - logp_ref)              # 把策略拉在参考模型附近
        (policy_loss + kl).backward()
    policy.optimizer.step()

注意三个工程要点:(a) 参考模型 ref_policy 冻结,只用于算 KL,不更新;(b) 组内优势天然去中心化,没有 critic;(c) 采样时 G 条共享同一 prompt,保证"可比"。

六、遗留问题

  1. 推理泛化性:RLVR 在数学/代码收益巨大,开放域写作/主观任务仍依赖偏好优化(DPO/RLHF)。一个能解竞赛题的模型,未必更会写一首好诗——推理 RL 的信号只覆盖"可验证"的那部分能力。
  2. 过度思考与思考崩坏:长 CoT 的语言混杂、重复循环,需要熵正则与长度惩罚调参。模型有时会为了"显得在思考"而堆砌无效步骤,甚至自我推翻正确结论(见 3.4)。
  3. 奖励设计的盲区:不可验证领域(医疗建议、伦理判断)依然没有好奖励信号。无法用"对错"定义的事,RLVR 就使不上劲,仍要回到人类偏好。
  4. 能耗/成本:思考 token 让推理成本上升一个数量级,"想多久"本身就是新的资源调度问题。test-time scaling 在拉高上限的同时,也把"成本旋钮"交到了每个调用方手里。
  5. 评估失真:用"标准答案比对"训练出来的模型,可能在分布外的真实任务上过拟合"考试形态",迁移到 agentic 场景需重新设计奖励(见 2.3 的 agentic RL)。

七、实践小结

把本篇浓缩成可执行的认知:

  • 想提升硬推理,优先 RLVR 而非 RLHF:奖励信号从"人觉得好"换成"题做对",纯度与扩展性都上一个台阶。
  • GRPO 是 RLVR 的默认算法:组内相对优势替掉 critic,省显存、稳训练,是 R1 能开源复现的关键。
  • 训练哲学 = RL 拓荒 + SFT 塑形 + 对齐收口:R1 的四段式比一把梭更可控;冷启动与拒绝采样解决"可读性与通用性"。
  • 把验证外包给可执行环境:代码跑测试、数学代入检验,比模型"自称验证过"可靠。
  • 思考预算按难度配:test-time compute 是旋钮,简单题收紧、难题放开,平衡成本与准确率。
  • 小团队走蒸馏:自己训 RL 门槛高,直接用 R1-Distill 类权重做 SFT,是性价比最高的上手路径。

下一篇(第 20 篇)会从"模型能力"切到"运行模型的产品"——DeepSeek 官方开源的 Agent 运行时 Harness,看工程侧如何把"会思考的模型"接进真实工具与环境。

posted @ 2026-09-19 05:44  Stellan7  阅读(21)  评论(0)    收藏  举报