InstructGPT:通过人类反馈训练语言模型遵循指令
InstructGPT:通过人类反馈训练语言模型遵循指令
在2022年3月,OpenAI发布了一篇关于通过人类反馈训练语言模型以遵循指令的论文。研究发现,单纯增加语言模型的规模并不一定能使其更好地理解用户意图。例如,大型语言模型可能会生成不真实、有害或对用户无帮助的内容。为了解决这一问题,研究人员提出了一种通过人工反馈进行微调的方法,使语言模型能够更好地与用户意图保持一致。这种方法训练出的模型被称为InstructGPT。
InstructGPT的训练方法
InstructGPT的训练过程遵循了Ziegler(2019)和Stiennon(2020)的方法,主要应用于文本生成和摘要领域。训练过程包括三个主要步骤:
- 有监督微调(SFT):从预训练的语言模型开始,使用标注员编写的提示和通过OpenAI API提交的提示进行微调。
- 奖励模型(RM)训练:使用标注员对模型输出的排名数据集训练奖励模型。
- 强化学习(RLHF):在奖励模型上使用近端策略优化(PPO)进行进一步微调。
数据集构建
提示数据集:主要由提交给OpenAI API的文本提示组成,特别是那些在Playground界面上使用早期版本的InstructGPT模型的提示。为了确保数据的多样性和避免敏感信息,采取了以下措施:
删除重复提示
限制每个用户ID的提示数量
根据用户ID创建训练、验证和测试的数据拆分
过滤包含个人身份信息(PII)的提示
标注员编写提示:要求标注员编写三种类型的提示:
简单提示:任意任务,确保多样性
少量样本提示:包含多个查询/响应对
基于用户提示:与OpenAI API候补名单申请中的用例相对应
数据集组成
- SFT数据集:包含约13,000个训练提示
- RM数据集:包含33,000个训练提示
- PPO数据集:包含31,000个训练提示
训练任务来源
训练任务来自两个来源:
- 标注员编写的提示数据集
- 通过API提交给早期InstructGPT模型的提示数据集
这些提示涵盖了生成、问答、对话、总结等多种自然语言任务,其中超过96%是英语,但模型也能处理其他语言指令和编码任务。
标注员筛选
为了确保标注质量,采取了以下措施:
- 在Upwork和ScaleAI上聘请约40名合同工
- 设计筛选测试以评估标注员在敏感话题处理方面的能力
- 标注员之间的一致性率达到72.6±1.5%
模型训练技术
- 监督微调(SFT):在标签演示上对GPT-3进行微调,训练16个epochs,使用余弦学习率衰减和0.2残差dropout。
- 奖励建模(RM):从移除最终非嵌入层的SFT模型开始,训练一个接收提示和响应并输出标量奖励的模型。
- 强化学习(RL):使用PPO在环境中微调SFT模型,添加KL惩罚以防止过度优化。
基线比较
将PPO模型的性能与SFT模型和GPT-3进行比较,同时使用FLAN和T0数据集进行额外的对比测试。
模型评估
模型的"对齐"程度通过以下指标进行评估:
- 有用性:模型是否能正确理解并执行指令
- 真实性:模型生成的内容是否真实
- 安全性:模型是否会产生有害输出
评估方法包括:
- 人工偏好评分
- 在封闭域任务上的表现
- 在TruthfulQA数据集上的表现
- 在RealToxicityPrompts和CrowS-Pairs等数据集上的基准测试
结论
尽管InstructGPT仍会犯一些简单的错误,但通过人工反馈进行微调是使语言模型与人类意图保持一致的一个有希望的方向。研究发现,即使参数少100倍,1.3B参数的InstructGPT模型在用户偏好方面的表现也优于175B参数的GPT-3。