LLM 是怎么被"训"出来的:预训练、后训练,以及推理/计算/代码三大能力从何而来

目录

零、先读懂 14 个关键术语

后文会反复出现这些词。先给一句话解释 + 一个类比,正文不再重复。

术语一句话解释类比
预训练(Pre-training)在海量无标注数据上,用”预测下一个 token”目标从头训练。最烧钱的阶段通读百科全书打基础
后训练(Post-training)预训练之后的所有加工:SFT、偏好优化、强化学习、蒸馏基础打完后做专项集训
SFT(监督微调)用”指令 → 理想回答”的成对示范数据训练,教会模型说话的格式与语气照着范文练习写作
RLHF(人类反馈强化学习)先训一个”奖励模型”学人类偏好,再用强化学习让模型讨好这个奖励模型请了个裁判,按裁判的口味练
DPO(直接偏好优化)跳过奖励模型,直接拿”好答案/坏答案”配对数据优化。更简单更稳不做裁判,直接看好坏范例对比
RL(强化学习)让模型自己产生答案 → 环境打分 → 按分数调整策略。核心是”试错”做题 → 对答案 → 调整思路
RLVR(可验证奖励强化学习)奖励不来自人、也不来自模型,而来自程序化验证器(答案对不对、测试过不过)客观题自动阅卷机
GRPO(组相对策略优化)对同一题采样一组答案,组内互相比较算优势。不需要额外的价值网络,比 PPO 更省不请教练打分,让同班同学互相排名
PPO经典强化学习算法,需要一个”价值网络”估计每个回答有多好。GRPO 是它的简化版请了个专职教练
拒绝采样(Rejection Sampling)让模型生成很多答案,只保留对的/好的,再拿去做 SFT自己刷题,只把做对的整理成错题本
蒸馏(Distillation)用大模型教小模型,把能力压缩进更小的体积老师带学生
退火(Annealing)预训练最后 10–20%,切换到最高质量数据并把学习率压到很低考前最后两周只看精华笔记
课程学习(Curriculum)按由易到难、由广到精的顺序安排训练数据先学加减,再学微积分
奖励 hacking模型钻奖励函数的空子,拿到高分但没真正完成任务应试技巧:背答案而不是学方法

一、全景:三个阶段,各自解决什么问题

先把整条流水线摆出来,后面所有细节都挂在这张图上:

graph TB
    subgraph A["阶段一:预训练(消耗 ~90% 算力)"]
        A1["海量无标注文本<br/>数万亿 token"] --> A2["下一个 token 预测"]
        A2 --> A3["基座模型 Base Model<br/>只会'续写'"]
    end
    subgraph B["阶段二:后训练(消耗 ~10% 算力,决定'好不好用')"]
        B1["SFT:教格式与指令"] --> B2["偏好优化 DPO/IPO/KTO:教价值观与安全"]
        B2 --> B3["RLVR:教推理/代码/工具"]
        B3 --> B4["拒绝采样 + 再 SFT:巩固"]
    end
    subgraph C["可选:蒸馏"]
        C1["大模型当老师"] --> C2["小模型继承能力"]
    end
    A3 --> B1
    B4 --> C1

三个阶段的分工

预训练后训练蒸馏
核心问题知识从哪来能力怎么变成”好用”能力怎么变小变便宜
数据无标注海量文本人工/合成示范 + 偏好 + 可验证题目教师模型的输出
目标函数下一个 token 交叉熵SFT 交叉熵 / 偏好损失 / RL 策略梯度下一个 token 交叉熵
算力占比约 90%约 10%(但重要性极高)极低
产出基座模型(Base)指令模型(Instruct)小模型

一个常见误解:“模型的能力主要来自预训练”。2026 年的实际情况是——知识主要来自预训练,但”会不会用”几乎全部来自后训练。DeepSWE 用 200 步强化学习,把开源 32B 模型在 SWE-bench Verified 上的成绩从 23% 提到 42%,没有新增任何预训练[citation:33]。

一个贯穿全文的核心判断

后训练各阶段有一个清晰的能力分工[citation:26][citation:30]:

阶段奖励信号从哪来教会模型什么天花板
SFT人类示范格式、指令遵循、基本安全被示范数据封顶——学不到数据里没有的策略
DPO/偏好优化人类偏好对比价值观、语气、安全性被偏好数据封顶
GRPO + RLVR程序化验证器自主探索出的新策略被”验证器能验证什么”封顶

一句话:SFT 是模仿,DPO 是排序,RLVR 是探索。 只有 RLVR 能让模型发现人类从未示范过的解法。


二、预训练(上):数据工程——决定上限的隐形战场

这一节回答一个问题:同样是 Transformer、同样多的算力,为什么各家模型效果差很多?

答案主要在两处:数据配比 和 训练顺序。

2.1 数据清洗的四道工序

原始互联网数据不能直接喂给模型。标准流水线是四道递进的工序[citation:4][citation:10]:

① 精确去重   MD5/SHA256 哈希,删除完全相同的文档
     ↓        快、零误杀,但抓不到"近似重复"
② 近似去重   MinHash + LSH,删除高度相似的文档(阈值约 0.8)
     ↓        工业标准。⚠️ 不同语言/不同来源要分别建表
③ 规则过滤   语言识别、长度过滤、PPL(困惑度)过滤、启发式规则
     ↓        便宜、可解释,覆盖有限
④ 模型评分   用 LLM 标注训练一个轻量分类器,给每篇文档打质量分
             效果最好,FineWeb-Edu 证明了其有效性

