InstructGPT:语言模型的人类反馈指令对齐

news2024/11/23 8:40:35

论文标题:Training language models to follow instructions with human feedback
论文链接:https://arxiv.org/abs/2203.02155
论文来源:OpenAI

一、概述

大型语言模型(Large language models,LLMs)可以通过被prompted来执行一系列NLP任务,这通常以给出一些任务相关的样本的方式来完成。然而LLMs经常会展现出一些非预期的行为。这些行为包括编造事实、生成有偏见或有毒的文本,或者简单地不按照用户的指令进行操作。这是因为很多最近的LLMs使用的语言建模目标(预测来自互联网网页的下一个token)与“有帮助且安全地按照用户的指令行事”的目标是不同的。因此,我们可以说语言建模目标是未对齐的(misaligned)的。避免这些非预期行为对于那些部署并用于数百种应用的语言模型来说尤其重要。

我们通过训练这些语言模型以便它们能根据用户的意图进行行动,以此来对语言模型进行对齐。这包括显式的意图,如按照指令行事,以及隐式的意图,如保持真实,不展现偏见、有毒或者其他有害的行为。使用Askell等人(2021)的概念来说就是我们希望语言模型能够helpful(帮助用户解决他们的任务)、honest(不应该编造信息或误导用户)并且harmless(不应该对人类或环境造成物理、心理或社会伤害)。

我们主要关注对齐LLMs的微调方法。具体来说,我们使用人类反馈的强化学习(Reinforcement Learning from Human Feedback,简称RLHF)来微调GPT-3,使其遵循一大类的书面指令。这项技术使用人类的偏好作为奖励信号来微调我们的模型。我们首先聘请一支由40名承包商组成的标注者团队来对我们的数据进行标注(基于他们在筛选测试中的表现)。我们收集了一份由人编写的,用于描述在OpenAI API提交的(主要是英文)提示以及一些标注者编写的提示上期望的输出行为的演示数据集,并使用此数据集来训练我们的监督学习baseline。接下来,我们收集了一份包含了我们的模型在更大的API 提示集上的输出的,由人类标记的比较数据集(就是用模型得出每个提示的多个响应,然后由人工为这些响应的好坏程度排序)。然后,我们在这个数据集上训练一个奖励模型(Reward Model,RM),以预测我们的标注者更喜欢哪个模型输出。最后,我们将这个RM作为奖励函数,并使用PPO(proximal policy optimization)算法来微调我们的监督学习baseline以最大化这个奖励。下图说明了这整个流程。这个过程将GPT-3的行为与特定人群(主要是我们的标注者和研究员)的明确偏好对齐,而不是任何更广泛的“人类价值观”,我们将在下文进一步讨论这个问题。我们将最终得到的模型称为InstructGPT。

aac930904e347ae489821f1591973a0e.png
RLHF

我们主要通过一些保留标注者(没有参与构建训练数据)来评估模型,同时也在一些自动评估的公共NLP数据集上进行了评估。InstructGPT主要包括三种不同的size(1.3B, 6B和175B参数),所有模型都采用GPT3架构。本文的一些主要结论如下: 

①与GPT-3的输出相比,标注者明显更喜欢InstructGPT的输出。 

②与GPT-3相比,InstructGPT模型的真实性(truthfulness)有所提高。 

③与GPT-3相比,InstructGPT在毒性方面略有改善,但在偏见方面并没有如此。 

④我们可以通过修改我们的RLHF微调过程来最小化公共NLP数据集上的性能下降。 

⑤在面对没有提供训练数据的保留标注者评估时,InstructGPT可以很好地泛化。 

⑥公共NLP数据集不能反映我们的语言模型是如何被使用的。 

⑦InstructGPT模型对RLHF微调分布之外的指令显示出有前景的泛化能力。 

⑧InstructGPT仍然会犯简单的错误。

总的来说,我们的研究结果表明,使用人类偏好对大型语言模型进行微调可以显著改善它们在各种任务上的行为,尽管要提高它们的安全性和可靠性还有很多工作要做。

二、方法和实验细节

  1. 概览

InstructGPT的方法流程事先需要一个预训练语言模型、一个我们希望生成对齐输出的提示分布以及一个经过培训的人类标注者团队。接着我们采用以下三个步骤(也就是上面流程图的步骤): 

