论文:Training language models to follow instructions with human feedback
作者:Long Ouyang et al.
关键词:InstructGPT、RLHF、SFT、Reward Model、PPO、Alignment、大模型对齐
推荐阅读顺序:Transformer → BERT → GPT-3 → InstructGPT


前言

在看完 GPT-3 论文之后,一个非常自然的问题是:

GPT-3 已经这么强了,为什么它还不是 ChatGPT?

GPT-3 证明了大模型在参数规模足够大之后,可以通过 prompt 和 few-shot examples 完成很多任务。但是 GPT-3 的核心训练目标依然是:

给定前文,预测下一个 token。

也就是说,GPT-3 本质上还是一个强大的“文本续写器”。

但真实用户想要的并不是一个单纯会续写文本的模型,而是一个能够:

  • 听懂指令;
  • 按要求完成任务;
  • 尽量不胡说;
  • 回答有帮助;
  • 在危险请求上懂得拒绝;
  • 输出风格符合用户需求;

的助手模型。

这就是 InstructGPT 这篇论文要解决的问题。

如果说 GPT-3 代表了大模型的 能力涌现,那么 InstructGPT 代表的是大模型开始走向 人类偏好对齐


一、这篇论文解决了什么问题?

论文开头有一个非常重要的观点:

Making language models bigger does not inherently make them better at following a user’s intent.

翻译过来就是:

让语言模型变得更大,并不会天然让它更好地遵循用户意图。

这句话非常关键。

GPT-3 的参数量很大,语言能力很强,但它并不一定“听话”。

比如用户输入:

请用小学生能听懂的话解释什么是强化学习。

普通 GPT-3 可能会生成一个看起来很专业的解释,但不一定适合小学生理解。
因为 GPT-3 的目标不是“帮助用户理解强化学习”,而是“生成一个在语料分布中合理的下一个文本”。

这就产生了一个核心矛盾:

语言建模目标 ≠ 用户真实意图

GPT-3 学到的是互联网文本分布,而用户想要的是符合当前需求的答案。

因此,InstructGPT 的核心目标就是:

让语言模型的输出更符合人类真实偏好和用户指令。


二、InstructGPT 的核心方法:SFT + RM + PPO

这篇论文最核心的训练流程可以概括成三步:

Step 1:SFT
人类写示范答案,模型模仿人类答案

Step 2:Reward Model
人类给多个模型回答排序,训练奖励模型

Step 3:PPO / RLHF
模型生成回答,奖励模型打分,PPO 根据分数优化语言模型

也可以用一句话理解:

SFT:老师示范怎么答
RM:训练一个自动裁判
PPO:学生根据裁判打分不断改进

这三步组成了 InstructGPT 的核心训练范式。


三、什么是 SFT?

SFT 全称是:

Supervised Fine-Tuning

中文叫:

有监督微调

Supervised 表示有监督,Fine-Tuning 表示微调。

所以 SFT 的意思就是:

用人工标注的高质量答案,对 GPT-3 继续做监督学习训练。

它的数据形式是:

输入 x:用户 prompt
输出 y:人类标注员写的理想回答

例如:

Prompt:
请用小学生能听懂的话解释什么是强化学习。

Human demonstration:
强化学习就像训练小狗。如果小狗做对了动作,我们就奖励它;如果做错了,就不给奖励。慢慢地,小狗就知道什么行为是好的。

SFT 的训练目标是让模型在看到 prompt 后,更大概率生成类似人类示范的回答。

可以写成:

maximize log P(y | x)

也就是:

给定用户指令 x,让模型尽可能生成高质量答案 y。

SFT 的作用是让模型初步学会:

用户给我一个指令时,我应该认真完成这个指令,而不是随便续写。

但是,SFT 也有一个问题:

人类写标准答案成本很高,而且一个 prompt 的好答案往往不止一个。

比如用户问:

解释一下 Transformer。

好的回答可以从 self-attention 讲,也可以从 encoder-decoder 讲,也可以用生活类比讲。
这些答案都可能是好的,很难只指定一个唯一标准答案。

于是就有了第二步:奖励模型。


四、什么是 Reward Model?

Reward Model,简称 RM,中文叫:

奖励模型

它不是用来直接回答用户的,而是用来给回答打分的。

它的输入是:

prompt + response

它的输出是:

一个标量奖励分数

例如:

Prompt:
请用简单语言解释 BERT 的 MLM。

回答 A:
BERT 是一种语言模型。
RM 分数:2.1