三个容易踩的坑[citation:1][citation:10]:

坑后果对策
不同语言/来源共用一张 LSH 表同模板的代码文件被整批误删——最常见的事故按语言、按来源分别建表
训练数据里混入评测集基准分数虚高,实际能力没提升去重后再做一轮”与评测集 n-gram 去重”
只做精确去重近似重复(fuzzy duplicate)比精确重复多得多必须上 MinHash + LSH

2.2 数据配比:比清洗更重要

一个被广泛认同的判断:“配比”比”清洗”更重要[citation:10]。

数据像是模型的”饮食结构”:网页、书、代码、多语种各占多少,决定了模型擅长什么。清洗只是把发霉的食材扔掉,配比才决定营养均衡。这就是为什么各家”秘方”都藏着配比。

2026 年一个典型的预训练配比[citation:7]:

领域占比
网页(Common Crawl 过滤后)45%
代码(GitHub 去重后)15%
书籍 / arXiv / 维基百科12%
数学(证明 + 教科书)8%
垂直领域(法律、医学)6%
合成数据(指令、QA)2%

配比怎么定? 三种方法,成本递增[citation:4][citation:5]:

方法做法成本
手工配比 + 小规模消融靠经验定,用小模型验证低,但小模型结论未必能迁移到大模型
DoReMi训一个小 proxy 模型,用 Group-DRO 优化各领域权重中。一次额外小训练即可
RegMix用多个小模型在不同配比下训练,拟合”配比 → 性能”的回归模型约 DoReMi 的 10% 算力
DeMix(2026)用模型合并代替反复训练:每个领域各训一个”领域模型”,然后按权重合并,直接评测低。解耦了”搜索”与”训练”[citation:8]

一个诚实的开放问题:在小型 proxy 上学到的配比,迁移到 70B+ 时仍会以非平凡的方式偏移[citation:5]。这是配比优化至今没有完全解决的问题。

2.3 课程学习:不是均匀打乱,而是有顺序地喂

这是 2024–2026 年最重要的预训练发现之一。如果把所有数据均匀打乱喂进去,效率更低。

主体阶段 + 退火阶段

主流做法分两段[citation:2][citation:7][citation:11][citation:17]:

阶段token 占比数据特点学习率
主体阶段(Bulk)前 80%广泛分布、以网页为主、质量门槛较低峰值
退火阶段(Anneal / Cooldown)后 10–20%高质量子集:教科书、论文、数学、精选代码、合成指令数据降到峰值的 1/10 甚至 1%

为什么有效? 直觉是:早期训练建立广泛的语言能力,晚期训练把模型”塑形”成目标分布。在低学习率下用高质量数据退火,比全程均匀混合高质量数据,在提升下游任务上高效得多[citation:7]。

一个具体的量化案例:Llama 3 报告了一次独立的”退火运行”——在峰值学习率的 1/10 下,用高度过滤的 40B token 高质量数据继续训练。这部分只占总训练量的极小比例,却贡献了数个 MMLU 分数[citation:7]。

一个三阶段的真实配比表[citation:1]:

阶段步数占比中文英文代码数学学习率
预热2%45%35%10%10%线性升到峰值
主训练88%45%30%15%10%峰值
退火10%35%20%25%20%峰值 × 0.1

退火阶段代码 + 数学合计抬到 45%——这是”高价值数据最后给”的具体体现。

⚠️ 一个工程细节:切换阶段时不要直接换数据源,要用 2–3% 的步数做平滑混合,否则 loss 会出现可见的台阶[citation:1]。

五阶段实例:IBM Granite 4.1

一个公开的、可对照的完整案例[citation:16]:

阶段token 量配比要点目的
① 通用预训练10TCC 59%、代码 20%、技术文档 10.5%、数学 7%建立广泛语言理解
② 数学/代码预训练2T数学拉到 35%(×5)、代码 30%转向强推理,仍保通用覆盖
③④ 高质量退火2T + 0.5T掺入长思维链 12.5%、合成指令数据沉淀能力
⑤ 长上下文训练—4K → 32K → 128K → 512K 逐级扩展扩展窗口

2.4 长上下文:分阶段扩展,而不是一步到位

从零训练一个 128K 上下文模型是低效的——注意力的 FLOPs 成本随长度平方增长,而早期预训练主要受益于短序列。

主流做法是分阶段[citation:7]:

阶段 1(0–90% tokens)  :4K 上下文    → 构建通用语言能力
阶段 2(90–95%)        :32K 上下文   → 引入长程依赖模式
阶段 3(95–100%)       :128K 上下文  → 配合精选长文档(书籍、代码库、长论文)

Llama 3 用了四阶段课程达到 128K[citation:7]。分阶段扩展的成本:不到总训练算力的 2%[citation:2]。

扩展的技术路线有三种[citation:46][citation:49]:

路线做法成本上限
YaRN 外推在位置编码层做频率插值(“打补丁”)低有理论上限
RoPE base 扩大直接拉伸位置编码的频率基数中中等
架构级方案从注意力架构层面绕开(如压缩注意力)高无上限

一个真实配置:某 671B MoE 模型用 YaRN 从 4K 扩到 128K,两个各 1000 步的阶段,学习率固定 7.3e-6,总代价约 11.9 万 H800 GPU 小时。扩展后 128K 位置的困惑度从 142 降到 8.1(4K 上为 7.2)[citation:49]。

