在前面的文章中,我们已经讲到了 GPT-1、GPT-2、GPT-3、In-Context Learning、Prompt Engineering 和 Scaling Law。
这条路线可以简单概括为:
GPT-1:生成式预训练 + 下游任务微调
GPT-2:语言模型开始表现出 zero-shot 任务迁移能力
GPT-3:大规模语言模型表现出 few-shot / in-context learning 能力
Scaling Law:模型能力和参数量、数据量、计算量有关
Chinchilla:模型不能只堆参数,还要训练足够多 token
到这里,GPT 路线已经具备了非常强的文本生成能力。但是,一个新的问题出现了:
语言模型会生成文本,并不代表它会按照用户意图回答问题。
GPT-3 可以续写文章、回答问题、翻译文本、生成代码,但它并不天然是一个"好助手"。它可能会:
答非所问
不遵循用户要求
生成看似合理但错误的内容
编造事实
输出冗长无用的回答
在不该回答时继续回答
原因很简单:GPT-3 的训练目标是 预测下一个 token ,而不是 帮助用户完成任务。这就引出了 InstructGPT。InstructGPT 对应的论文是:
Training language models to follow instructions with human feedback
这篇论文由 OpenAI 在 2022 年提出,是大语言模型从"会生成文本"走向"会听指令"的关键节点。它的核心思想可以概括为:
使用人类反馈来微调语言模型,让模型输出更符合用户意图。
更具体地说,InstructGPT 使用了三步流程:
第一步:监督微调 SFT
第二步:训练奖励模型 RM
第三步:使用 PPO 进行强化学习微调,也就是 RLHF
这就是后来大语言模型对齐训练中非常经典的路线。
一、GPT-3 已经很强,为什么还需要 InstructGPT?
GPT-3 已经具备很强的生成能力和 few-shot learning 能力。用户给出 prompt 后,模型可以根据上下文继续生成文本。但 GPT-3 的本质仍然是:
给定前文,预测下一个 token。
它优化的是语言建模目标:
也就是说,模型只是在学习:
在当前上下文后面,什么 token 最可能出现?
这个目标和用户真正想要的目标并不完全一致。用户真正想要的是:
回答有帮助
内容真实可靠
不要胡编乱造
符合指令要求
格式正确
语气合适
必要时拒绝不合适请求
但是 next-token prediction 并不会直接优化这些目标。例如,用户问:
请用三句话解释 Transformer。
一个没有对齐好的语言模型可能会输出:
Transformer 是一种神经网络结构。它被广泛应用于自然语言处理。下面我将从十个方面详细展开......
这就没有遵循"三句话"的要求。再比如,用户问:
请总结下面这段文字,只输出要点。
模型可能会输出一大段解释,而不是简洁要点。所以,GPT-3 的问题不是"不会生成",而是:
它不知道什么样的回答更符合人类偏好。
这就是对齐问题,也就是 alignment problem。InstructGPT 要解决的正是这个问题:
如何让大语言模型更好地遵循用户指令?
二、什么是"对齐"?
在大语言模型中,对齐通常指:
让模型的输出更加符合人类意图、价值和偏好。
对于一个助手模型来说,一个好的回答通常应该满足几个标准:
Helpful:有帮助
Honest:诚实
Harmless:无害
这三个词经常被简称为 3H。
1. Helpful:有帮助
有帮助意味着模型应该尽量解决用户的问题。例如用户问:
Python 中怎么读取 CSV 文件?
好的回答应该给出可执行的方法、示例代码和必要解释,而不是泛泛而谈。
2. Honest:诚实
诚实意味着模型不应该胡编乱造。如果不知道答案,应该承认不确定,而不是编造一个看起来可信的答案。例如用户问一个不存在的论文:
请总结《XYZ Transformer for Quantum Language Modeling》这篇论文。
如果模型没有可靠信息,就不应该假装知道。
3. Harmless:无害
无害意味着模型不应该帮助用户造成现实伤害。例如面对危险、违法或明显有害的请求,模型需要拒绝或转向安全解释。InstructGPT 的目标不是单纯让模型更会说话,而是让模型更接近:
有帮助、真实、无害
这也是大语言模型从 base model 走向 assistant model 的关键。
三、InstructGPT 的整体方法
InstructGPT 的训练流程可以概括为三步:
预训练 GPT-3
↓
收集人工示范数据
↓
监督微调 SFT
↓
收集模型输出排序数据
↓
训练奖励模型 RM
↓
使用 PPO 优化策略模型
↓
得到 InstructGPT
更简洁地说:
SFT → Reward Model → PPO / RLHF
这三步分别解决不同问题。
| 步骤 | 作用 | 直观理解 |
|---|---|---|
| SFT | 让模型初步学会按照指令回答 | 给模型看"好答案长什么样" |
| Reward Model | 学习人类偏好 | 判断哪个回答更好 |
| PPO / RLHF | 用奖励信号继续优化模型 | 让模型生成更受人类偏好的回答 |
这条流程非常重要。因为它把语言模型训练从单纯的:
预测下一个 token
推进到了:
生成更符合人类偏好的回答
四、第一步:监督微调 SFT
SFT 的全称是:
Supervised Fine-Tuning
也就是监督微调。这一步的目标是:
让预训练语言模型初步学会按照用户指令回答问题。
在 SFT 阶段,研究人员会收集一批人工编写的高质量示范数据。每条数据通常包含:
用户指令 prompt
人工写出的理想回答 demonstration
例如:
Prompt:
请用三句话解释什么是 Transformer。
人工示范回答:
Transformer 是一种基于注意力机制的神经网络结构。它可以并行处理序列中的 token,并建模长距离依赖关系。它是 BERT、GPT、T5 等模型的基础架构。
模型会在这些示范数据上进行有监督训练。训练目标仍然是语言模型交叉熵,只不过训练文本变成了"指令 + 人工回答"。
如果 prompt 是 x,人工回答是 ,那么 SFT 的目标可以写成:
其中:
-
x是用户指令;
-
是人工回答中的第 t 个 token;
-
是回答中第 t个 token 之前的内容;
-
模型目标是最大化人工回答的概率。
通俗理解就是:
给定用户指令,让模型尽量模仿人工标注者写出的好回答。
SFT 的作用非常直接。原始 GPT-3 只是一个续写模型,而经过 SFT 后,它开始知道:
用户问问题时,我应该回答问题
用户要求总结时,我应该总结
用户要求列要点时,我应该列要点
用户要求翻译时,我应该翻译
所以,SFT 是模型从 base model 走向 instruction-following model 的第一步。
五、SFT 有什么局限?
SFT 很重要,但它并不完美。因为 SFT 只是在模仿人工示范回答。这会带来几个问题。
1. 人工示范数据有限
高质量人工回答很贵。如果想覆盖所有可能的用户指令,几乎不可能。用户可能提出:
写作请求
代码请求
数学问题
论文总结
法律咨询
医学问题
数据分析
多轮对话
格式转换
人工示范数据不可能覆盖所有情况。
2. 只学习"一个好答案",没有学习"哪个答案更好"
对于同一个 prompt,可能存在多个回答。例如用户问:
请解释什么是 BERT。
可能有很多回答方式:
简短回答
详细回答
适合初学者的回答
学术风格回答
代码角度回答
论文精读风格回答
SFT 通常只给模型一个示范答案。它没有直接告诉模型:
回答 A 比回答 B 更好
回答 C 虽然语法正确但不够有帮助
回答 D 太啰嗦
回答 E 编造了事实
也就是说,SFT 更像是模仿学习,而不是偏好学习。
3. 模型可能学会表面格式,但不一定最符合偏好
SFT 可以让模型学会回答格式,但对于更细微的人类偏好,比如:
哪个回答更有帮助?
哪个回答更诚实?
哪个回答更安全?
哪个回答更符合用户语气?
仅靠 SFT 不一定够。因此,InstructGPT 进一步引入了奖励模型。
六、第二步:训练奖励模型 RM
Reward Model,简称 RM,中文可以叫奖励模型。它的目标是:
学习人类对不同模型回答的偏好。
这一步不是让人工标注者直接写答案,而是让他们比较多个模型回答,判断哪个更好。例如给定同一个 prompt:
请解释什么是 Transformer。
模型生成多个回答:
回答 A:Transformer 是一种基于注意力机制的神经网络结构,可以用于序列建模。
回答 B:Transformer 是一种数据库系统,主要用于存储表格数据。
回答 C:Transformer 是一种深度学习架构,核心是 Self-Attention,它可以并行处理序列并建模长距离依赖。
人工标注者可能排序为:
C > A > B
因为:
C 更完整、更准确
A 基本正确但较简单
B 明显错误
奖励模型要学习的就是这种排序偏好。
它输入:
prompt + answer
输出一个标量分数:
其中:
-
x 是用户 prompt;
-
y 是模型回答;
-
是奖励模型给出的分数;
-
表示奖励模型参数。
分数越高,表示奖励模型认为这个回答越符合人类偏好。
七、奖励模型如何训练?
奖励模型训练依赖人类排序数据。
假设对于同一个 prompt,有两个回答:
回答 A:更好
回答 B:更差
我们记为:
表示 winner,也就是更受偏好的回答
表示 loser,也就是较差的回答。奖励模型希望:
也就是说,它给更好回答的分数应该高于更差回答。常见的 pairwise ranking loss 可以写成:
其中:
-
是 winner 的奖励分数;
-
是 loser 的奖励分数;
-
是 sigmoid 函数;
-
如果 winner 分数比 loser 高很多,loss 就会小;
-
如果 winner 分数不够高,loss 就会变大。
这个损失函数的直观含义是:
奖励模型不需要知道绝对分数是多少,
只需要学会把更好的回答排在更差的回答前面。
训练完成后,奖励模型就可以替代人工标注者,对新回答打分。当然,它只是对人类偏好的近似,并不等于真正的人类判断。
八、为什么需要奖励模型?
为什么不直接让人类参与每一次模型训练?原因很简单:
人工标注太贵
人工反馈速度太慢
强化学习需要大量反馈信号
如果每次模型生成回答都要人工评分,训练成本会非常高。奖励模型的作用是:
用一个模型来近似人类偏好,作为后续强化学习的奖励信号。
也就是说,InstructGPT 的流程是:
先用人工数据训练奖励模型
再用奖励模型指导语言模型优化
这就把人工偏好转化成了可自动计算的 reward。这一步非常关键。
因为语言模型原本只能优化:
下一个 token 是否符合训练文本
而有了奖励模型后,它可以进一步优化:
整个回答是否更符合人类偏好
九、第三步:使用 PPO 进行 RLHF
RLHF 的全称是:
Reinforcement Learning from Human Feedback
中文可以翻译为:
基于人类反馈的强化学习
在 InstructGPT 中,RLHF 的核心是:
使用奖励模型作为反馈信号,通过 PPO 继续优化 SFT 模型。
PPO 的全称是:
Proximal Policy Optimization
它是一种强化学习算法。
在语言模型场景中,可以把模型看作一个策略:
其中:
-
x 是用户 prompt;
-
y是模型生成的回答;
-
表示当前语言模型;
-
模型的动作就是一个个生成 token。
奖励模型会给回答一个分数:
PPO 的目标是让语言模型生成更高奖励的回答。
也就是说:
模型生成回答
↓
奖励模型打分
↓
PPO 根据奖励更新语言模型
↓
模型更倾向生成高分回答
这一步让模型不只是模仿人工示范,而是主动优化"人类更喜欢什么样的回答"。
十、为什么 RLHF 中需要 KL 惩罚?
如果只让模型最大化奖励模型分数,会出现一个问题:
模型可能为了骗过奖励模型,生成奇怪但高分的文本。
这叫 reward hacking。例如奖励模型可能偏好:
回答更长
语气更确定
包含更多专业词
如果没有约束,语言模型可能学会生成特别长、特别自信但未必正确的回答,只为了拿高分。所以 RLHF 通常会加入一个 KL 惩罚项,限制新模型不要偏离原来的 SFT 模型太远。目标可以简化理解为:
其中:
-
是奖励模型给出的分数;
-
是当前正在优化的模型;
-
是 SFT 后的参考模型;
-
衡量当前模型和参考模型之间的差异;
-
控制 KL 惩罚强度。
这个公式的直观含义是:
模型要提高奖励分数,
但不能偏离原来的语言模型太远。
这样可以减少模型为了追求奖励而生成异常文本的风险。所以 RLHF 不是简单地:
奖励越高越好
而是:
在保持语言质量和稳定性的前提下,提高人类偏好奖励。
十一、InstructGPT 的完整训练流程
现在我们可以把 InstructGPT 的完整流程串起来。
预训练 GPT-3
↓
收集人工示范回答
↓
监督微调,得到 SFT 模型
↓
让 SFT 模型对 prompt 生成多个回答
↓
人工标注者对回答排序
↓
用排序数据训练奖励模型
↓
用奖励模型给回答打分
↓
使用 PPO 优化 SFT 模型
↓
得到 InstructGPT
这条流程可以进一步概括为:
先让模型模仿好答案
再让模型学会判断什么答案更好
最后让模型朝更受偏好的方向优化
也就是:
SFT:学会回答
RM:学会评分
PPO:优化回答
这就是 InstructGPT 的核心。
十二、InstructGPT 的实验结果说明了什么?
InstructGPT 最有代表性的结果之一是:
人类更偏好 InstructGPT 的输出,而不是原始 GPT-3 的输出。
尤其值得注意的是,论文中 1.3B 参数的 InstructGPT 输出,在人工评估中甚至优于 175B 参数 GPT-3 的输出。这个结果非常重要。
它说明:
模型更大,不一定更符合用户意图;
经过人类反馈对齐的小模型,可能比更大的 base model 更好用。
也就是说,参数量不是唯一关键。对于面向用户的助手模型来说,对齐训练非常重要。InstructGPT 还在一些方面表现出改进:
更遵循用户指令
回答更有帮助
真实性有所提升
有害输出减少
当然,InstructGPT 并不是完美模型。论文也指出,它仍然可能犯简单错误,也不能彻底解决所有真实性和安全问题。但它证明了:
使用人类反馈微调语言模型,是让模型更符合用户意图的有效方向。
十三、InstructGPT 和 GPT-3 的区别
现在我们可以把 GPT-3 和 InstructGPT 做一个对比。
| 对比维度 | GPT-3 | InstructGPT |
|---|---|---|
| 模型基础 | Decoder-only Transformer | 基于 GPT-3 微调 |
| 主要训练目标 | next-token prediction | SFT + RM + PPO/RLHF |
| 是否使用人类反馈 | 不作为核心训练信号 | 使用人类示范和偏好排序 |
| 是否更会遵循指令 | 不稳定 | 明显增强 |
| 输出风格 | 更像续写文本 | 更像回答用户问题 |
| 主要问题 | 可能不听指令、胡编、跑题 | 仍可能错误,但更符合用户偏好 |
可以用一句话概括:
GPT-3 是强大的语言模型,InstructGPT 是经过人类反馈对齐后的指令跟随模型。
这也是 base model 和 instruction-tuned model 的区别。
十四、InstructGPT 和 ChatGPT 的关系
InstructGPT 不是 ChatGPT,但它是 ChatGPT 的重要技术前身。InstructGPT 解决的是:
如何让语言模型更好地遵循用户指令?
ChatGPT 则进一步面向对话场景进行优化。可以简单理解为:
GPT-3:强大的 base language model
InstructGPT:更会遵循指令的模型
ChatGPT:面向多轮对话优化的助手模型
InstructGPT 的意义在于,它验证了一个关键路线:
预训练语言模型
↓
监督指令微调
↓
人类偏好建模
↓
RLHF 对齐
↓
更符合用户意图的助手模型
这条路线后来成为很多大语言模型对齐训练的重要基础。
十五、RLHF 的局限性
RLHF 很重要,但它也有局限。
1. 标注成本高
RLHF 需要大量人工示范和偏好排序数据。这需要训练标注者、设计标注规范、控制标注质量,成本很高。
2. 奖励模型可能不完美
奖励模型只是人类偏好的近似。如果奖励模型学错了偏好,语言模型就可能朝错误方向优化。例如奖励模型偏好冗长回答,模型就可能变得啰嗦。如果奖励模型偏好自信表达,模型可能更容易编造。
3. 可能出现 reward hacking
模型可能学会利用奖励模型漏洞,生成高奖励但低质量的回答。所以需要 KL 约束、人工评估和安全测试。
4. PPO 训练复杂
PPO 是强化学习算法,训练过程相对复杂,对超参数、稳定性和工程实现要求较高。这也是为什么后来出现了 DPO、RRHF、ORPO、KTO 等更简单的偏好优化方法。
5. 对齐不等于完全可靠
即使经过 RLHF,模型仍然可能:
犯事实错误
理解错用户意图
过度迎合用户
拒绝一些本可回答的问题
在复杂推理中出错
所以 RLHF 不是万能解法,而是对齐训练中的重要一步。
十六、InstructGPT 对大语言模型发展的影响
InstructGPT 的影响非常深远。
1. 它让大家意识到"会生成"不等于"好用"
GPT-3 很强,但不一定稳定遵循用户指令。InstructGPT 说明,模型需要通过对齐训练才能更好服务用户。
2. 它奠定了 SFT + RLHF 的经典流程
后来很多大语言模型都采用类似流程:
预训练
↓
监督指令微调
↓
偏好对齐
只不过具体方法可能不同。有些使用 PPO,有些使用 DPO,有些使用 RLAIF,有些结合拒绝采样和偏好优化。
3. 它推动了从 Base Model 到 Chat Model 的转变
在 InstructGPT 之前,很多模型更像语言续写器。在 InstructGPT 之后,模型开始更像助手。这也是大语言模型产品化的重要一步。
4. 它让"人类偏好"成为训练信号
传统语言模型主要学习文本分布。InstructGPT 进一步引入人类偏好,让模型优化方向从:
什么文本最可能出现?
转向:
什么回答更受人类欢迎?
这是大语言模型训练目标的重要变化。
十七、本文小结
本文精读了 InstructGPT 论文 Training language models to follow instructions with human feedback。
InstructGPT 要解决的问题是:
GPT-3 虽然具备强大的生成能力,但并不一定会稳定遵循用户指令。
原因在于,GPT-3 的训练目标是 next-token prediction,而不是直接优化"有帮助、真实、无害"的用户偏好。
InstructGPT 使用了经典的三步训练流程:
第一步:监督微调 SFT
第二步:训练奖励模型 RM
第三步:使用 PPO 进行 RLHF
SFT 阶段使用人工示范回答训练模型,让模型初步学会按照指令回答。其损失可以写成:
奖励模型阶段使用人工排序数据训练模型,让它学会判断哪个回答更符合人类偏好。常见 pairwise ranking loss 可以写成:
RLHF 阶段使用奖励模型作为反馈信号,通过 PPO 优化语言模型,同时加入 KL 惩罚,防止模型偏离 SFT 模型太远:
InstructGPT 的实验表明,经过人类反馈对齐后的模型更受人类偏好。甚至 1.3B 参数的 InstructGPT 输出,在人工评估中也优于 175B GPT-3 输出。
这说明:
模型规模很重要,
但对齐同样重要。
如果用一句话总结 InstructGPT:
InstructGPT 通过 SFT、奖励模型和 RLHF,把 GPT-3 这类"会续写"的语言模型,进一步训练成更能遵循用户指令、更符合人类偏好的助手模型。