本文是「零基础学大模型原理」系列的第 6 篇。这个系列记录一个没有任何机器学习背景的工程师,在 ChatGPT 发布之后从零补原理的过程。
- 神经网络入门:从感知机到反向传播
- 词怎么变成向量:从 one-hot 到 Word2Vec
- Transformer 之前:RNN、seq2seq 与注意力机制
- Transformer 详解:自注意力、多头与位置编码
- GPT 系列:从 GPT-1 到 GPT-3 的演进逻辑
- 从 GPT-3 到 ChatGPT:指令微调与 RLHF(本文)
上一篇结尾提到 InstructGPT。这两周读了三份材料:2022 年 3 月发布到 arXiv 的论文 Training language models to follow instructions with human feedback、OpenAI 的 ChatGPT 发布博客,以及 Hugging Face 的 Illustrating RLHF 图解。它们描述的是同一条训练流程:先让人写示范,进行一轮有监督微调;再让人给模型回答排序,训练奖励模型;最后用强化学习依据奖励模型的分数更新语言模型。这篇按我的理解记录。前置是上一篇,记得「GPT-3 只用预测下一个词的目标进行预训练」即可。
能力和行为
先说问题。上一篇提到,GPT-3 的预训练目标是续写互联网文本。互联网文本当然包含问答,但格式并不固定。在 GPT-3 里问「太阳为什么从东边升起?」,模型可能继续列出相似问题,因为许多 FAQ 页面会在一个问题后列出更多问题。让它翻译,它可能给出译文,也可能把输入接成一篇讨论翻译的文章。任务是否完成,取决于 prompt 是否接近训练语料中「答案跟在问题后面」的格式。few-shot 给出几个例子之所以有效,是因为它让输入更接近这种格式。
这是我使用 GPT-3 和 ChatGPT 时感受到的主要差别。前者对同一个问题换一种写法,可能得到更合适的回答;它并没有稳定地把用户输入解释为需要回答的请求。它根据已有文本继续生成。InstructGPT 论文在开篇指出,语言建模目标(predict the next token)与用户希望模型完成的事(follow instructions helpfully and safely)并不完全一致(misaligned)。仅靠扩大预训练规模,不能直接提供指令跟随这一训练信号。预训练之后还需要训练阶段,用人类偏好调整模型行为。
InstructGPT 完成了这段后训练。ChatGPT 在 GPT-3 的基础上也采用了这类方法。
指令微调提供示范回答
第一步是第 5 篇里 GPT-1 用过的有监督微调,变化在于训练数据。OpenAI 通过 Upwork 和 Scale AI 招募了约 40 人的标注团队,让他们针对各种指令手写期望回答,收集一万多条(指令,回答)示范对,并加入一部分从 API 用户提交中收集的 prompt。模型在这些数据上继续训练,目标仍是给定指令,逐词预测示范回答。
这一步得到 SFT 模型。模型见到指令后会按示范的格式回答,而不是继续列出问题。论文仍需后续两个阶段,因为示范数据有两个限制。第一,人工示范无法覆盖用户提问的全部形式。第二,示范只能表明一个回答可取,难以表达「回答 A 比回答 B 更好」这类相对偏好。后者需要另一种数据形式。
用排序数据训练奖励模型,再用 PPO 更新模型
RLHF 是 Reinforcement Learning from Human Feedback 的缩写,即基于人类反馈的强化学习。InstructGPT 没有发明这条流程。它可以追溯到 2017 年 DeepMind 与 OpenAI 合作的 Deep RL from Human Preferences;OpenAI 在 2019 年也用相近方法微调过 GPT-2 的摘要和续写。InstructGPT 将该方法用于 1750 亿参数模型的指令跟随任务。流程分为三段:
第二段训练奖励模型。研究者取一批 prompt,让 SFT 模型为每个 prompt 采样多个回答,论文中每个 prompt 采样 4 到 9 个回答,再交给标注员从好到差排序。排序中的每一对「回答 A 比回答 B 好」都可作为一条偏好训练样本。论文使用一个 60 亿参数模型作为奖励模型:它从 SFT 模型初始化,将原本的词表输出层替换为输出标量的头。输入是(prompt,回答),输出是一个分数;训练时使用成对排序损失,使排名靠前的回答获得更高分。奖励模型(reward model,RM)近似标注团队在这批数据上表现出的偏好,并在后续优化中充当评分函数。
第三段才是强化学习。对新的 prompt,当前模型生成回答,奖励模型给回答打分,PPO 根据该奖励更新模型参数。这个过程会重复进行:生成、打分、更新。优化目标还包含 KL 惩罚,限制更新后的模型与 SFT 模型的距离。缺少这项约束时,模型可能为提高奖励模型分数而偏离 SFT 模型的输出分布,得到不符合预期的回答。论文还试验了混入预训练梯度的 PPO-ptx 变体,下一节会提到它。
标注员盲测偏好结果显示,13 亿参数的 InstructGPT 胜过 1750 亿参数的 GPT-3。参数量约为后者的 1/135,这说明在人类偏好评估中,训练目标的差异可以超过参数规模的影响。2022 年 11 月 30 日发布的 ChatGPT,按 OpenAI 博客的说法是 InstructGPT 的姊妹模型。它使用 GPT-3.5 系列模型,并通过与 InstructGPT 相同的方法训练,训练数据采用对话格式。
排序数据避开绝对分数尺度
读到这里时我有一个问题:既然最终要训练评分器,为什么不让标注员直接给每个回答打 1 到 10 分?
Hugging Face 的图解给出的解释是,绝对分数要求标注员共享同一套评分尺度。同一个回答在不同参照下可能得到不同分数,不同标注员对 7 分的理解也可能不同。相对排序只要求判断「A 和 B 哪个更好」,不要求预先定义统一的绝对刻度。InstructGPT 论文报告,标注员对回答排序的一致率为七成多。这也说明「好回答」没有唯一标准。排序是面对标注噪声时使用的相对偏好信号,而不是把绝对分数直接当作奖励。
对齐的代价
论文将这种代价称为 alignment tax(对齐税)。只使用 PPO 的模型在一批传统 NLP 基准上,例如 SQuAD、DROP、HellaSwag,低于 GPT-3。一个可能的原因是优化目标转向了标注偏好,参数更新也会影响原本支持通用续写任务的能力。论文提出 PPO-ptx:在 PPO 训练中混入预训练梯度。它在偏好指标基本不变的情况下缓解了部分基准退化,论文摘要称其为 minimal performance regressions,也是论文用于最终 InstructGPT 模型的训练变体。它并未在所有任务上与 GPT-3 持平。在 DROP、SQuADv2、WMT 法译英等任务上,PPO-ptx 模型仍低于 GPT-3。
社区中的一些体验和论文结果可以放在一起理解。ChatGPT 上线后的这三个月,推上和论坛里常见的抱怨是模型过于谨慎、频繁拒答,或者给出信息量有限的回答,有人说它「变笨了」。这不能单凭 InstructGPT 论文解释,但人类反馈训练确实会将标注规范中的有害、冒犯和不确定内容约束纳入优化信号。拒答边界如何设定仍是应用中需要处理的问题。
PPO 的理解边界
这条流程里,我没有拆开 PPO 的推导。我知道它出自 OpenAI 2017 年的一篇论文,属于策略梯度方法;clipped objective 用于限制单次更新幅度,避免策略变化过大;我也知道更新公式的形式。但优势函数(advantage)的估计为何这样构造、公式各项为何取这种形式,我没有走通。因此目前只能复述流程:生成、打分、计算优势,再按裁剪后的目标更新参数。
这个系列的主线是语言模型,强化学习需要单独系统学习。前两段,SFT 和奖励模型训练,我确认自己理解了其基本机制:有监督微调是在不同数据上继续使用梯度下降;奖励模型以标量输出配合成对排序损失训练。
小结
从 GPT-3 到 ChatGPT 的训练流程包含三段:人工示范用于指令微调;人类排序用于训练奖励模型,将「人觉得哪个好」表示为可优化的分数;PPO 根据该分数更新模型,并用 KL 约束限制模型偏离 SFT 模型。这个流程将后训练信号由互联网文本的统计规律补充为标注团队给出的偏好。
在偏好盲测中,13 亿参数的 InstructGPT 超过了 1750 亿参数的 GPT-3。代价是部分基准测试退化,以及模型行为会受无害性等标注规范影响。
到这篇为止,从神经元到 ChatGPT 的原理主线暂告一段落。接下来打算整理这三个月学的内容:哪些是真懂了,哪些只是记住了名词,例如 PPO;社区里新出现的概念,例如涌现、思维链,哪些值得继续补。这会作为这个系列的阶段性总结。
本篇参考的资料
- Training language models to follow instructions with human feedback(Ouyang et al., 2022):InstructGPT 论文,三段流水线、40 人标注团队、1.3B 对 175B 的偏好结果、alignment tax 和 PPO-ptx 均出自这里。
- ChatGPT: Optimizing Language Models for Dialogue(OpenAI, 2022-11-30):ChatGPT 发布博客,「InstructGPT 的姊妹模型」这个说法和对话格式数据的说明出自这里。
- Illustrating Reinforcement Learning from Human Feedback (RLHF)(Hugging Face, 2022-12):RLHF 三段流程的图解,「排序比打分更稳定」的论证主要参考这篇。
- Deep reinforcement learning from human preferences(Christiano et al., 2017):RLHF 思路的源头,用人类偏好训练奖励模型的原始方案。
- Fine-Tuning Language Models from Human Preferences(Ziegler et al., 2019):OpenAI 用人类反馈微调 GPT-2 的早期工作,InstructGPT 方法的直接前身。
- Proximal Policy Optimization Algorithms(Schulman et al., 2017):PPO 原始论文。如实说明:只读了流程,没走通推导。