📖 困惑度(PPL, Perplexity):衡量模型”对下一个词有多不确定”。越低越好。上例中 142 → 8.1 意味着模型在 128K 长文本上从”完全摸不着头脑”变成”接近短文本水平”。

2.5 一个必须记住的数字:4 个 epoch

研究表明,在高质量数据上,多轮训练最多有效至约 4 个 epoch,之后模型开始过拟合[citation:7]。

这解释了为什么 2024 年后前沿模型纷纷转向自产合成数据——公开互联网的高质量文本正在被用完(“数据墙”)。

⚠️ 合成数据的两条纪律[citation:10]:

  • 控制比例(业界经验 < 20%);
  • 警惕模型坍缩(model collapse)——用自己生成的数据反复训练会导致多样性退化。

三、预训练(下):工程实现——怎么把万亿 token 喂进去

这一节讲”怎么算得动”。即使数据准备好了,一个千亿参数模型也放不进任何一张显卡。

3.1 先算一笔显存账

混合精度 + Adam 训练时,每个参数占用的显存是固定的[citation:1]:

项目字节数
bf16/fp16 权重2
bf16/fp16 梯度2
fp32 主权重(master weight)4
Adam 一阶动量(m)4
Adam 二阶动量(v)4
合计16 字节 / 参数

举例:一个 70B 参数的模型,光优化器相关状态就要 70B × 16 = 1.12 TB 显存。一张 H100 只有 80GB。这就是为什么必须分片。

3.2 ZeRO:把状态切开

ZeRO(零冗余优化器) 的核心思想是:数据并行时每张卡都存完整副本太浪费,把状态按数据并行维度切分[citation:7][citation:12]:

档位切分什么节省
ZeRO-1优化器状态约 4×
ZeRO-2+ 梯度约 8×
ZeRO-3 / FSDP+ 模型参数N×(全分片)

FSDP(PyTorch 原生全分片数据并行)就是 ZeRO-3 的 PyTorch 实现:需要参数时临时聚合,用完立即丢弃[citation:7]。

3.3 3D 并行:三种切法叠加

单一维度的并行都不够用,前沿训练把三种叠起来[citation:12]:

并行方式切什么通信特点用在哪
数据并行(DP)不同卡吃不同数据梯度 AllReduce跨副本
张量并行(TP)把单层内部的矩阵切开通信量极大,需要 NVLink节点内(如 8 卡一台机器)
流水线并行(PP)把不同层分给不同卡阶段间 P2P,走 InfiniBand跨节点
专家并行(EP)MoE 的专家分布到不同卡All-to-AllMoE 模型

布局原则:张量并行(最吃带宽)贴节点内的 NVLink;流水线并行(通信较少)跨节点;数据并行在最外层。各自覆盖别人的弱点[citation:12]。

流水线气泡:一个可以用算术算清楚的问题

流水线并行有个固有问题:前面的阶段在工作时,后面的阶段在空等。这个空闲叫”气泡”,大小是[citation:12]:

bubble = (P − 1) / (M + P − 1)

P = 流水线阶段数,M = 微批次数

P=4, M=1  :3/4   = 75% 空闲  ← 灾难
P=4, M=32 :3/35  = 9%        ← 可接受

同样的 4 张卡、同样的模型,唯一的区别是把批次切成更多微批,空闲率从 75% 掉到 9%。这就是微批(micro-batching)的全部意义[citation:12]。

3.4 一个 175B 训练的完整账本

把上述维度放到一次真实训练上[citation:6]:

模型:175B dense,L=96 层,H=12288,96 头,seq=2048
硬件:1024 × H100 80GB(8 卡/节点,128 节点)
目标:全局批次 4M tokens,MFU ≥ 45%

切分:TP=8(贴 8 卡节点)  PP=16(跨 16 节点)  DP=8
单卡参数:175B / (8×16) ≈ 1.37B,bf16 权重约 2.74 GB
优化器状态:不切分约 16.4 GB → 用 ZeRO-1 按 DP 维再切,降到约 2 GB

📖 MFU(Model FLOPs Utilization,模型算力利用率):实际算出的 FLOPs ÷ 硬件理论峰值。反映有多少算力被真正用在计算上,其余都耗在通信与等待上。真实的 MFU 能到 35–50% 就已经是胜利,不是失败[citation:12]。

3.5 混合精度与稳定性

技术作用
BF16 / FP16显存减半、张量核心上约 2× 算力——“免费午餐”,默认开启
FP8进一步压缩,DeepSeek 用 FP8 混合精度使计算速度比 BF16 提高一倍[citation:1]
激活检查点(Gradient Checkpointing)少存激活、反向时重算——用算力换显存
梯度裁剪不是省显存,而是稳定性安全带,防止大训练跑飞
CPU/NVMe 卸载把冷优化器状态放到主机内存/固态盘。慢,但让不可能变成可能

⚠️ 一个实操建议:FP8 出 NaN 时(scaling 窗口、amax history、loss scaler 没跟上),先回 BF16 复现,再逐项打开 FP8,比盲调更快[citation:6]。

3.6 预训练工程小结

要素实现
目标函数下一个 token 交叉熵(唯一目标,无需标注)
优化器AdamW;学习率调度用余弦或 WSD(预热-稳定-衰减)
显存混合精度 + ZeRO/FSDP + 激活检查点
并行3D:TP(节点内)+ PP(跨节点)+ DP;MoE 加 EP
精度BF16 为主,FP8 用于加速
长上下文分阶段扩展(4K→32K→128K),成本 < 2% 总算力
关键指标MFU(35–50% 为佳)、loss 曲线无台阶、困惑度

