RLHF 三步各吃什么数据
建议用时:25 分钟(含练习)
学习目标
能够按数据形态拆开监督微调、奖励模型与策略优化三步,并说出 PPO 每一步在优化什么。
本节产出
一份三步数据流图与每步的输入清单
核心知识:三步吃的是三种数据,不是一批数据用三遍
"拿人工反馈调一下模型"这句话里藏着一个误解:好像标注者给的那批数据会被连着喂三遍。真实形状是三道工序,每道工序收的货形态不同,交出去的东西也不同。形态搞错,收益就会漏在最不容易被看见的地方。
InstructGPT 那篇论文的摘要把顺序写得相当直白(本节所有主张只核到 arXiv 摘要页,正文与图表未取):先从标注者写的提示出发,收集标注者写的示范(labeler demonstrations),用监督学习去微调一个基座模型;然后另外收集一批对模型输出的排序(rankings of model outputs),用这批排序把上面那个监督微调过的模型继续用强化学习微调下去。摘要开头还钉了一句判断依据:模型变大本身并不会让它更擅长跟随用户意图。这就是为什么这三步需要人工介入——不是算力不够,而是"什么算答得好"这件事没写在语料里。
三步各收什么、各交什么
| 工序 | 进来的数据形态 | 谁生产它 | 出去的东西 | 这一步实际在优化什么 |
|---|---|---|---|---|
| 监督微调 | 一问一答,答案是人写的 | 标注者写理想回答 | 会按人想要的样子开口的初始策略 | 让下一词的分布靠近人写的那段答案 |
| 奖励模型 | 同一提示下的几条输出,被人从好排到差 | 标注者只做比较 | 一个能给单条输出打分的打分器 | 把"谁比谁好"压成一个数 |
| 策略更新 | 策略自己采出来的新输出,交给打分器要分 | 模型采样、打分器评分 | 更贴合偏好的新策略 | 在旧策略附近把拿到的分数抬上去 |
这张表的读法只有一句:每一行的"进来"都不是上一行的"出去"。 第一步吃人写的回答,交出一个模型;第二步吃比较,交出另一个模型(打分器);第三步吃的是这两个模型配合着当场产生的新数据。三步之间是换料,不是重复加工。
为什么第二步不干脆让人多写几份答案
写一份理想回答,标注者要想内容、想格式、想边界;比较两份现成的输出,只需要指一下"这条比那条好"。后者便宜得多,而且它管的正是模型已经会生成、但生成得不好的那一片区域——人未必写得出更好的答案,却认得出哪个更差。(这是机制解释,属推断,摘要里没有这句话。)
代价也长在同一处:比较数据里不含"理想回答长什么样",它只含相对次序。把相对次序压成一个分数,一定要丢东西,丢掉的是"好多少"。这条代价在第 5 节会被单独拆开讨论,那里的一处近似就叫"成对偏好可以被逐点分数替代"。
第三步里的 PPO 到底在优化什么
PPO 的摘要(同样只核到摘要页)写了三件事。第一,它是一族策略梯度方法,在"与环境交互采样数据"和"用随机梯度上升优化一个代理(surrogate)目标函数"之间来回交替。第二,标准策略梯度每个数据样本只做一次梯度更新,而 PPO 换了一个目标函数,使同一批数据可以做多轮小批量更新。第三,作者把它的性质写成带有 TRPO 的一部分好处,但实现更简单、更通用,经验上样本复杂度更好。
"代理"这个词是理解第三步的钥匙。被优化的不是环境的真值,而是一个近似:这批样本是在旧策略下采出来的,估计只在离旧策略不远的地方才算得准。所以"同一批数据敢用好几轮"的前提,是每一步都别走太远。摘要说它带有 TRPO 的一部分好处,"更新被限制在旧策略附近"是这个思路的通常读法,本课把它标成推断;究竟靠什么形式把步子限制住、系数取多少,正文没取,本节一个数字都不写。
用大白话说清这三步各自在优化什么:第一步在优化"照着人写的答案说话",第二步在优化"能像人一样排出先后",第三步在优化"在自己新采出来的答案上拿到更高分"。第三句里的主语是模型自己,这也是它和前两句最不一样的地方。
最容易混的三处
看起来像
- 三步就是把同一批标注数据训练三遍
- 排序数据里也顺带带着"标准答案"
- 打分器给出的分数就等于质量
其实是
- 三步吃三种形态,第二步那批排序是另外收集的
- 排序只有相对次序,没有一份可以抄写的理想回答
- 打分器只在第二步那批数据的分布上拟合过,策略一变,它面对的就是没见过的输入
第三处是本节最要紧的一处隐患。第三步里模型会不断生成新分布的输出,而打分器只见过排它时那批旧输出。分数继续涨,可能只是模型找到了打分器的盲区。第 5 节里"拟合出的打分器能不能泛化到策略自己采出的数据"这一处近似,就是这么来的。
这张图承担的论证是三种进料互不替换。五个方框里只有两批数据(标注示范、输出排序)和三道工序(监督微调、奖励模型、策略更新)。箭头看着像一条流水线,要盯的却是数据方框的位置:喂监督微调的是人写的问答对,喂奖励模型的是同一题下几条输出排出的次序,这两批料形态不同,谁也不是谁的出料;最后那道策略更新吃的,是前两个方框合起来才能给的东西——新采的输出配一个分数。本图只画单程:第三步内部"采样、更新几轮、丢弃、重新采样"的那个回路没有画进来,它由练习 2 的伪代码承担。
案例:星湾社区服务中心手里的五份数据(虚构)
星湾社区服务中心给居民做政策咨询问答,回答通过 https://api.example.invalid/v1 调一个虚构模型 example-chat-mini 生成。2026 年 9 月起,张老师带两名工作人员收数据,李陌负责整理,周衡负责训练,许岚负责验收。下面这张表和后面三行读数都是课堂编的教学用虚构样例,机构、人名、接口、模型名和数字都不对应任何真实系统。
| 批次 | 里面是什么(形态) | 数量(虚构) | 谁生产的 |
|---|---|---|---|
| D1 | 居民问句,加张老师团队手写的标准回答 | 1200 组 | 人写 |
| D2 | 同一问句下模型给的 4 条输出,李陌从好排到差 | 800 组 | 人比较 |
| D3 | 同一问句下 2 条输出,只标了"哪条更好",没人写过答案 | 1500 对 | 人比较 |
| D4 | 策略更新之后模型自己采的新回答,每条带打分器给的一个分数 | 6000 条 | 循环自己产生 |
| D5 | 一条回答配一个"合格 / 不合格"标签,没有同题的另一条做对照 | 900 条 | 人贴单条标签 |
10 月中旬第一次跑,周衡犯了两处最典型的错。
第一处:他把 D3 当成"少了点量的 D1",直接当示范喂进监督微调。D3 里没有任何人写的理想回答,只有"哪条更好"。监督微调不管谁更好,它对每一条都照抄,于是被判差的那条一样进了学习目标。他原本想省掉第二步,结果第一步也没走好。
第二处:他把 D5 塞进奖励模型那一步,理由是"这也是人对质量的判断"。形态不对:奖励模型学的是同一个问题下几条输出的次序,D5 是各题孤立的单条标签。打分器照样能训出来,但它学到的不是"这一条比那一条好",而是"这类回答值几分"——而"这类回答"里混着问题本身的难易。哪类问题更容易被工作人员判合格,这个分布特征被当成质量本身记了进去。
许岚在复盘会上把话说得很直:D5 在这三步里哪儿都不进,它缺的是同题对照。这种"逐条带标签"的形态有它自己的走法,第 5 节会用到。
三行虚构日志(读数为教学用虚构样例):
2026-10-12 03:41 stage=reward batch=D5 一致率=0.53 备注:同题只有一条,比较无从建立
2026-10-12 03:44 stage=policy kl=0.09 平均长度=214字 奖励=6.1 抽查合格率=持平
2026-10-12 04:02 stage=policy kl=0.61 平均长度=688字 奖励=7.4 抽查合格率=下降
第三行是本节最该记住的一种形状:奖励在涨,抽查合格率在掉,同时长度和分数一起动、离初始模型越来越远。单看那条奖励曲线,这是一次"成功"的更新;把三个读数摆在一起,它是模型找到了打分器的盲区。这就是第 3 节说的"会撒谎的数字",落在本节第三步上的具体样子。
动手练习
- 五份数据归位。输入:案例里 D1 到 D5 的形态描述。任务:各判它进三步中的哪一步;判不进去的那份,写明它缺了哪一格;再从五份里挑出两份最容易被归错的,各写一句"归错之后会发生什么"。预期输出:五行判定,每行给"形态关键词、归入的工序、依据",外加两段后果说明。验收条件:至少两行点明进料的形态关键词与那道工序产出物的对应关系;不许用"更准""更好"当依据;判不进任何一步的那行必须写清缺的是同题对照还是理想回答。
- 写一次 PPO 外循环。输入:本节第三步的描述。任务:用不超过八行伪代码写出一次外循环里采样与更新的次序,并标出其中最容易失控的一步。预期输出:一段八行以内的伪代码,加一句"失控点在哪、为什么"。验收条件:代码里要能看出"同一批样本被更新多轮"和"用完就丢掉、重新采样"这两件事;失控点必须落在采样与更新的相对位置上,不许写成"学习率太大"这类跟本节无关的答案;不要求跑通,也不引入任何具体数值。
- 交三步数据流图与输入清单。输入:第 1 题的归位结果。任务:用表格、文字或手绘都行,给出三步各自的一张小图,每步写满三格——进来的数据形态、谁生产、出去的东西。预期输出:一份能让别人照着复述的清单。验收条件:三个方框里不许出现"数据一批""训练数据"这种不写形态的说法;清单上必须看得出第二步的进料不是第一步的出料。
参考答案与推演
完成检查
- 不用"同一批数据训练三遍"这种说法,就能把三步各吃什么数据、各交出什么讲成三句互不引用的话。
- 能解释 PPO 为什么敢在同一批样本上做几轮小批量更新,说清这件事的前提是什么、前提被越过之后先坏的是哪一格。
- 能对 D1 到 D5 任一批数据说出它的形态关键词,以及它为什么进不了某一步。
参考与来源
- Training language models to follow instructions with human feedback(arXiv 摘要页,v1 提交 2022-03-04):本节核到的是摘要里那条顺序——收集标注者写的示范做监督微调,再收集对模型输出的排序、用强化学习继续微调那个监督模型,外加"模型变大本身不等于更会跟随用户意图"这一句。2026-10-23 回本页逐句核过;正文与图表未取,本课不引其中任何评测数字。
- Proximal Policy Optimization Algorithms(arXiv 摘要页,v1 提交 2017-07-20):本节核到的是摘要里三句——在环境采样与代理目标优化之间交替、标准策略梯度每样本只做一次梯度更新而 PPO 的目标函数允许多轮小批量更新、带有 TRPO 的一部分好处但实现更简单。裁剪系数与其他数值未取正文,本节一律不写。
附件
- 登录后下载
rlhf-three-stage-pipeline-practice-data.zip
ZIP 文件
RLHF 三步各吃什么数据
3 道题 · 及格分 60 分