公式里 LLM 是大脑。前几章优化眼睛(上下文)和手脚(工具);这一章讨论如何改权重,让大脑更会用上下文和工具。第 6 章的评估与仿真是两块基石:环境当练习场,指标当目标。没有可打分的任务,后训练只是在噪声里更新参数。

现代模型能力大致分三阶段炼成,顺序本身就是设计:

阶段数据目标学到什么代价量级
预训练海量原始文本预测下一个 token语言、世界知识、基本推理极高
SFT千~万级「输入—输出」对仍是 next-token,但损失常只算在回答上指令遵循、格式、风格、流程协议
RL任务 + 奖励(无标准答案亦可)最大化期望奖励可迁移决策策略、探索新解法高(常为 SFT 数十倍)

直觉类比:预训练读万卷书,SFT 看标准解法,RL 下场做题按对错打磨。两条主线请先钉住:

  1. SFT 偏记忆,RL 偏泛化——同任务同预算下可测量,不是口号。
  2. 数据与环境比算法更重要——会调 PPO/GRPO 够用;仿真保真与奖励质量才决定成败。许多场景 SFT 数据到位后根本不必上 RL。

应用开发者可以带着「我该不该微调」的问题读;训练工程师把算法细节当查阅。多数 Agent 产品改进仍落在 Harness;后训练是「协议与策略进参数」的选项,不是默认路径。

预训练在做什么

全部「智能」地基仍是 next token prediction:给定前文,对词表每个 token 给概率,与真实下一 token 比损失,改参数。在万亿级 token 上反复做,被迫内化语法、事实与基本推理。输出始终是分布——三阶段差别只在「想要什么 token 更高概率」以及用什么信号定义「想要」。

预训练后模型博学但不好用:问题后面可能续写更多问题,因为语料里常见这种模式。它还没学会「被提问时应回答」的协议。

SFT:换了数据的 next-token

SFT(Supervised Fine-Tuning,监督微调)在数学上仍是预测下一个 token。与预训练的实质差别主要有二:

  1. 数据变成精选的「用户输入 → 理想输出」
  2. Loss masking——损失常只算在回答 token 上,避免模型学「怎么提问」

于是优化目标是把示范答案每个 token 概率抬高——高样本效率地固化「见此输入,吐此输出」的映射。适合格式固定、环境稳定的协议性知识(怎么说、怎么做);不适合往参数里硬灌大量易变事实(知道什么)——事实更适合预训练续训或 RAG。

工程上 LoRA(Low-Rank Adaptation:在冻结大矩阵旁挂低秩补丁)是默认省显存手段:参数量常为 1%–5% 量级,多租户可挂多 adapter。经验向说法(需按任务验证):LoRA 应覆盖主要权重矩阵(含 MLP),不只注意力;学习率往往可高于全参微调一个数量级;SFT 用中高 rank,RL 每步信息量小可用更低 rank。

为什么先 SFT 后 RL

RL 让模型自己生成,再按好坏奖惩。若任务要求 JSON 或工具调用,而输出不可解析,奖励函数连「成/败」都算不出,梯度近似为零。SFT 的职责是先立形:格式稳定、可解析,RL 才有可打分起点。业界稳健配方是两阶段——先形后神。

边界:较小基模 + 严格结构化输出时,跳过 SFT 直接 RL 常全军覆没。足够强的基模可以出现 R1-Zero 式「直接 RL 涌现长链思考」,但输出可读性与混语问题仍会迫使补一截冷启动 SFT 把「形」立稳。顺序不是教条,是对「奖励可计算」的工程约束。

SFT 与 RL 的本质区别

维度SFTRL
优化目标极大似然拟合标注答案最大化期望奖励
监督形态每 token 稠密整条轨迹往往稀疏成败
数据输入—输出对任务 + 奖励函数
学到什么固定映射(记忆)可迁移策略(泛化)
分布漂移环境一变仍背旧答案同一策略重算
样本效率
稳定性低、易震荡
上限逼近示范者水平由任务/奖励定义,可超示范

更深一点:SFT 离线,天花板是数据;RL 在线(边生成边反馈),天花板是任务。验证往往比生成容易——数学对答案、代码跑测试、订票查 DB——只要「认出好」比「写出好」易,RL 就能用试错摸高(RLVR:Reinforcement Learning with Verifiable Rewards,可验证奖励的强化学习)。在线还缓解纯模仿的协变量漂移:训练分布跟着当前策略走,错误状态能学会爬出来。