回答 B:
MLM 是 Masked Language Modeling,训练时会随机遮住一些 token,让模型根据左右上下文预测被遮住的 token。
RM 分数:8.4

奖励模型要学会的是:

什么样的回答更符合人类偏好。


五、奖励模型如何训练?

训练奖励模型不是让人类给每个回答打具体分数,而是让人类做排序。

比如同一个 prompt:

请用小学生能听懂的话解释强化学习。

模型生成四个回答:

A:强化学习是一种机器学习方法。
B:强化学习就像训练小狗,做对了给奖励,做错了不给奖励。
C:强化学习是马尔可夫决策过程中的策略优化问题。
D:强化学习就是让机器自己变聪明。

人类标注员可能排序为:

B > A > D > C

因为用户要求“小学生能听懂”,所以 B 最符合要求。

这个排序会被拆成多个偏好对:

B 优于 A
B 优于 D
B 优于 C
A 优于 D
A 优于 C
D 优于 C

奖励模型要学习:

r(prompt, B) > r(prompt, A)
r(prompt, A) > r(prompt, D)
r(prompt, D) > r(prompt, C)

也就是说:

人类更喜欢的回答,奖励模型应该给更高分。


六、RM Loss 详解

论文中的奖励模型 loss 大致是:

L(θ)=−E[logσ(rθ(x,yw)−rθ(x,yl))] L(θ) = - E [ log σ( rθ(x, yw) - rθ(x, yl) ) ] L(θ)=E[logσ(rθ(x,yw)rθ(x,yl))]
其中:

x:prompt
yw:winner,人类更喜欢的回答
yl:loser,人类不那么喜欢的回答
rθ(x, y):奖励模型给回答 y 的分数
σ:sigmoid 函数
log:取对数
E:对所有训练样本求平均

这个公式看起来复杂,但核心非常简单:

让 winner 的分数高于 loser。


6.1 sigmoid 是干什么的?

sigmoid 函数是:

σ(z)=1/(1+e−z) σ(z) = 1 / (1 + e^{-z}) σ(z)=1/(1+ez)

它的作用是:

把任意实数变成 0 到 1 之间的概率。

在 RM loss 中,sigmoid 的输入是:

rθ(x, yw) - rθ(x, yl)

也就是:

好回答分数 - 差回答分数

如果奖励模型认为好回答分数更高:

r(yw) = 8
r(yl) = 2
r(yw) - r(yl) = 6

那么:

σ(6) ≈ 0.997

表示模型非常确信:

yw 比 yl 好

如果奖励模型打反了:

r(yw) = 3
r(yl) = 5
r(yw) - r(yl) = -2

那么:

σ(-2) ≈ 0.119

表示模型认为 winner 胜出的概率很低,这显然和人类排序冲突。

所以 sigmoid 的作用是:

把两个回答的分数差,转成 winner 胜过 loser 的概率。

6.2 为什么要加 log?

因为训练目标本质上是最大似然。

人类已经告诉我们:

yw 应该优于 yl

所以模型应该让这个事件的概率尽可能大:

P(yw > yl) = σ(r(yw) - r(yl))

我们希望最大化:

log P(yw > yl)

但深度学习里通常写成最小化 loss,所以加负号:

- log σ(r(yw) - r(yl))

log 的另一个直觉作用是:

对自信但错误的判断惩罚很大。

比如:

P = 0.9
-log(P) ≈ 0.105

loss 很小。

如果:

P = 0.01
-log(P) ≈ 4.605

loss 很大。

也就是说,如果奖励模型非常自信地把人类喜欢的回答判成差回答,就会受到很大惩罚。


6.3 外面的 E 是什么?

E 是 expectation,期望。

在这里可以直接理解为:

对所有训练样本求平均

实际训练时,就是对一个 batch 里的偏好对计算平均 loss。

比如 batch 中有 64 条偏好对:

loss = 64 条样本 loss 的平均值

然后反向传播更新奖励模型参数。

所以 RM loss 本质上是:

pairwise ranking loss,成对排序损失。

它不是让奖励模型学习绝对分数,而是让它学习:

两个回答之间,人类更喜欢哪一个。

七、排序之后要做什么?

排序之后不是直接拿第一名回答继续训练语言模型,而是先训练奖励模型。

完整流程是:

人类排序
↓
拆成偏好对
↓
训练 Reward Model
↓
Reward Model 学会自动给回答打分
↓
PPO 阶段用 Reward Model 指导语言模型优化