四、后训练:从”会续写”到”会干活”

基座模型只会”续写文本”——你给它一句话,它接着往下编。这不能直接当助手用。后训练就是把”续写机器”改造成”助手”。

4.1 阶段一:SFT——教格式与指令

做什么:用”指令 → 理想回答”的成对数据做监督微调。

数据规模:通常几十万到几百万条。

一个真实的质量把关流程(IBM Granite 4.1 的 SFT 用了 410 万样本)[citation:16]:

原始对话数据
    ↓
LLM-as-Judge 评估(用一个模型当评委,六维打分)
    ↓
确定性规则管道:
  文本归一化 → 硬拒绝规则(幻觉/错误前提/计算错误)
  → 截断与长度过滤 → Schema 校验 → 泄漏检测 → 全局去重
    ↓
接受 / 边缘 / 拒绝 三档

SFT 的三层课程[citation:2]:

阶段内容
第 1 层:格式与语气简短直接的指令-回答对,建立对话风格、Markdown 结构、安全护栏
第 2 层:任务专精领域数据:代码补全、信息抽取、多跳推理
第 3 层:智能体工作流多轮对话、工具调用、错误恢复轨迹、深层嵌套结构化输出

SFT 的本质是模仿,天花板就是示范数据。 模型学不到数据里没有的策略[citation:26]。

4.2 阶段二:偏好优化——教价值观与安全

这一步回答”两个答案里人更喜欢哪个”。

方法需要什么数据要不要奖励模型特点
RLHF / PPO偏好三元组 + 三模型 RL 基础设施要控制力最强,但复杂、不稳定
DPO偏好对(chosen/rejected)不要简单稳定,2026 年主流
IPO同 DPO不要对标签噪声更鲁棒
KTO二元点赞/点踩即可不要不需要成对数据

为什么 DPO 系成了主流:它们是离线的——不需要在训练中反复生成样本、不需要奖励模型、不需要价值网络,因此更简单、更稳定[citation:30]。

4.3 阶段三:RLVR——教推理、代码、工具

这是 2025–2026 年最重要的范式转变。

核心思想:把奖励模型的活交给程序

RLHFRLVR
奖励来源学出来的奖励模型程序化验证器
信号形态连续分数通常二元(对/错)
单条成本人工标注($)程序检查(≈免费)
奖励 hacking显著基本解决(验证器 = 真值)
适合开放式生成数学、代码、逻辑、工具调用

RLVR 其实不是一个新算法,就是 GRPO(或 PPO)把奖励函数换成了程序[citation:36]。代码上唯一的改动就是把 reward_fn_rm 换成 reward_fn_verifier。

GRPO:为什么它比 PPO 更适合

**PPO 需要额外训练一个”价值网络”**来估计”这个回答有多好”——参数量与主模型相当,非常贵。

GRPO 的简化[citation:31][citation:28]:

同一个问题采样 G 条回答(比如 16 条)
    ↓
各自打分(对=1,错=0)
    ↓
组内标准化:
    组平均分作为基线
    高于平均分 → 正优势(被强化)
    低于平均分 → 负优势(被抑制)
    ↓
用这个"组内相对优势"更新策略

不需要价值网络——因为组内的统计分布本身就提供了基线[citation:28]。在一组 16 个答案里有 4 个是对的,那这 4 个自然获得正优势,其余获得负优势,无需任何学习出来的近似。

课程学习在 RLVR 中是必需的

这里有个关键的工程事实[citation:2]:

如果直接拿竞赛级难题(如 AIME)去训练一个未经训练的策略,随机探索得到正确答案的概率接近 0(P(correct) ≈ 0)。于是奖励梯度全程为 0,模型什么都学不到。

所以必须按难度分级[citation:2]:

层级内容成功率
L1基础算术、单步方程≥ 0.70
L2多步中学数学(GSM8K 级)中
L3高中奥数(MATH / AIME 级)低

模型在 L1 学会”分步写、打草稿”的格式,在 L2 学会”分解子目标、中间验证”,在 L3 学会”用更长的推理路径搜索”。

4.4 阶段四:拒绝采样 + 再 SFT——巩固战果

RL 训完之后,还有一个反直觉的步骤:用 RL 后的模型生成大量答案,只保留对的,再拿去做一轮 SFT[citation:26]。

DeepSeek-R1 的做法:RL 之后,用模型自己的输出做拒绝采样,得到约 60 万条推理样本,与非推理数据混合后再做 SFT[citation:26]。

为什么要绕回来? 因为 RL 创造能力,SFT 把能力”固化”下来并重新分布[citation:26]。RL 找到的好策略是零散的、概率性的,SFT 让它变成稳定的默认行为。

4.5 2026 年前沿实验室的标准顺序

[citation:30]

① SFT(多样化指令)
      ↓
② DPO / IPO(通用有用性与安全的偏好数据)
      ↓
③ PPO 或 GRPO(用奖励模型做最后打磨,仅限投入了 RM 基础设施的实验室)
      ↓
④ RLVR(数学、代码、结构化工具)
      ↓
⑤ 最终 SFT(用最高质量输出巩固)

开源配方(Tulu 3、Llama 4 后训练、Qwen3 后训练)遵循相似模式,只是用公开数据[citation:30]。

4.6 后训练阶段小结

阶段信号来源教什么天花板
SFT人类示范格式、指令、基本安全示范数据
DPO/IPO/KTO人类偏好价值观、语气、安全偏好数据
GRPO+RLVR程序验证器自主探索的新策略验证器能验证的范围
拒绝采样+SFT模型自己的正确输出巩固与固化上一步的产出
蒸馏教师模型输出能力压缩教师模型