分布视角:SFT 的极大似然偏 mass-covering(覆盖示范里多种模式);带 KL 约束的 RL 偏 mode-seeking(概率集中到少数高奖模式),回答更「笃定」,多样性常下降。

何时 SFT,何时 RL

决策顺序:

  1. 先问要不要训——提示词、工具设计、上下文管理能解决的,别上训练。多数应用停在这里。
  2. 需要训则先 SFT——JSON/工具 schema、风格、流程协议;示范质量优先于数量。
  3. SFT 仍上不去时加 RL——部署分布与训练分布系统漂移、需探索超示范策略、标注全路径成本过高。临界信号往往是:再堆示范,新场景仍然差——问题在优化目标,不在样例条数。

SFT 代价是泛化弱;RL 代价是样本与稳定性。没有稳定格式就强行 RL,等于用噪声当标签。

RLHF:从人类偏好到奖励模型

对话产品「得体、安全」常走 RLHF(Reinforcement Learning from Human Feedback):

  1. 在 SFT 模型上采回答,人标偏好对(A 优于 B)
  2. 奖励模型 RM(Reward Model):输入问答,输出标量分,拟合人类偏好
  3. 用 RM 分数作奖励,对策略做 PPO(或同类)优化

实际优化目标几乎总是:

reward_effective = r_RM(x, y) − β · KL(π_θ(·|x) || π_ref(·|x))

KL 惩罚把策略拴在参考模型(常为 SFT 检查点)附近:离太远易 reward hacking(讨好 RM 的冗长空话、表面合规)。β 控制「允许多敢」。反向 KL 的 mode-seeking + 锚在参考分布附近,是 RLHF 稳定配方的一半秘密。

DPO(Direct Preference Optimization)把「抬高偏好回答、压低拒绝回答、且不离参考太远」直接写成似然目标,跳过显式 RM 与在线 PPO:像 SFT 一样离线训偏好对,实现简单,但不能探索示范外策略,上限受偏好数据分布约束。

关系整理:

  • RLHF:奖励来自学到的 RM(对话质量、安全)
  • RLVR:奖励来自可执行验证器(数学、代码、DB 状态)——Agent 工具场景更常落在这里
  • 产品模型常叠加:对齐用 RLHF 系,硬技能用可验证奖励

算法选型直觉:PPO / GRPO / DPO

不必背公式,记住「优势怎么估」:

策略梯度大意:同问题多采几条,高奖路径提高概率,低奖降低。为降方差用优势(Advantage)= 这条相对平均好多少。

  • PPO(Proximal Policy Optimization):在线采样;用裁剪限制一步更新幅度;常另训价值网络估基线,长轨迹逐步信用分配更细。实现与显存更重。
  • GRPO(Group Relative Policy Optimization):同问题一组回答,用组内相对归一化当优势,省掉价值网络;实现简洁,适合单轮/短轨迹。仍需要奖励信号(规则或 RM),省的是 critic,不是奖励。
  • DPO:离线偏好,无 rollout、无 critic;便宜,不能主动探索。
算法在线?特点更合适
PPO稳、信用分配细多轮 Agent、长轨迹
GRPO无价值网络单轮/短轨迹、组采样方便
DPO极简已有高质量偏好对

实践路径粗线条:可靠奖励 + 算力 → GRPO 或 PPO;只有偏好对 → DPO;早期摸底 → Best-of-N 采样看上限。算法会用就行;环境失真时再好的算法也在学应试策略。

数据与环境 > 算法

RL 的试错场地是仿真环境。客服仿真若永远固定话术、错误码与生产不一致,模型会学到只在仿真里成立的捷径,一上线就失效——这是后训练项目最常见失败,不是「PPO 没调好」。

检查清单:

  • 状态转移是否符合业务不变量(退款不超过订单额)
  • 工具错误信息是否与生产同分布
  • 用户模拟是否渐进透露、是否允许情绪与噪声
  • 奖励是否可被刷分(表面关键词 vs 真实 DB 状态)
  • 评估题是否严格排除在训练分布外

第 6 章的评估环境稍加改造即可当训练环境;构造机制可复用,题目实例必须隔离

多轮信用分配:过程奖励 vs 结果奖励

Agent 任务几乎总是多轮:工具调用链、对话澄清、长代码编辑。若只在终点给 0/1(outcome reward),中间哪一步埋雷难以分辨——信用分配(credit assignment)难。

过程奖励(process reward)给中间步骤打分:关键工具是否调用、是否在改单前获用户确认、子测试是否通过。信号更密,学得快,但设计成本高,且易被局部刷分(每步「看起来合规」但全局错)。

