原创教学项目 · 最近核验:2026-10。使用合成样本和 loss 数值,不声称运行了完整 SFT / RL 训练。

助手找到了正确资料,回答里的日期也没错,却经常不写出处。这时可以改提示、加输出格式约束,也可以考虑训练。怎么选,要先看问题出在哪里:它没拿到信息,还是拿到以后没有按要求使用?

这里接着用 RAG 知识库助手,重点放在后训练(post-training)。每天变化的规则适合通过检索(retrieval)更新;“回答时引用证据”“资料冲突时说明冲突”这些较稳定的行为,则可以考虑用示范来教。

如果觉得后训练怎么总在洗数据、配环境,可以先读为什么后训练总在改数据?。它先讲清楚这些工作怎样影响模型学到的行为,下面再接具体实现。

从一个能检查的失败开始

先给模型当前规则,明确要求返回答案和引用。收集它漏写引用的输入,看看改提示或限制输出格式能否解决。如果在各种问法下都能稳定做到,就可以先不训练;如果依然反复出错,再准备有针对性的示范。

观察到的问题 先做什么 什么时候考虑训练
回答的是旧规定 查检索快照和证据 行为修正不能代替更新知识
有证据,但总是漏格式 清楚提示、结构化输出约束 对多种表达仍不稳定,需要学习一致行为
两个答案都合格,但一个更合适 先定义偏好标准、检查标注一致性 有可靠成对偏好时考虑 preference learning
多步工具任务经常中途走错 查状态、工具接口与轨迹 有可执行环境、有效奖励(reward)和预算时再考虑 RL

监督微调(supervised fine-tuning, SFT)从示范回答中学习;偏好学习(preference learning)使用回答之间的比较;RL(reinforcement learning,强化学习(reinforcement learning, RL))通过采样和奖励优化策略。这些方法可以有联系,例如 RLHF 也会使用偏好数据训练奖励模型,并不是互不相干的 3 档“升级”。先把目标定义清楚,才知道需要哪种数据和方法。

一次实验,从错误样本到评估报告

  1. 01 / 找到失败有证据,却漏引用保存具体输入和输出,先排除资料缺失。
  2. 02 / 准备示范什么时候答,怎样引用缺资料和资料冲突时,也要有对应示范。
  3. 03 / 划分数据同一问题的改写放一组不让几乎相同的问题同时出现在训练和测试中。
  4. 04 / 检查目标手算一个 batch看模板、loss mask、有效 token 与分母。
  5. 05 / 做对照只改一个主要因素训练后在同一批问题和证据上配对比较。
  6. 06 / 决定下一步保留、修改或放弃总体变好,也要检查缺证据等关键分组。
除了训练权重,也保存样本、数据版本、loss 检查和评估结果,方便重跑和排错。

checkpoint 只是中间产物。若没保存 tokenizer、聊天模板和预处理版本,换台机器后,同一段对话可能已经不是同一组训练 token。若没有固定评估集,“第二次看起来更好”也很难复核。

这里说的可复现,首先是能重建数据、目标和评估协议,不保证不同硬件、库版本产生逐 bit 相同结果。PyTorch 的复现说明也明确区分这些条件。

对照实验尽量少改变量

第一轮只比较两种设置:原模型加现有提示,以及从同一份初始权重出发、用针对性示范做 SFT 后的模型。两者评估时使用相同的提示、资料和生成预算。这样更容易看清训练带来的变化。

这里固定的是初始 checkpoint 和比较条件,不是冻结所有模型参数。哪些参数更新,由全参微调(fine-tuning)或 LoRA 等方案决定。若同时换基座、加资料、改提示,就很难把效果变化归因到 SFT。

比较 LoRA 与全参微调时,也要记录两者的调参预算、实际 token、时间和资源。只写“都训练了 1 个 epoch”还不够:数据长度不同,计算量也会不同。

从哪里继续

按顺序读,就是一次小实验从选型到交付的过程。只想解决眼前的问题,也可以直接跳到对应一篇,不需要先学完所有分布式框架。

章节 这一步做什么 具体要取舍什么
1 · 训练方案 决定要不要 SFT,选择 LoRA / QLoRA / 全参方案及框架 行为问题是否值得训练,额外成本是否有必要
2 · 数据到 batch 建记录、分组划分、套模板、检查 labels 可追溯性、截断、padding 与 packing
3 · 数据与目标 手算 mask 后的 loss,比较 token / 样本平均 监督哪些位置,长短样本各占多少权重
4 · 多卡选择 区分容量和速度问题,算 batch 与全局分母 DDP / FSDP / ZeRO / TP / PP 的成本
5 · 保存与恢复 跑一次中断恢复对照,区分 resume 与导出 存什么、何时存、换卡数后还能保证什么
6 · 实验与发布 比较新旧结果,沿请求排查错例,准备回滚 总体收益与分组回退;该改输入、训练还是评测

先看思路,可以读 1 → 2 → 6;准备实际动手,把 3 → 4 → 5 也跑通。两个 Python 标准库程序分别检查目标 / 评估,以及数据 / batch / 玩具恢复,不需要下载模型。接上真正的训练器(trainer)后,还要验证 tokenizer、前向、梯度与分布式恢复,不能把教学程序跑通当作完整 SFT 已完成。

想先补算法,去 SFT 和 RLHF 导读。那边讲优化方法,这边讲怎样知道自己究竟优化了什么。

本页术语 8
后训练 post-training
预训练之后为特定任务和行为做的所有训练
检索 retrieval
从外部语料里找出相关内容
奖励 reward
RL 里指导策略更新的标量信号
监督微调 supervised fine-tuning, SFT
用输入和期望输出的示范,训练模型完成指定任务
偏好学习 preference learning
从「A 比 B 好」这类比较里学习
强化学习 reinforcement learning, RL
根据行动带来的回报调整策略,学习怎样作出更好的选择
微调 fine-tuning
在预训练权重上继续训练以适配具体任务
训练器 trainer
负责计算 loss、反向传播并更新模型参数的系统