五、能力一:逻辑推理是怎么长出来的

5.1 先说清楚:推理能力不是”教”出来的

这是最反直觉的一点。传统 SFT 教推理的逻辑是:给人写的解题过程,让模型模仿。但这条路有明确天花板——模仿不出超越示范数据的策略。

2024–2026 年的突破在于:用强化学习直接优化推理过程本身,奖励信号只来自”答案对不对”[citation:23]。

5.2 DeepSeek-R1 的四阶段配方

这是目前公开最完整、被复现最多的推理模型训练方案[citation:27][citation:26][citation:28]:

阶段 1:冷启动 SFT
    用少量长思维链数据做 SFT,让模型"初步会写推理过程"
    (不需要多好,只需要一个适合 RL 的起点)

阶段 2:大规模 RL(GRPO + 可验证奖励)
    数学题答案对不对、代码能不能跑通,作为奖励
    ↓ 这一步是能力提升的主战场

阶段 3:拒绝采样 + SFT
    收集 RL 过程中表现好的样本(约 60 万条推理样本)
    与非推理数据混合,再做一轮监督微调

阶段 4:小规模 RL 对齐
    最后再做一轮针对人类偏好的轻量 RL

5.3 效果:一组具体数字

模型训练方式AIME 2024MATH-500
DeepSeek-R1-Zero 起点纯 RL,无 SFT15.6%—
DeepSeek-R1-Zero 终点纯 RL71.0%(多数投票 86.7%)—
DeepSeek-R1(完整四阶段)冷启动+RL+拒绝采样+对齐79.8%97.3%
OpenAI o1(闭源参考)专有 RL83.3%96.4%

(数据来源:[citation:26][citation:28][citation:24],厂商自报)

5.4 “啊哈时刻”:涌现的自我纠正

R1 训练中最被引用的现象[citation:27][citation:31]:

训练过程中,模型自己学会了在推理中间写出 “等等,我发现前面某一步算错了,让我重新来”,然后修正自己的思路。

这不是人工设计的,是 RL 在优化奖励的过程中自发涌现的[citation:27]。

为什么会涌现? 因为奖励只关心”最终答案对不对”。模型在探索中发现:加入检查、反思、修正这些行为,能提高最终正确率——于是这些行为被奖励信号保留下来。

这是一个非常重要的一般性结论:当奖励只考核结果时,模型会自己摸索出能提高结果的中间行为。这就是 RLVR 与 SFT 的根本区别——SFT 只能学”示范里有的行为”,RL 能发明”没人示范过但有效用的行为”。

5.5 一个极端的验证:1-shot RLVR

2026 年 NeurIPS 上的一篇论文给出了一个近乎荒谬的结果[citation:32]:

对 Qwen2.5-Math-1.5B 用 RLVR 训练
只用【1 条】训练样本:
    MATH500:  36.0% → 73.6%
    六个数学基准平均: 17.6% → 35.7%

这个结果与使用 1.2k 完整数据集(DeepScaleR)的效果相当
(MATH500: 73.6%,平均 35.9%)

用 2 条样本甚至略超:MATH500 74.8%,平均 36.6%

这说明什么? RLVR 带来的提升主要不是”学到了新知识”,而是”解锁了格式与推理模式”——模型原本就会,只是不知道该这样组织输出。论文还发现:即使训练准确率饱和后,测试性能仍在持续提升(称为 post-saturation generalization);并且自我反思的频率显著上升[citation:32]。

当然,这不意味着”以后只用 1 条数据训练”。它说明的是:推理能力的瓶颈常常不在知识量,而在”会不会组织推理”。

5.6 推理能力的工程代价

代价说明
采样成本长思维链本身就消耗更多 token;RL 还要对同一题采样 G 个候选[citation:35]
执行环境代码与形式化验证需要真实的执行沙箱[citation:35]
流水线复杂度加上拒绝采样与蒸馏,整条流水线远比普通 SFT 复杂[citation:35]
推理时算力推理模型在推理时的计算量是普通模型的 5–20 倍[citation:27]

5.7 推理能力小结

要素实现
核心机制长思维链:把一步到位拆成多步,每步只做简单变换[citation:31]
本质作用外化工作记忆——把中间结果写进输出文本,绕开隐藏状态的容量限制[citation:23]
训练方法冷启动 SFT → GRPO + 可验证奖励 → 拒绝采样 SFT → 对齐
涌现行为自我检查、回溯、修正——奖励只考核结果时的自然产物
增强技巧自洽性/多数投票:采样多条路径投票,正确路径唯一而错误路径五花八门[citation:31]
代价推理时算力 5–20×;训练需大量采样

六、能力二:数值计算——LLM 的软肋与解法

这一章要诚实地说一件很多人不愿承认的事:大模型算数确实不太行,而且这是架构层面的原因。

6.1 为什么算不准:两个根本原因

原因一:数字被切碎了

模型的输入不是”数字 789”,而是被分词器切成的 token 片段——“789” 可能被切成 “78” 和 “9”[citation:47]。模型在处理这些碎片时难以建立准确的数值概念。

这是一个分词器(Tokenizer)的设计决定,不是自然规律。现在有些模型专门让数字逐位分词,或者从右往左按固定位数分组(以保留位值),这能可测量地改善算术能力[citation:50]。

原因二:每一步仍是”预测”而非”计算”