工程折中常见:

  • 主信号用可验证结果(测试全绿、DB 状态正确)
  • 辅以稀疏过程检查作 shaping 或否决(安全违规中途即 −大分)
  • 长轨迹用 PPO 类逐步优势,或把长任务切成可独立验证的子目标

「Agent 说完成」永远不能当唯一奖励——必须对齐第 6 章的轨迹/结果双重验证。

面向工具使用的 RL

工具调用后训练的特殊点:

  1. 动作空间开放——自然语言参数 + 代码,不是棋盘上有限落子;探索靠预训练先验压缩,而不是纯随机。
  2. 格式是入场券——SFT 先教会 tool_calls schema。
  3. 奖励最好可执行——单元测试、API 幂等结果、沙箱断言;纯偏好 RM 可补「语气与安全」,但主任务尽量可验证。
  4. 错误可恢复应被强化——中间失败后纠正成功的轨迹,价值常高于一次幸运直通;否则模型学「怕调工具」。
  5. 多工具编排——奖励可含步数惩罚或冗余调用惩罚,避免合法但低效的刷分路径。

最小「可验证工具任务」奖励形状(示意):

def tool_task_reward(trace: dict) -> float:
    """
    trace: {
      "final_ok": bool,          # 结果验证器
      "format_ok": bool,         # 工具 JSON 均可解析
      "n_steps": int,
      "safety_violation": bool,
    }
    """
    if trace["safety_violation"]:
        return -1.0  # 否决
    if not trace["format_ok"]:
        return -0.5
    if not trace["final_ok"]:
        return 0.0
    # 成功:轻微惩罚过长路径,鼓励效率但不压死探索
    return 1.0 - 0.02 * max(0, trace["n_steps"] - 5)

真实系统会把 DB 断言、测试输出解析写进 final_ok;此处只固定「否决 > 格式 > 结果 > 效率」的优先级直觉。

样本效率与 On-Policy Distillation(草图)

RL 样本贵:每次 rollout 可能多轮工具 + 长思考。提高效率的方向包括:

  • 强先验:从已 SFT/已对齐的强模型起步,而不是随机策略
  • 课程:先短轨迹、高密度奖励任务,再加长链
  • 过滤:只对高方差或失败附近状态多采样
  • On-Policy Distillation(在策略蒸馏)——草图:学生策略在线采样自己的轨迹,用教师(更强模型或同一模型的高奖行为)提供稠密 token 级监督,同时保持 on-policy 分布匹配。本质是把「在线、走自己的路」与「SFT 式稠密梯度」合在一起,缓解纯 outcome RL 信号过稀。

部署侧另一条省钱路径:用 RL 训出强策略后,再蒸馏到更小模型或固定成 Skills/工作流(第 8 章外部化),让运行时少付探索税。

与 Harness 的分工

后训练不是 Harness 的替代:

问题更可能落点
退款不得超过订单额约束 / 代码断言
输出必须是合法 tool JSONSFT 或严格解码
未见过的运营商话术策略RL 或外部化经验
用户偏好姓名与地址记忆 / RAG,不是塞进 SFT 事实
新模型发布是否切换评估集,不是再训一遍

能写进验证器与知识库的,优先别进权重;稳定、通用、需要低延迟肌肉记忆的协议与策略,再考虑 SFT/RL。

本篇收束

  1. 三阶段流水线:预训练奠基,SFT 立格式与协议,RL 在可打分环境里求泛化。
  2. 先 SFT 后 RL 的根因是奖励可计算;强基模可例外,但「形」往往仍要补。
  3. SFT 记忆映射,RL 优化结果;在线与验证—生成不对称抬高 RL 上限。
  4. RLHF/RM/KL/DPO 管对齐与偏好;Agent 硬任务优先可验证奖励。
  5. PPO/GRPO/DPO 会选即可;仿真保真、奖励不可刷、题集隔离更关键。
  6. 多轮要处理信用分配;工具 RL 把格式、可执行结果与安全否决写进奖励。

下一篇第 8 章:自我进化——不改权重时,如何把失败、Skills 与工具创造沉淀到模型之外,与后训练互补。

版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。

(采用 CC BY-NC-SA 4.0 许可协议进行授权)

本文标题:07. 模型后训练:SFT 立形,RL 求神

本文链接:https://www.sshipanoo.com/blog/ai/ai-agent-indepth/07-模型后训练/

本文最后一次更新为 天前,文章中的某些内容可能已过时!