①收集演示数据并训练一个监督策略。作者的团队会为输入的提示分布提供期望行为的演示。然后,他们使用监督学习方法在这些数据上对预训练的GPT-3模型进行微调。 

②收集比较数据并训练奖励模型。作者收集了一组模型输出之间的比较数据,标注者会指示他们更喜欢给定输入的哪个输出。然后,作者训练一个奖励模型(Reward Model, RM)来预测人类更喜欢的输出。 

③使用PPO算法根据奖励模型优化策略。作者将奖励模型的输出作为一个标量奖励,并使用PPO算法对监督策略进行微调以最大化这个奖励。 

第二步和第三步可以连续迭代;作者会在当前最佳策略上收集更多的比较数据,然后用这些数据训练一个新的奖励模型和策略。在实践中,大部分比较数据来自于监督策略,但也会有一些来自于PPO策略。

  1. 数据集

我们的提示数据集主要由提交到OpenAI API的文本提示组成,特别是使用较早版本的InstructGPT模型(通过对我们的演示数据子集进行监督学习训练)在Playground界面上使用的提示。Playground的用户被告知他们的数据可能会通过定期通知在使用InstructGPT模型时用于进一步训练其他模型。在本文中,我们没有使用来自API生产环境中的客户数据。我们通过检查具有共同长前缀的提示来启发式地去重,并将每个用户ID的提示数量限制为200个。我们还根据用户ID创建了训练、验证和测试集,以便验证集和测试集不包含训练集中的用户数据。为了避免模型学习到可能包含敏感客户详细信息的内容,我们对训练集中的所有提示进行个人可识别信息(personally identifiable information, PII)的过滤。

为了训练第一批InstructGPT模型,我们要求标注者自己编写提示。这是因为我们需要一种初始的类似指令的提示来源来启动这个过程,而这类提示通常不会被提交到API上的常规GPT-3模型。我们要求标注者编写三种类型的提示: 

①普通提示:我们只是要求标注者提出任意的任务,同时确保任务具有足够的多样性。 

②少样本提示:我们要求标注者提出一条指令,并为该指令提供多个查询/响应对。 

③用户相关提示:我们在OpenAI API的等待列表申请中列出了一些使用案例。我们要求标注者提供与这些使用案例相对应的提示。 

从这些提示中,我们生成了三个不同的数据集,用于我们的微调过程: 

①SFT数据集:其中包含标注者演示用来训练SFT模型的示例数据。 

②RM数据集:其中包含标注者对模型输出进行排名的数据,用于训练奖励模型(RM)。 

③PPO数据集:不包含任何人工标签,仅作为RLHF微调的输入。该数据集仅来自API。 

我们的SFT数据集包含约13,000个训练提示(来自API和标注者编写),RM数据集有33,000个训练提示(来自API和标注者编写),PPO数据集有31,000个训练提示(仅来自API)。下面的表6中提供了更多数据集大小的详细信息。

为了了解我们数据集的组成,下表显示了API提示的用例类别分布(特别是RM数据集)。大多数用例是生成型的,而不是分类或问答型。

d4e61bfcae4f50118a9ac94b5592c6da.jpeg
提示类别

下表显示了一些说明性的提示(由研究人员编写,模仿提交给InstructGPT模型的提示类型):

3a8866cf51960749485758c21b0e131a.jpeg
提示用例
  1. 任务

我们的训练任务来自两个来源:(1)由我们的标注者编写的提示数据集,和(2)提交到我们API上早期InstructGPT模型的提示数据集(见下表)。这些提示非常多样化,包括生成、问答、对话、摘要、抽取和其他自然语言任务(见上面表1)。我们的数据集超过96%是英文,但在实验中,我们还测试了模型对其他语言指令的响应能力以及完成编程任务的能力。

ba913c7f80919ac52d580e9e4a14962f.jpeg
数据规模

对于每个自然语言提示,任务通常是通过自然语言指令直接指定的(例如,“写一个关于一只聪明的青蛙的故事”),但也可以通过少样本示例间接指定(例如,给出两个青蛙故事的例子,并提示模型生成一个新的故事),或通过隐含的延续(例如,提供一个关于青蛙的故事的开头)。在每种情况下,我们要求标注者尽力推断提示的用户的意图,并要求他们跳过任务非常不清楚的输入。此外,我们的标注者还考虑到隐含的意图,如响应的真实性以及可能有偏见或有害语言的输出,他们会根据我们提供的指示和他们的最佳判断进行标注。

  1. 人类数据收集