即使用思维链把 4837 × 219 拆成三步,每一步(如 4837 × 200)仍然是概率预测,不是确定性计算[citation:50]。

关键的区分:“数学”其实包含两种完全不同的能力[citation:50]:

  • 数学推理:为应用题列对方程、选对方法 → 推理模型和 CoT 能显著提升;
  • 原始计算:执行精确的算术 → 只有工具能解决。

一个模型”数学基准分高”,要看是哪种数学——证明题奖励推理,精确答案题奖励计算器。

6.2 四层解法,可靠性递增

方案怎么做可靠性适合
① 直接问无低常见、简单的算式和常识
② 思维链 CoT拆成简单步骤中轻量推理,没有工具时
③ 推理模型训练它先想再答中高多步应用题
④ 工具/代码执行把计算交给确定性引擎很高数字必须准确的场合

一句话结论:需要模型来决定算什么、按什么顺序算;需要确定性的代码来执行计算。模型的活是把一个模糊请求翻译成精确的计算,计算器的活是算准[citation:50]。

6.3 用 RL 教模型”什么时候掏计算器”

这是 2026 年 ICLR 上的热门方向。核心问题:SFT 教不会工具使用的最优策略,RL 能。

为什么 SFT 不够[citation:44]:

  1. 模式固化——学到的是”人类怎么用工具”,而不是”最优策略是什么”;
  2. 探索受限——没见过的调用方式永远不会尝试;
  3. 错误传播——数据里低效或错误的调用模式会被原样学走。

ReTool 的三阶段配方(字节跳动,ICLR 2026)

[citation:44]

阶段 1:合成数据生成(TIRGen)
    用一个已有的"工具集成推理"模型生成含代码调用的轨迹
    过滤后构建冷启动数据集

阶段 2:冷启动 SFT
    全参数微调,给模型一个"知道工具存在、会基本使用"的起点

阶段 3:工具增强 RL(PPO)
    模型在沙箱中与代码解释器交互
    奖励:答案正确 +1,错误 −1

消融实验非常说明问题(Qwen2.5-32B-Instruct,AIME2024)[citation:44]:

配置AIME2024说明
原始基座26.7%无训练
仅冷启动 SFT(有解释器)40.9%SFT 只是”入门”
仅文本 RL(无解释器)40.0%有心算但无工具
ReTool 完整(SFT + 工具 RL)67.0%两者叠加

RL 贡献了 26 个百分点,代码解释器贡献了 27 个百分点。 二者都是质变,不是锦上添花。

三个关键工程 trick[citation:44]:

技巧作用
交错式代码执行模型推理 → 生成代码块 → 环境立即执行 → 结果注入回推理链 → 继续推理。让模型”边想边算”
反馈掩码代码执行器返回的结果(如 output: 42)是外部注入的 token,不参与策略梯度计算——避免模型去”拟合”输出的格式
KV Cache 复用代码执行前已生成的 token 的 KV 缓存可复用,避免每个代码调用都从头算
异步沙箱执行多个轨迹的代码在不同沙箱并行执行,不互相阻塞

涌现行为:模型自发学会了”代码自我纠正”——当执行结果与推理预期不符时,会回溯、反思、修正代码并重跑。训练结束时,模型生成的平均代码行数是训练开始时的 5 倍[citation:44]。

ToRL:更激进的路线

上海交大的 ToRL 主张不需要 SFT 冷启动,直接从基座模型开始 RL[citation:44]:

维度ReToolToRL
训练起点SFT 冷启动直接从基座模型
训练数据合成 TIR 数据 + 数学题纯数学题(无 TIR 数据)
算法PPOGRPO
规模32B1.5B / 7B

两者都验证了一件事:工具使用策略可以从零涌现。

6.4 数值计算能力小结

要素实现
根本限制数字分词碎片化 + 自回归本质是预测而非计算
架构级改进逐位分词 / 从右往左分组(保留位值)
方法级改进CoT 拆分、推理模型
根本解法工具集成推理(TIR)——代码解释器接管计算
训练方法冷启动 SFT → 工具增强 RL(交错执行 + 反馈掩码 + KV 复用)
涌现行为代码自我纠正、按需调用、代码量随训练增长

七、能力三:代码编写——最幸运的领域

代码是三大能力中最适合用 RL 训练的一个,原因非常实在。

7.1 为什么代码是”RL 的天选之子”

代码绕开了定义奖励这个最大的难题:测试通过就是通过,编译得过就是过,问题被修复就是被修复。环境本身就是裁判,而且是诚实的裁判[citation:33]。

对比一下其他领域:开放式问题”这个回答好不好”需要人来判断或模型来打分——昂贵、有噪声、可被钻空子。代码不需要这些。

这就是为什么代码成了智能体强化学习的领先领域:几乎没有其他领域能提供一个免费、诚实、可无限重复的内置裁判[citation:33]。

7.2 代码能力的训练栈

阶段做法
① 预训练代码语料(GitHub 等)单独配比,需专门去重(同模板文件多)
② SFT代码指令数据(补全、重构、解释、调试)
③ RLVR在真实可执行环境中修复 issue,测试通过即奖励

7.3 核心工程:可验证环境的构造

这是最重的一块。一个典型的代码 RL 环境包含五个部分[citation:51]:

① 任务指令(issue 描述、bug 报告)
② 初始状态夹具(repo 的特定 commit)
③ 可用的工具/命令行
④ 验证器(单元测试、状态检查、评分标准)
⑤ 容器定义(Dockerfile,保证可复现)