为什么不直接拿第一名做 SFT?

因为排序信息比单个第一名更丰富。

比如:

B > A > D > C

如果只拿 B 做训练,A、D、C 之间的相对质量信息就丢失了。

但训练奖励模型时,可以学到:

B 比 A 好
A 比 D 好
D 比 C 好

这样奖励模型能更细致地学习人类偏好。


八、什么是 PPO?

PPO 全称是:

Proximal Policy Optimization

中文叫:

近端策略优化

它是一种强化学习算法。

在 InstructGPT 中,PPO 的作用是:

根据奖励模型给出的分数,继续优化语言模型,让它更倾向于生成高分回答。

到了 PPO 阶段,系统里有两个重要模型:

1. 当前语言模型,也就是要被优化的 policy
2. 奖励模型,也就是自动裁判

训练流程是:

给语言模型一个 prompt
↓
语言模型生成回答
↓
奖励模型给回答打分
↓
PPO 根据分数更新语言模型参数

九、已经知道奖励分数了,然后怎么更新参数?

这是 RLHF 最关键的问题。

普通监督学习中,我们有标准答案,可以直接算交叉熵 loss。

但在 PPO 中,没有标准答案,只有奖励分数。

语言模型生成文本是一个逐 token 采样过程:

prompt
↓
生成 token1
↓
生成 token2
↓
生成 token3
↓
……
↓
得到完整回答
↓
Reward Model 给完整回答打分

PPO 要做的事情是:

如果这个回答得分高,就提高生成这些 token 的概率;
如果这个回答得分低,就降低生成这些 token 的概率。

语言模型可以看成一个策略:

πθ(token | 当前上下文)

也就是:

在当前上下文下,选择下一个 token 的概率分布。

如果某个回答最终得分很高,说明这条生成路径比较好,那么 PPO 就会提高这条路径中 token 的概率。

如果某个回答最终得分很低,说明这条生成路径不好,那么 PPO 就会降低这些 token 的概率。

更精确一点,PPO 会使用 advantage:

Advantage = 实际奖励 - 预期奖励

如果 advantage > 0:

这个回答比预期好,提高生成概率。

如果 advantage < 0:

这个回答比预期差,降低生成概率。

所以 PPO 的直觉是:

高分回答:以后多这么答
低分回答:以后少这么答

十、为什么不用普通 policy gradient,而要用 PPO?

因为普通 policy gradient 的更新可能太猛。

语言模型很大,如果一次更新过大,可能会出现:

模型突然偏离原来的语言能力
生成变得模板化
为了骗奖励模型而输出奇怪内容
事实能力下降
回答风格崩坏

所以 PPO 的核心思想是:

每次只允许模型小步更新,不要一步改太多。

PPO 里会计算一个概率比值:

ratio = 新策略生成某个 token 的概率 / 旧策略生成某个 token 的概率

如果 ratio 很大,说明新模型把这个 token 的概率提高太多。
如果 ratio 很小,说明新模型把这个 token 的概率降低太多。

PPO 会对这个 ratio 做 clipping,也就是限制它不要离 1 太远。

直观来说:

如果回答好:
可以提高它的概率,但别提高太猛。

如果回答差:
可以降低它的概率,但别降低太猛。

这就是 PPO 中 Proximal 的含义:

更新要接近旧策略,不要突然跳太远。

十一、什么是 KL penalty?

PPO 训练还有一个非常重要的约束:

KL penalty

它的作用是:

防止当前 PPO 模型偏离 SFT 参考模型太远。

最终奖励可以理解为:

final reward = RM score - β × KL penalty

也就是说:

奖励模型觉得回答好,加分;
但如果当前模型偏离原 SFT 模型太远,扣分。

为什么要这样做?

因为奖励模型不是完美的人类,只是人类偏好的近似器。
如果没有 KL penalty,语言模型可能学会钻奖励模型的漏洞。

比如奖励模型偏好:

结构清晰
语气自信
回答详细
分点明确

模型可能学成:

不管用户问什么,都输出又长又模板化的分点回答。

这可能骗过奖励模型,但真实用户不一定喜欢。

KL penalty 就是在提醒模型:

你可以变得更符合人类偏好,
但不要为了讨好奖励模型,把自己训歪。

11.1 KL penalty 如何发挥作用?

假设一个回答:

RM score = 9
KL penalty = 5
β = 1

最终奖励:

final reward = 9 - 5 = 4

另一个回答:

RM score = 8
KL penalty = 1
β = 1

最终奖励:

final reward = 8 - 1 = 7

虽然第一个回答 RM 分数更高,但它偏离 SFT 太远,所以最终奖励反而更低。

这样 PPO 就会倾向第二种回答。

所以 KL penalty 的实际效果是:

不只看奖励模型喜不喜欢,
还看模型有没有偏离原来的语言能力太远。

十二、PPO、KL penalty 和 PPO clip 的区别

这几个概念容易混在一起,可以这样区分:

机制 作用
Reward Model 判断回答好不好
PPO 根据奖励更新语言模型
PPO clip 防止单次参数更新太大
KL penalty 防止整体模型行为偏离 SFT 太远

简单记:

PPO clip:每一步别走太大。
KL penalty:整体别走太偏。

十三、PPO-ptx 是什么?

论文中还有一个重要模型叫:

PPO-ptx

它的意思是:

PPO + pretraining mix

也就是在 PPO 训练时,额外混入一部分预训练语言建模目标。

为什么要这样做?

因为 RLHF 虽然可以让模型更听话,但也可能损伤模型原本的通用能力。

这被称为:

alignment tax,对齐税。

也就是说:

为了让模型更符合人类偏好,可能牺牲一部分原本在 NLP benchmark 上的能力。

PPO-ptx 的作用是:

既要模型更符合人类偏好,
又要尽量保留原始 GPT-3 的通用语言能力。

十四、实验结果:InstructGPT 到底有没有用?

这篇论文最震撼的实验结论是:

1.3B 参数的 InstructGPT,在人类偏好评估中,输出比 175B GPT-3 更受欢迎。

这说明什么?

说明模型效果不只取决于参数量。

GPT-3 虽然大,但它的目标仍然是 next token prediction。
InstructGPT 虽然小很多,但它通过人类示范、人类排序和 PPO 优化,训练目标更接近真实用户需求。

所以在真实用户 prompt 上,人类更喜欢 InstructGPT 的回答。

这带来一个非常重要的结论:

模型更大,不一定更好用;
训练目标更贴近用户需求,模型才更像助手。

十五、真实性和安全性结果

论文还评估了模型的真实性和毒性输出。

整体结论是:

InstructGPT 比 GPT-3 更真实一些,也更少生成有毒内容。

但这里要注意:

RLHF 不能彻底解决幻觉。

原因是 RLHF 优化的是人类偏好,不是真实世界事实本身。

如果模型底层知识错误,或者奖励模型没能识别事实错误,模型仍然可能胡说。

所以更准确地说:

RLHF 可以降低幻觉倾向,
但不能从根本上保证事实正确。

十六、InstructGPT 的局限性

InstructGPT 虽然非常重要,但它不是万能的。

主要局限有几个。


16.1 仍然会胡说

模型经过 RLHF 后更符合人类偏好,但不代表它获得了事实验证能力。

它仍然可能:

编造事实
犯简单错误
过度自信
给出看似合理但错误的解释

因为 RLHF 主要调整的是“怎么回答”,不是从根本上改变模型“知道什么”。


16.2 Labeler 偏好不等于所有用户偏好

奖励模型学习的是标注员的偏好。

但不同用户的偏好可能不同。

比如同一个问题:

解释一下 PPO。

不同人需要不同答案:

初学者:希望少公式,多类比。
研究生:希望有公式和推导。
工程师:希望有代码实现。
博客作者:希望结构清晰,适合整理成文章。

所以 InstructGPT 的对齐更像是“总体偏好对齐”,不是“完全个性化对齐”。


16.3 Reward Model 可能被过度优化

奖励模型只是人类偏好的近似器,不是真正的人类。

如果 PPO 过度优化 RM,模型可能学会:

讨好奖励模型,而不是真正提升用户体验。

比如模型可能变得:

过度分点
过度解释
过度谨慎
回答模板化

这就是 reward overoptimization 的风险。


16.4 遵循指令和安全之间存在冲突

InstructGPT 的目标是 follow user intent。

但用户意图不一定总是安全的。

如果用户要求模型生成危险内容,那么模型不能只追求“听话”,还要学会拒绝。

所以现代助手模型不仅要 helpful,还要 honest 和 harmless。


十七、和 GPT-3、FLAN、T0、WebGPT 的关系

可以把这几篇论文放在一条线上理解。


17.1 GPT-3

GPT-3 证明:

大规模自回归语言模型可以通过 prompt 展现 few-shot 能力。