为了生成我们的演示数据和比较数据,并进行主要评估,我们在Upwork和ScaleAI上雇佣了大约40名承包商。与早期关于摘要任务收集人类偏好数据的工作相比,我们的输入涵盖了更广泛的任务范围,并且偶尔可能涉及有争议和敏感的话题。我们的目标是选择一组对不同人群的偏好敏感,并且擅长识别潜在有害输出的标注者。因此,我们进行了一项筛选测试,旨在衡量标注者在这些方面的表现。

在训练和评估过程中,我们的对齐标准可能会发生冲突:例如,当用户请求潜在有害的响应时。在训练过程中,我们优先考虑对用户的有益性(不这样做需要做出一些困难的设计决策,我们将其留给未来的工作。然而,在我们的最终评估中,我们要求标注者优先考虑真实性和无害性(因为这是我们真正关心的)。

我们在项目过程中与标注者密切合作。我们有一个入职过程,对标注者进行项目培训,为每个任务编写详细的说明,并在共享聊天室中回答标注者的问题。

作为一个初步研究,以了解我们的模型在其他标注者偏好方面的泛化能力,我们雇佣了一组独立的标注者,他们不参与任何训练数据的生成。这些标注者来自同样的供应商,但没有经过筛选测试。尽管任务是复杂的,我们发现标注者之间的一致性相当高:训练标注者之间的一致性为72.6% ± 1.5%,而对于保留标注者,这个数字为77.3% ± 1.3%。作为对比,Stiennon等人(2020年)在摘要工作中研究者之间的一致性为73% ± 4%。

  1. 模型

我们首先使用GPT-3预训练语言模型作为起点。这些模型是在广泛的互联网数据分布上进行训练的,并且适用于各种下游任务,但其行为特征尚未完全明确。从这些模型开始,我们使用三种不同的技术训练模型:

  • 监督微调(Supervised fine-tuning, SFT)。

我们使用监督学习方法,对GPT-3模型进行我们的标注者演示数据的微调训练。我们进行了16个epoch的训练,使用余弦学习率衰减,并设置残差dropout为0.2。我们根据验证集上的RM得分进行最终的SFT模型选择。与Wu等人(2021年)类似,我们发现我们的SFT模型在经过1个epoch的验证损失后开始过拟合;然而,我们发现训练更多的epoch对RM得分和人类偏好评分都有帮助,尽管会产生过拟合现象。

  • 奖励建模(Reward modeling, RM)。

从移除最终非embedding层的SFT模型开始,我们训练一个模型,输入是提示和响应,输出是一个标量奖励。在本文中,我们只使用了6B RM模型,因为这样可以节省计算资源,并且我们发现175B RM模型训练可能不稳定,因此不适合在RL期间用作值函数。

在Stiennon等人(2020年)的工作中,RM是在相同输入的两个模型输出之间的比较数据集上进行训练的。他们使用交叉熵损失,将比较作为标签——奖励的差异表示人类标注者更喜欢其中一个响应的对数几率。

为了加快比较数据的收集速度,我们向标注者展示到个响应供其排序。这为每个显示给标注者的提示产生了个比较。由于每个标注任务内的比较高度相关,我们发现如果我们简单地将比较混洗到一个数据集中,对数据集进行一次遍历会导致奖励模型过拟合。相反,我们将每个提示的所有个比较作为单个批次元素进行训练。这样做在计算上更加高效,因为它只需要对每个补全(也就是下面公式中的一个)进行一次RM的前向传播(而不是个补全的次前向传播),并且由于不再过拟合,它实现了更好的验证准确性和对数损失。

具体的,奖励模型的损失函数为:

❝ ❞

这里的是提示和补全在参数下的奖励模型的标量输出,是和对中更被偏好的那一个,是人类对比数据集。

最后,由于RM损失对奖励的偏移是不变的,我们使用偏差对奖励模型进行规范化,以便在进行强化学习之前标注者演示达到平均得分0。

  • 强化学习(Reinforcement learning, RL)

同样地按照Stiennon等人(2020年)的工作,在我们的环境中使用PPO算法来微调SFT模型。我们的环境是一个老虎机环境(bandit environment),它呈现一个随机的用户提示,并期望对此进行响应。根据给出的提示和响应,环境会根据奖励模型产生一个奖励,并结束这一回合。为了减少对奖励模型的过度优化,我们在每个token处增加了一个来自SFT模型的逐token KL(Kullback-Leibler)惩罚。我们将价值函数初始化为RM。这些模型在本文中称为为“PPO”。

我们还试验了将预训练梯度混合到PPO梯度中,以修复公开NLP数据集上的性能退化问题。这些模型称为“PPO-ptx”。他们在RL训练中最大化以下组合目标函数:

❝ ❞

这里的是学习的RL策略,是有监督训练的模型,是预训练分布。和是KL奖励系数和预训练损失系数,分别控制KL惩罚项和预训练梯度。对于“PPO”模型,设置为0。除另有说明外,本文中InstructGPT指PPO-ptx型号。

  1. Baseline

我们将我们的PPO模型的性能与我们的SFT模型和GPT-3进行比较。我们还将GPT-3与在给定少量前缀“提示”的情况下进行比较,这些前缀可以将其“引导”进入遵循指令的模式(GPT-3-prompted)。这个前缀是附加在用户指定的指令之前的。我们还将InstructGPT与在FLAN和T0数据集上微调的175B GPT-3进行比较,这两个数据集都包含各种NLP任务,每个任务都配有自然语言的指令(数据集在所包含的NLP数据集和使用的指令风格上有所不同)。我们分别在大约100万个样例上进行微调,并选择在验证集上获得最高奖励模型分数的检查点。

另外本文的实验主要在API分布和公共NLP数据集这两部分上进行评估。

三、实验

  1. API分布

78782eb48690ac3f6c56e4604afa08fc.jpeg
实验
19222e203ac106177eeaa500703c5222.jpeg
实验
5dbe59c6cb12c6d80d7862b9561393b4.jpeg
实验
  1. 公共NLP数据集

d8e789047899f6afd32ec6cb86cd7e28.jpeg
实验
849b109f09ca084759448fda6782a947.jpeg
实验
  1. 定性结果

015f45db09e0798fc87c6233e412069b.jpeg
实验
5ffd3f1cd9336dd60097212a7bd8b8a6.jpeg
实验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/747609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TortoiseGit的安装和使用

1、TortoiseGit的下载安装 安装说明:因为TortoiseGit 只是一个程序壳,必须依赖一个 Git Core,所以安装前请确定已完成git安装和配置。 TortoiseGit下载地址 https://download.tortoisegit.org/tgit/ ,最新稳定版本2.11.0.0。 点进去下载程序包和语言包(非必须),安装时…

【网络】网络基础(一)

目录 一、网络协议初识 1、协议分层 2、OSI七层模型 3、 TCP/IP五层(或四层)模型 4、对网络协议栈的理解 二、网络传输基本流程 1、网络传输流程图 1.1、同一个网段内的两台主机进行文件传输 1.2、跨网段的主机的文件传输 三、数据包封装和分用 四、网络中的地址管理…

配置微服务负载均衡的两种方式

说明:在微服务开发中,每个服务是通过服务名称来区分的,当两个微服务名称相同时,注册中心会视为这两个服务是相同的。配置对应的负载均衡策略,当其他服务发送请求过来的时,可以对这两个微服务进行规则访问。…

Linux的起源

UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,Linux 诞生于 20 世纪 90 年代初,可以说 UNIX 是操作系统中的"老大哥&…

Prompt本质解密及Evaluation实战与源码解析(二)

9.4 Evaluation for Agents源码解析 如图9-4所示,转过来,我们再看一下LangChain框架代理评估(Evaluation for Agents)的源代码。 图9- 4 LangChain的evaluation agents目录 在trajectory_eval_prompt.py文件里面,写了一个非常经典的提示词。 1. """提示…

抽象轻松有点使用的JavaScript

数据类型转换 定义概念:将一种数据类型通过用特定的方法转换成另一种数据类型 拆分: 数据类型转换 A1(一种数据类型) A2(方法) A3(转换成另一种数据类型) 理解:A1 &…

使用STM32 再实现电动车防盗钥匙扣

实现目标 1. 点击遥控器 A 按键,系统进入警戒模式,一旦检测到震动(小偷偷车),则喇叭发出声响报警 2. 点击遥控器 B 按键,系统退出警戒模式,再怎么摇晃系统都不会报警 硬件介绍 1. 震动传感器…

安装orcle报错:指定的 Oracle 系统标识符 (SID) 已在使用

安装orcle报错:[INS-35075]指定的 Oracle 系统标识符 (SID) 已在使用 说明前面的orcle没有彻底删除 解决这个问题: 搜索框 —— > 输入:regedit ——> 回车 运行regedit,选择HKEY_LOCAL_MACHINE SOFTWARE ORACLE&#xff…

【Android】从零搭建组件化项目

组件化系列文章介绍的内容稍微多了点,本着研究透这玩意的精神,从组件化的简介开始说起。 目录 简介组件化、模块化与插件化开始创建配置共享文件打包模式配置APT与JavaPoet 简介 什么是组件化? 将多个功能模板拆分、重组的过程。 为什么要使…

GEE入门学习,遥感云大数据分析、管理与可视化以及在林业应用丨灾害、水体与湿地领域应用丨GPT模型应用

目录 ①海量遥感数据处理与GEE云计算技术实践应用 ②GPT模型支持下的Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用 ③GEE遥感云大数据林业应用典型案例实践及GPT模型应用 ④遥感云大数据在灾害、水体与湿地领域典型案例实践及GPT模型应用 ①海量遥感…

78. 左旋转字符串

目录 链接: 题目: 思路: 代码: 图片: 链接: 原题链接 题目: 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。 请定义一个函数实现字符串左旋转操作的功能。 比如输入字…

Talk预告 | 天津大学博士生赵煜:从平面图像中理解空间语义 - 视觉空间位置描述

本期为TechBeat人工智能社区第512期线上Talk! 北京时间7月12日(周三)20:00, 天津大学博士生—赵煜的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “从平面图像中理解空间语义-视觉空间位置描述”,届时将与大家…

webpack插件安装

webpack插件安装 1、html-webpack-plugin插件2 、css-loader和style-loader插件3、less-load插件 1、html-webpack-plugin插件 1、下载插件 yarn add html-webpack-plugin -D2、webpack.config.js添加配置 *const HtmlWebpackPlugin require(html-webpack-plugin); const p…

Linux系统编程(信号处理机制)

文章目录 前言一、中断,异常,信号的区别二、信号在Linux中的标识三、信号处理相关函数四、代码实验总结 前言 本篇文章我们来讲解信号的处理机制,信号处理在Linux操作系统中必不可少,这一点值得大家注意,信号又会与中…

打通前后端 -- 创建第一个JSP页面

前言 JSP是由Sun Microsystems公司主导创建的一种动态网页技术标准。 JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。 JSP技术以Java语言作为脚本语言&…

从0-100:约拍小程序开发笔记

背景 摄影师预约小程序功能是一种方便摄影师和客户之间进行预约和安排拍摄的工具。通过该功能,摄影师可以在小程序上设置自己的可预约时间,客户可以根据摄影师的日程安排选择合适的时间进行预约。这样可以提高预约的效率,减少沟通成本&#…

【工具】tempormonkey 同步插件

tempormonkey 同步插件 1.打开tempormonkey的dashboard界面 2.右上角的setting 3.选择谷歌云盘

数字孪生建筑3D可视化运维管理平台降低成本

深圳是我国数字经济重镇,数字经济核心产业增加值占全市GDP逾三成,数字产业化和产业数字化正呈双向融合发展之势。越来越多的企业正与深圳华锐视点一道,利用互联网、大数据、云计算、人工智能、区块链、5G、数字孪生等技术优势,赋能…

Red Hat Linux官网下载地址

注册一个账号,就可以从官网下载最新版本的Red Hat 企业版Linux。

从0到100:定制公交预约小程序开发笔记

业务背景 可以让用户通过手机随时随地进行公交车的预约,无需排队等候,节省了用户的时间和精力。通过公交预约小程序,用户可以提前预约座位,避免了拥挤和等待时间,提高了公交出行的效率。可以根据用户的预约情况&#…