验证器是把”环境”和”提示词”区分开的东西。 DeepSeek 的 R1 论文把大规模 RL 限制在有规则化检查的任务上,正是因为学习出来的奖励模型容易被钻空子[citation:51]。

规模化的关键:退出码作为通用接口

业界最重要的简化是:用退出码(exit code)作为语言无关的接口[citation:25]。

项目做法
SWE-Universe(阿里,2026)构建近 100 万个可验证环境,用退出码做语言无关接口,覆盖 7+ 语言[citation:25]
MindForge从 PR 实例自动生成 Dockerfile + 验证脚本,针对约 3900 个 PR 实例、4 种语言[citation:25]
ROCK(阿里)RL 沙箱,智能体在沙箱内原生运行,SDK 从外部编排[citation:25]

几个必要的防作弊设计[citation:25]:

防护目的
历史安全检出剥离未来的 git refs,防止智能体直接从 git log 里读到修复方案
LLM 黑客检测用裁判模型审查每次提交,判断它是否真的执行了代码
隐藏测试文件直到最终评分阶段才放出
出口防火墙通过特权 sidecar 强制,防止联网作弊
语法预检在启动 Docker 前先查语法错误,大幅节省时间

7.4 效果:200 步 RL 的近翻倍

DeepSWE 是最有说服力的案例[citation:33]:

起点:开源 Qwen3-32B 基座
方法:纯强化学习,无新增预训练,无人工标注数据
训练:仅 200 步
结果:SWE-bench Verified  23% → 42%
     (加上测试时扩展达 42.2% Pass@1 / 59%)

模型原本从预训练就”会写看起来合理的代码”;RL 教它写出真正能通过的代码[citation:33]。

自博弈(Self-play)方向:Self-Play SWE-RL 让智能体自己生成训练信号,在 SWE-bench Verified 和 SWE-Bench Pro 上分别 +10.4 和 +7.8 分,并持续优于人类数据基线[citation:33]。

7.5 一个重要的工程陷阱:训练-推理不一致

这是代码 Agent RL 独有的难题[citation:29]:

策略梯度方法要求训练引擎重新计算智能体在 rollout 时生成的 token 的概率。但原生 Agent 框架(如 OpenHands、Claude Code)会动态重写交互历史、压缩上下文、在步骤间重新序列化数据。这造成了严重的训练-推理不一致。

LEGO-RL 的解法:在 LLM 服务的 API 边界部署进程内代理,在生成时直接捕获原始 token ID、对数概率和响应掩码[citation:29]。对稀疏 MoE 模型,还要记录和回放 rollout 时的专家路由决策。

这个细节很能说明代码 RL 的工程难度:你以为在训练模型,实际上有一半的工作在保证”训练引擎看到的”和”推理引擎跑过的”是同一件事。

7.6 环境规模化:从”堆数量”到”设计分布”

2026 年 ACL 上的一批论文揭示了一条清晰演进[citation:48]:

工作贡献效果(自报)
EnvScaler程序化合成工具交互环境,保留 191 个环境、约 7000 个任务场景Qwen3-8B 在 BFCL-v3 上 28.88 → 37.00(SFT)→ 41.88(RL)
AgentScaler收集 3 万+ API,构建工具依赖图,组织 1000+ 领域环境数 0→10000,ACEBench-en 67.2 → 75.7
Echoverse强调环境的深度(行为深度、失败针对性、共同演化)9B 模型在 12 个环境训练后,14 个评测分片上 36.5% → 67.1%

关键洞察:环境不是越多越好,而是要在”模型当前能力边缘”[citation:51]:

一个模型总能解决、或总解决不了的任务,在 GRPO 这类组基算法下产生不了梯度。有用的环境必须位于当前能力的边缘。

这也引出两个 2026 年的新方向[citation:51]:

  • 能力感知环境选择(AES):按智能体当前能力挑选环境;
  • 分层难度课程(HDC):通过削弱脚手架、扩大状态规模逐步加难。

7.7 代码能力小结

要素实现
天然优势环境即裁判——测试通过与否是免费、诚实、可无限重复的奖励
训练方法预训练代码语料 → SFT → RLVR(在真实可执行环境中)
环境工程Dockerfile + 验证器 + 退出码接口;防历史泄漏、防作弊
规模化从”堆环境数量”到”设计环境分布”(难度要卡在能力边缘)
工程陷阱训练-推理不一致——必须在生成时捕获原始 token 与路由
效果200 步 RL 让 32B 开源模型 SWE-bench Verified 从 23% → 42%

八、三大能力的共性与差异

8.1 共同点:同一个”可验证性”引擎

三种能力在 2026 年共享同一套训练机制:

         ┌──────────────────────────────────────┐
         │   可验证奖励强化学习(RLVR)          │
         │                                       │
         │   逻辑推理  ← 答案对不对              │
         │   数值计算  ← 执行结果对不对          │
         │   代码编写  ← 测试过不过              │
         │                                       │
         └──────────────────────────────────────┘
                        ↓
              都是"程序化验证器 + GRPO"

四个共同要素:

要素说明
① 都需要可验证的奖励这是 RLVR 能跑起来的前提。三者恰好都具备
② 都需要课程学习难度必须卡在能力边缘——全对或全错都产生不了梯度[citation:2][citation:51]
③ 都依赖”外化中间过程”推理写思维链、计算写代码、调试跑测试——都是把工作记忆写进上下文
④ 都出现涌现行为自我纠正、回溯、验证——奖励只考核结果时的自然产物