关键词是:

scale
few-shot learning
next-token prediction
prompting

但 GPT-3 没有真正解决指令遵循和人类偏好对齐问题。


17.2 FLAN / T0

FLAN 和 T0 主要做的是 instruction tuning。

它们把很多 NLP 任务改写成自然语言指令,让模型学习:

根据指令完成任务。

它们更关注 zero-shot task generalization。


17.3 WebGPT

WebGPT 让模型使用浏览器搜索网页,并通过人类反馈提高开放问答的事实性。

它更关注:

搜索
引用
开放问答
事实性

17.4 InstructGPT

InstructGPT 更关注:

真实用户 prompt
人类示范
人类排序
奖励模型
PPO
人类偏好对齐

所以它可以看作从 GPT-3 走向 ChatGPT 的关键桥梁。


十八、这篇论文真正的创新点

我认为 InstructGPT 的创新点不在模型结构,而在训练范式。

它没有提出新的 Transformer 架构,也没有单纯堆更大的参数量。

它真正重要的地方在于:

把人类偏好引入大语言模型训练流程。

具体来说,它提出了一套非常经典的流程:

预训练语言模型
↓
SFT 指令微调
↓
训练 Reward Model
↓
PPO 强化学习优化
↓
得到更符合人类偏好的助手模型

这套流程后来成为很多大模型对齐工作的基础。


十九、这篇论文对 ChatGPT 的意义

ChatGPT 类模型不是裸 GPT-3。

它背后至少包含:

大规模预训练
指令微调
人类反馈对齐
安全数据
对话数据
拒绝策略
系统工程优化

InstructGPT 这篇论文展示了其中非常关键的一环:

如何用人类反馈让 GPT-3 更像一个助手。

所以如果说 GPT-3 是大语言模型能力的代表,那么 InstructGPT 就是大语言模型助手化的代表。

它回答了一个关键问题:

模型已经会生成文本了,怎样让它更符合用户想要的行为?

答案就是:

SFT + Reward Model + PPO / RLHF

二十、总结

最后用几句话总结这篇论文。

InstructGPT 的核心问题是:

GPT-3 的 next-token prediction 目标和用户真实意图不一致。

为了解决这个问题,作者提出:

先用人类示范答案做 SFT,
再用人类排序训练 Reward Model,
最后用 PPO 根据奖励模型优化语言模型。

SFT 让模型初步学会听指令。
Reward Model 把人类偏好转成可计算的奖励分数。
PPO 让模型根据奖励分数继续优化。
KL penalty 防止模型为了讨好奖励模型而偏离 SFT 太远。
PPO-ptx 则进一步缓解对齐带来的通用能力退化。

这篇论文最重要的结论是:

模型好不好用,不只取决于参数量,还取决于训练目标是否贴近用户需求。

1.3B InstructGPT 能在人类偏好上超过 175B GPT-3,正说明了人类反馈对齐的价值。

当然,InstructGPT 也不是终点。
它仍然会胡说,仍然可能受到标注员偏好影响,奖励模型也可能被过度优化。
但它无疑是从 GPT-3 走向 ChatGPT 的关键一步。


个人理解

在我看来,InstructGPT 最值得学习的地方不是某个公式,而是它对“大模型训练目标”的重新思考。

GPT-3 让我们看到:

大规模预训练可以带来强大的能力。

InstructGPT 则进一步说明:

能力强不等于行为好。

一个模型可以很会生成文本,但不一定会按照用户想要的方式回答。
因此,大模型的发展不能只追求参数规模,还必须解决:

模型到底在优化什么?
模型输出到底服务于谁?
模型行为是否符合人类真实需求?

这也是为什么 RLHF、DPO、RLAIF、Constitutional AI 等对齐方法后来会成为大模型研究中的重要方向。

如果你已经读完 GPT-3,那么 InstructGPT 就是下一篇必须读的论文。
因为它补上了从“语言模型”到“AI 助手”之间最关键的一块拼图。


参考论文

  1. Long Ouyang et al., Training language models to follow instructions with human feedback, 2022.
  2. Brown et al., Language Models are Few-Shot Learners, 2020.
  3. Wei et al., Finetuned Language Models Are Zero-Shot Learners, 2021.
  4. Sanh et al., Multitask Prompted Training Enables Zero-Shot Task Generalization, 2021.
  5. Nakano et al., WebGPT: Browser-assisted question-answering with human feedback, 2021.
Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