把「遵循指令」当作对齐信号
后面对 RLHF 的每一条批评,针对的都是这条流水线。在你研究优化压力如何扭曲一个代理指标之前,你得先看清这个代理指标长什么样。InstructGPT(Ouyang et al., 2022)定义了那套参考架构:在「指令-回复」对上做监督微调,用成对偏好排序训练一个奖励模型,再用 PPO 针对奖励模型优化、同时加一个对 SFT 策略的 KL 惩罚。一个 1.3B 的 InstructGPT 在人类偏好上压过了 175B 的 GPT-3。就是这一个结果,让 2026 年的每一家前沿实验室至今仍在交付 RLHF 形态的后训练流水线。
类型: Learn 语言: Python(标准库,玩具级三阶段流水线) 前置要求: 阶段 10 · 06(SFT)、阶段 10 · 07(RLHF)、阶段 10 · 08(DPO) 预计时间: ~45 分钟
学习目标
- 说出 InstructGPT 流水线的三个阶段,以及每个阶段用的损失。
- 解释为什么一个 1.3B 的指令微调模型,在人类偏好评测上能打败原始的 175B GPT-3。
- 说清楚第 3 阶段的 KL 惩罚到底在防什么,以及为什么去掉它会塌缩成寻峰(mode-seeking)行为。
- 描述对齐税(alignment tax),以及 Ouyang et al. 用来对付它的 PPO-ptx 缓解手段。
问题背景
预训练语言模型只会续写文本。它们不会回答问题。你让 GPT-3 「写一个反转列表的 Python 函数」,常常拿回来的是另一段提示词——因为训练分布里大部分是网页文本,而网页文本接着的还是更多网页文本。模型在干它该干的活——只是这活本身就错了。
每家正经实验室用来修这个问题的代理指标,是人类偏好。两段补全交给标注员;标注员挑出更好的那段;一个奖励模型去学这个标注员。然后一个 RL 循环把策略推向奖励模型打高分的输出。三句话讲完了整个 InstructGPT 的核心论点。论文剩下的部分都是工程。
核心概念
第 1 阶段:监督微调(SFT)
收集「提示-回复」对,其中回复是一个善意的人类会写出来的内容。Ouyang et al. 用了 13k 条提示,来自标注员和 OpenAI API。在这批数据上用标准的交叉熵损失微调基座模型。
SFT 给了你什么:模型现在会回答问题,而不是续写问题。它没给你什么:当多个回答都说得过去时,关于标注员更偏好哪一个,没有任何信号。
第 2 阶段:奖励模型(RM)
对每条提示,从 SFT 模型采样 K 个补全。一个标注员对它们排序。训练一个奖励模型,给任意「提示-回复」对打分,使得对于那些 y_w 被偏好于 y_l 的对:
L_RM = -log sigmoid(r(x, y_w) - r(x, y_l))这就是 Bradley-Terry 成对偏好损失。RM 通常从 SFT 模型初始化,把 LM 头换成一个标量头。
奖励模型很小:对 175B 的 InstructGPT 而言,6B 就够了。它们也很脆——论文第 5 节大半都在讲小规模下冒出来的奖励作弊(reward-hacking)行为。
第 3 阶段:带 KL 惩罚的 PPO
定义目标:
J(pi) = E_{x~D, y~pi(.|x)} [ r(x, y) ] - beta * KL(pi(.|x) || pi_SFT(.|x))用 PPO 最大化它。KL 项让 pi 不至于离 SFT 策略漂太远。没有它,优化器会找到对抗样本——这些字符串在 RM 下得分高,是因为 RM 从没见过它们,而不是因为人类真的更喜欢它们。
KL 系数 beta 是 RLHF 里最重要的那一个超参数。太低:奖励作弊。太高:相比 SFT 毫无长进。
对齐税
RLHF 之后,模型更受人类青睐,但在标准基准上反而退步(SQuAD、HellaSwag、DROP)。Ouyang et al. 把这叫对齐税,并用 PPO-ptx 修它:把预训练梯度混进 RL 目标里,让模型不至于忘掉那些它从没因之得到奖励的下游任务。
J_ptx(pi) = J(pi) + gamma * E_{x~D_pretrain} [ log pi(x) ]PPO-ptx 成了标配。Anthropic、DeepMind、Meta 都用了某种变体。
结果
一个 1.3B 的 InstructGPT(SFT + RM + PPO-ptx),约有 70% 的概率被标注员偏好于 175B 的基座 GPT-3。在来自生产流量的隐藏测试提示上,差距还会拉大。从这个数字里能读出两件事:
- 对齐是一个跟能力不同的维度。175B 模型能力更强;1.3B 模型对齐更好;标注员选了对齐好的那个。
- 能力的下限由基座模型决定。你没法靠 RLHF 把一个基座模型「调」出它从没见过的事实。
为什么这是阶段 18 的参考原点
后面每一课的批评——奖励作弊(第 2 课)、DPO(第 3 课)、阿谀奉承(第 4 课)、CAI(第 5 课)、潜伏特工(第 7 课)、对齐伪装(第 9 课)——针对的都是这条流水线的某一部分。奖励作弊攻击第 2 阶段。DPO 把第 2、3 阶段合并塌缩。CAI 替换掉人类标注员。阿谀奉承说明标注员本身是个有偏的信号。对齐伪装说明策略可以整个绕开第 3 阶段。脑子里没有这条流水线,你就读不懂这些批评里的任何一条。
al-instruct-pipeline实际使用
code/main.py 在玩具偏好数据上模拟这三个阶段。基座「策略」是一枚在动作 {A, B, C} 上有偏的硬币。第 1 阶段 SFT 在 200 条提示上模仿标注员的动作。第 2 阶段从 500 条成对排序里拟合一个 Bradley-Terry 奖励模型。第 3 阶段跑一个简化版 PPO 更新,带一个对 SFT 策略的 KL 惩罚。你可以看着奖励往上爬、KL 散度变大、策略漂移——还可以关掉 KL 项,眼看着奖励作弊在 50 个更新步内冒出来。
要看的东西:
beta = 0.1与beta = 0.0两种情况下的奖励轨迹。- 训练步数推进时的 KL(pi || pi_SFT)。
- 最终动作分布与标注员偏好的对比。
拿去用
本课产出 outputs/skill-instructgpt-explainer.md。给定一段 RLHF 流水线描述或一篇论文摘要,它能指出三个阶段里哪一个被改动了、每个阶段用的是什么损失、以及是否存在 KL 惩罚或等价的正则项。
练习
运行
code/main.py。设beta = 0.0,报告 200 个 PPO 步之后的动作分布。用一段话解释这种寻峰行为。改奖励模型,给动作 B 加一个 +0.5 的偏置(模拟一个奖励 bug)。用
beta = 0.1跑 PPO。KL 惩罚阻止了策略去钻这个偏置的空子吗?beta取到多少时这种钻空子才会变得明显?读 Ouyang et al.(arXiv:2203.02155)的图 1。通过把 PPO 跑 1、5、20、100 步并测量相对 SFT 模型的偏好,复现那条标注员偏好曲线。
论文 4.3 节报告 1.3B 的 InstructGPT 约有 70% 的概率打败 175B 的 GPT-3。为什么在隐藏的生产提示上这个比例会比在标注员自己的提示上更高?
在同一批偏好数据上,把 PPO 损失换成 DPO(阶段 10 · 08)。对比最终的策略漂移(到 SFT 的 KL)和最终奖励。在奖励相当的情况下,哪种方法漂得更远?
关键术语
| 术语 | 大家嘴上怎么说 | 它实际是什么 |
|---|---|---|
| SFT | 「指令微调」 | 第 1 阶段:在「提示-回复」对上做交叉熵微调 |
| 奖励模型 | 「那个 RM」 | 对 (提示, 回复) 打分的标量回归器,用 Bradley-Terry 在成对标注上训练 |
| Bradley-Terry | 「成对偏好损失」 | -log sigmoid(r_w - r_l);把成对排序化简成二分类 |
| KL 惩罚 | 「那个正则项」 | `beta * KL(pi |
| PPO-ptx | 「带预训练混合的 PPO」 | 在 PPO 目标里加入一部分预训练对数似然,抵消对齐税 |
| 对齐税 | 「RLHF 退步」 | RLHF 没瞄准的标准基准上,RLHF 之后出现的掉点 |
| 标注员偏好 | 「那个 ground truth」 | 人类排序的一个采样;RM 是它的统计代理,而不是「人类价值观」的代理 |
延伸阅读
- Ouyang et al. — Training language models to follow instructions with human feedback (arXiv:2203.02155) —— InstructGPT 论文,此后每一条 RLHF 流水线的根基
- Stiennon et al. — Learning to summarize from human feedback (arXiv:2009.01325) —— RLHF 用于摘要的前身工作
- Christiano et al. — Deep reinforcement learning from human preferences (arXiv:1706.03741) —— 最早的基于偏好的 RL 形式化
- Bai et al. — Training a Helpful and Harmless Assistant with RLHF (arXiv:2204.05862) —— Anthropic 对 InstructGPT 流水线的 HH 扩展