8.2 差异点:五个维度对照

维度逻辑推理数值计算代码编写
① 验证器答案比对(可符号匹配)代码执行结果单元测试 / 退出码
② 是否必须外挂工具否(可纯文本推理)是(必须代码解释器)环境本身就是工具
③ 环境复杂度低(纯文本)中(需沙箱执行代码)高(需完整 repo + 依赖 + 编译)
④ 主要瓶颈采样成本(长思维链)分词器设计 + 心算天花板环境供给 + 训练-推理一致性
⑤ 是否需要冷启动 SFT推荐(提高 RL 效率)推荐(ReTool)但可省(ToRL)通常需要
⑥ 奖励粒度二元(对/错)二元二元,或按通过的测试数加权
⑦ 成熟度高(R1 配方被广泛复现)中(工具集成是 2026 新方向)高且快速演进

8.3 一个反直觉的发现:三者的瓶颈都不在”知识量”

能力常见误解实际情况
推理需要更多数学知识1-shot RLVR 就能把 MATH500 从 36% 提到 73.6%[citation:32]——瓶颈在”会不会组织推理”
计算需要更聪明瓶颈在分词方式 + 没有计算器;给了解释器,同一模型 AIME 从 40% 到 67%[citation:44]
代码需要更大的模型200 步 RL,模型没变大,分数翻倍[citation:33]

三条证据指向同一个结论:能力的主要增量来自”正确的训练方式”,而不是”更多的知识”。

8.4 一个诚实的边界:RLVR 不适用于什么

RLVR 有一个硬前提:必须能程序化验证。

能验证不能验证
数学答案、代码测试、结构化输出、工具调用是否成功写作风格、共情、创意、开放式对话质量、价值观判断

对于后者,仍然需要 RLHF / DPO 这类基于人类偏好的信号[citation:36]。

2026 年的现实是:“能验证的地方用 RLVR,其余地方用 RLHF/DPO”[citation:36]。前沿正在努力把验证器往外推——用高质量参考答案把可验证信号扩展到开放式任务(如 RLVRR,ICLR 2026)[citation:36]。


九、总结:能力不是”灌”进去的,是”逼”出来的

9.1 三句话总结

  1. 预训练买的是知识,后训练买的是”会不会用”。 预训练消耗约 90% 算力,但要让模型从”续写机器”变成”助手”,靠的是后训练那 10%。
  2. SFT 的天花板是数据,RL 的天花板是验证器。 想让模型具备数据里没有的能力,唯一已知的方法是给它一个能判对错的环境,让它自己试。
  3. 三大能力共享同一个引擎——可验证奖励强化学习。 差异不在算法,而在”验证器怎么造”。

9.2 全文最值得记住的五个数字

数字含义
16 字节/参数混合精度+Adam 训练时每个参数的显存开销。这是所有分布式训练的起点[citation:1]
4 个 epoch高质量数据的有效训练轮数上限。之后必须转向合成数据[citation:7]
75% → 9%流水线气泡从灾难降到可接受,只需把批次切成更多微批[citation:12]
1 条样本1-shot RLVR 把 MATH500 从 36.0% 提到 73.6%——瓶颈不在知识量[citation:32]
200 步纯 RL 让开源 32B 模型 SWE-bench Verified 从 23% 到 42%,无新增预训练[citation:33]

9.3 一个总的判断

回看这条流水线,会发现一个贯穿始终的模式:

阶段模型在做什么人类的角色
预训练被动吸收海量文本提供数据、定配比
SFT模仿人类示范写示范
DPO按人类偏好排序做选择
RLVR主动探索,自己发现策略只提供”判对错”的规则

前三个阶段,人类都在”喂”——喂数据、喂示范、喂偏好。只有到 RLVR,人类退到了只提供规则的位置,模型开始自己找路。

而 2026 年最重要的那些能力突破——自我纠正、代码自我修正、按需调用工具、反思与回溯——没有一个是人教的,全部是在奖励压力下被”逼”出来的。

一句话:预训练把世界装进模型,后训练教它怎么调用;而真正超出数据边界的能力,只在一个能诚实地告诉它”你错了”的环境里,才会长出来。


附:本文关键来源说明

类型来源性质使用原则
数据工程(清洗/去重/配比/退火)技术博客、综述、公开训练报告[citation:1][citation:4][citation:7][citation:10][citation:16]直接采用
分布式训练(ZeRO/3D并行/显存账)工程文档与教程[citation:1][citation:6][citation:12][citation:15]直接采用
后训练流程(SFT/DPO/GRPO/RLVR)技术综述与官方文档[citation:22][citation:26][citation:30][citation:36]直接采用
推理模型(R1 配方与效果)论文与论文解读[citation:24][citation:26][citation:27][citation:28]标注为厂商自报
1-shot RLVRNeurIPS 2026 论文[citation:32]论文结论直接采用
工具集成推理(ReTool/ToRL)ICLR 2026 论文解读[citation:44]标注为论文自报
代码 RL(DeepSWE/环境工程)技术博客与论文[citation:25][citation:29][citation:33][citation:51]标注为厂商/论文自报
环境规模化ACL 2026 论文综述[citation:48][citation:51]标注为论文自报,注明未经独立复现

⚠️ 大模型训练领域迭代极快,本文事实截至 2026 年 10 月 26 日。所有性能提升数字,凡属厂商自报或单篇论文结论,均已标注来源且未独立复现;不同论文的基准与设置不同,跨论文横向比较需谨慎。

评论