0%
URL
TL;DR
- 大模型预训练后,在很多任务上已有非常强的能力,但输出的结果可能是不可信、有害或无帮助的。
- 本文提出
InstructGPT 算法和微调流程,旨在让大模型通过人类反馈的微调方式,在大量任务上对齐人类意图。
- 目标是做到
3H:
Algorithm

- 具体来说,
InstructGPT 微调分为三步:
- 根据采集的
SFT (Supervised FineTune) 数据集对 GPT-3 进行有监督的微调;
- 收集人工标注的 对比数据,训练奖励模型
RM (Reword Model);
- 使用
RM 作为强化学习的优化目标,利用 PPO 算法(Proximal Policy Optimization 最近策略优化)微调 SFT 模型。
数据集

1. SFT 数据集
SFT 数据一部分来自使用 OpenAI 的 PlayGround 的用户,另一部分来自 OpenAI 雇佣的 40 名标注工。
- 在这个数据集中,标注工的工作是根据内容自己编写指示,并且要求编写的指示满足下面三点:
- 简单任务:
labeler 给出任意一个简单的任务,同时要确保任务的多样性;
Few-shot 任务:labeler 给出一个指示,以及该指示的多个查询-响应对;
- 用户相关的:从接口中获取用例,然后让
labeler 根据这些用例编写指示。
2. RM 数据集
RM 数据集是对比数据类型,用于训练一个奖励模型(Reward Model)。
InstructGPT/ChatGPT 的做法是先让模型生成一批候选文本,让后通过 labeler 根据生成数据的质量对这些生成内容进行排序。
- 具体做法是对于每一个
Prompt,模型给出 K 个候选输出(4≤K≤9),然后将 K 个输出中挑选 2 个样本给 labeler,labeler 给出哪个更好,一个 Prompt 一共需要 labeler 标注 CK2 次,最终得到 K 个候选输出的排序结果。
3. PPO 数据集
InstructGPT 的 PPO 数据没有进行标注,它均来自 GPT-3 的 API 用户。
- 有不同用户提供的不同种类的生成任务,其中占比最高的包括生成任务(
45.6%),QA(12.4%),头脑风暴(11.2%),对话(8.4%)等。
微调过程
1. SFT 有监督微调过程
- 和
GPT-3 的预训练过程保持一致,只是监督信号从监督一段文本中下一个 token 变成监督模型对 prompt 输出和 ground truth 之间的差异。
2. Reward Model 训练过程
Reward Model 的输入是 Prompt + Response,输出是对应的奖励值,是个回归模型,其中 Response 是 RM 数据集中的排序的模型候选输出。
Reward Model 实际上是原始 LLM 模型将最后一层的分类层改成回归层,用来回归奖励值。
- 损失函数是:loss(θ)=−CK21E(x,yw,yl)∼D[log(σ(rθ(x,yw),rθ(x,yl)))],使用对比学习的方式训练。
- 其中:
- rθ 表示参数为 θ 的
Reward Model
x 表示 Prompt
- yw ,yl 分别表示对
Prompt x,labeler 喜欢和不喜欢的一对 Response
3. 使用近端策略优化强化学习算法(PPO) + Reward Model 继续优化 SFT 模型
InstructGPT/ChatGPT 的分析和计划
1. 收益
- 效果比
GPT-3 更加真实
- 在模型的无害性上比
GPT-3 效果要有些许提升
- 具有很强的
Coding 能力
2. 损失
- 会降低模型在通用
NLP 任务上的效果
- 有时候会给出一些荒谬的输出
- 模型对指示非常敏感
- 模型对简单概念的过分解读
- 对有害的指示可能会输出有害的答复
3. 未来计划
- 人工标注的降本增效:将人类表现和模型表现有机和巧妙的结合起来是非常重要的
- 模型对指示的泛化/纠错等能力:这不仅可以让模型能够拥有更广泛的应用场景,还可以让模型变得更“智能”
- 避免通用任务性能下降:需要方案来让生成结果的
3H 和通用 NLP 任务的性能达到平衡
Thought
- 在
ChatGPT 爆发之前,Open-AI 多年来一直在默默研究这个领域,包括 GPT 系列、RLHF、PPO 等,这些东西的有机结合就成了 InstructGPT,放大就变成了 ChatGPT(InstructGPT 是基于 GPT-3 对齐的,ChatGPT 是基于 GPT-3.5 对齐的)
- 想在一个领域做到断崖式的领先,小聪明是没用的,需要长期积累 + 修炼内功