【论文阅读】InstructGPT: Training language models to follow instructions with human feedback

论文链接:InstructGPT

1. 摘要

把语言模型变大并不意味着会让模型更好的理解用户意图,例如大的语言模型会生成一些不真实、有害的、没有帮助的输出给用户,换句话说,这些模型并没有和用户的意图对齐(aligned)。在这篇论文中我们展示了通过使用用户反馈来微调模型的方法,从而使得语言模型在一系列任务上与用户意图对齐。首先通过人工撰写和OpenAI API两种方式收集问题(prompts),然后人工来写这些问题的答案,从而构建成一个数据集,再使用这些数据集对GPT3进行有监督的微调;我们又通过对模型的输出进行(人工)排序构建一个数据集,在这个数据集上,我们从人类反馈中通过强化学习进一步微调这个有监督模型,我们把最终得到的模型称之为InstructGPT。尽管InstructGPT的参数是GPT3的1/100,但是在我们(收集的)问题上通过人类评估发现,只有1.3B参数的instructGPT模型输出比有175B参数的GPT3模型输出更好,此外InstructGPT在真实性和降低有害输出上都有所改善,并且在公开NLP数据集上的表现也不逊色。虽然InstructGPT仍然会犯简单的错误,但是我们的结果证明,使用人类反馈来微调语言模型从而使得模型与人类意图对齐是一个正确的方向。

2. 导论

2.1 背景

通过给定(当前)任务的一些样本作为输入,大语言模型可以通过prompted的方式去执行一系列NLP任务,然而这些模型经常表现出意料之外的结果,例如捏造事实,生成有偏见或有害的内容,或者完全不服从用户的指令。这是因为当前很多大模型的训练目标是在来自网络上爬取的数据集上预测下一个字,这完全与“根据用户指令生成有帮助的安全的内容”的目标不符。因此我们认为语言模型的目标并没有对齐(misaligned)。对于那些被部署在成千上万的应用上的语言模型,避免这种意料之外的行为尤为重要。

我们最终目的希望语言模型是有帮助的(语言模型应该帮助用户解决任务),真诚的(语言模型不应该编造信息、误导用户)、无害的(语言模型不应该对人或社会造成生理上、心理上或社会危害)

2.2 方法

文章专注于通过微调的方式去对齐语言模型,具体来说,就是从人类反馈中使用强化学习去微调GPT3,使其遵循一系列的手写指令。这个技术使用人类偏好作为奖励信号去微调我们的模型。具体方法如下图所示
(1)首先基于外包人员的测试表现,选择了40个外包去标注数据
(2)基于人openAI API和人工两种方式获取一些问题,让外包写这些问题的期望答案,从而构建成一个数据集,然后使用这个数据集去有监督的训练GPT3作为baseline
(3)通过API获取更多的问题集,让人工对模型对这些问题的输出进行排序,从而又构建了一个数据集B
(4)在数据集B上训练一个奖励模型(RM)去预测哪个模型的输出是更符合人类期望的
(5)使用奖励模型作为奖励函数去微调baseline模型,使用PPO算法最大化奖励
(6)基于GPT-3模型架构,通过上述方式训练得到的模型就是InstructGPT
在这里插入图片描述
图片解释

  • step1: 假设问题为 Q1: explain the moon landing to a six year old 人工写的答案为 A1: some people want to the moon... ;以Q1为prompt输入到GPT-3中,A1为label进行有监督的fine tunne GPT-3模型
  • step2:通过openAI API选择一个更大的问题集,然后将问题依次送入到GPT-3中,GPT-3会输出多个答案,为什么有多个答案?可参考之前的文章自然语言生成中解码算法:beam-search、topk-topp、基于kmeans的聚类: GPT-3输出是单词表中各个词的概论分布,通过解码算法可得到每条路径的概率;一个问题得到多个答案后,通过人工对这些答案进行排序,然后根据这些排序的问题答案对来训练一个奖励模型,输入问题及其答案,输出一个得分,最终要求奖励模型输出各个问题答案对的得分排序和人工标注的排序相同
  • step3:使用强化学习微调step1训练的GPT-3模型:输入一个问题,GPT3生成一个答案,将该问题答案对送入到step2训练好的奖励模型中得到一个得分,根据得分来优化GPT3模型使得GPT3模型输出的答案得分尽可能高

思考
(1)是否一定需要step2强化学习这一步?
理论上如果step1这一步人工标注了足够多的数据,不需要强化学习,直接根据标注数据来训练应该是也能达到同样效果。但是这里考虑到step1中给定问题要求标注者写出所有的答案这种标注方式太难,标注成本很高,而step2这种判别式的标注方法显然简单很多,标注效率会大大提高,即同样的标注成本能够标注更多的数据,所以通过强化学习可以起到节约标注成本的作用。

2.3 发现

作者主要训练了三种大小的模型(1.3B, 6B, 175B三种模型参数量),且都是基于GPT-3模型架构。评估模型的方式是让外包在测试集上评价模型的输出结果,主要得到如下发现:
(1)外包都认为InstructGPT输出结果比GPT-3好:1.3B的InstructGPT效果要比175B的GPT3的结果好
(2)相比GPT-3,InstructGPT在真实性上表现更好
(3)相比GPT-3,InstructGPT在减少生成有害信息上效果更好,但是对于偏见方面,并无啥提升
(4)在对话生成上InstructGPT有明显提升,在NLP公开数据集上表现退化很小
(5)即使没有参与到标注训练数据的外包也认为InstructGPT生成的结果要比GPT3结果好(每个人对问题的答案好坏有主观性,参与到训练集标注的外包可能在某些方面有“偏见”,为了减少这种偏见,因此初步有请了没有参与到训练集标注的外包来测试结果)
(6)微调对数据比较敏感:在人工标注数据上微调GPT3vs在公开数据集上微调GPT3,在来自API的问题集上测试,表现还是前者更强
(7)模型有一定的泛化性,即使针对很少出现在微调数据集中的instruction也可以回答很好
(8)InstructGPT仍然会范一些简单的错误

3. 方法及实验细节

3.1 数据集

(1)通过如下三种方式让外包写promts(这些promts一般不会出现在GPT3 API中),来训练初版的InstructGPT

  • Plain: 仅仅让外包想任意的任务,且这些任务具有足够的多样性
  • Few-shot:让外包想一些instruction以及针对这个指令的多个query/response pair‘
  • User-based:让外包根据openAI API waitlist中的用例想出相对应的问题

(2)基于以上初版InstructGPT制作了一个Playground让用户使用,因此训练Instruct GPT的prompt数据集主要来自基于初版InstructGPT的openAI API

基于以上prompts制作了三个不同的数据集用于微调过程:1)SFT数据集 13K --> 训练SFT模型 2)奖励模型数据集 33K -->训练RM 3) PPO数据集(无任何人工label)31k --> RLHF训练
(每个阶段数据集的构建可参考2.2章节)

下图展示了不同类型prompts的分布,以及一些具体prompts的展示
在这里插入图片描述
总结来说数据集构建的过程为:人工写一些prompts–>构建初版InstructGPT – > 从初版InstructGPT API中选择更多的 prompts --> 人工写prompts的答案及排序 – > RLHF训练

3.2 模型

模型的backbone是GPT-3 , 然后使用如下三种方式训练
(1)Supervised fine-tuning (SFT):将GPT-3在他们人工标注的prompt和答案上再次训练一次,总共跑了16个epoch,实际在跑完一个epoch后就过拟合了,但是作者发现跑更多的epoch,过拟合后对后面的奖励模型已经人工评估都有好处
(2)Reward modeling (RM).:将上述的SFT模型的最后一层(不是embedding的那一层)去掉,(接上一个线性投影层);输入prompt和对应的答案,输出一个标量得分,此处作者仅仅使用了一个6B的奖励模型,作者发现175B的大模型训练不稳定,因此不适合作为奖励函数

而损失函数作者使用的是一个pairwise的ranking loss,具体形式如下:
在这里插入图片描述
所谓pairwise即:对一个prompt x x x ,取其一对答案 y w y_w yw y l y_l yl ,假设 y w y_w yw 的排序要比 y l y_l yl 高,分别分别计算 x x x y w y_w yw x x x y l y_l yl的奖励得分 s w = r θ ( x , y w ) s_w = r_\theta(x,y_w) sw=rθ(x,yw) s l = r θ ( x , y l ) s_l=r_\theta(x, y_l) sl=rθ(x,yl);由于 y w y_w yw 的排序要比 y l y_l yl 高,因此 s w s_w sw要大于 s l s_l sl,且期望 s w − s l s_w-s_l swsl越大越好,此处 σ \sigma σ是sigmoid函数, 前面加上了符号及log,因此希望整个式子越小越好

人工标注的时候是对一个prompt的K个答案进行排序,这里K选择了9,相较于K=4有如下优点:

  • 标注效率提升,排序的关键的对问题的理解,如果外包理解了问题,那么答案数量扩大一倍,而所花的标注时间并不一定会扩大一倍
  • 计算效率提升,由于是两两比较,因此共有 C 2 K C{_2}^{K} C2K个pair,作者将一个prompt对应的 C 2 K C{_2}^{K} C2K个pair作为一个batch,这样只需前向输入到奖励模型K次,就能计算 C 2 K C{_2}^{K} C2K个数据的损失,显然K越大越划得来

(3)Reinforcement learning (RL):作者采用强化学习中的PPO算法来优化SFT模型,PPO算法核心就是下式:
在这里插入图片描述
强化学习中模型称之为policy,上式中 π ϕ R L \pi_\phi^{\mathrm{RL}} πϕRL就是当前要学习的模型, ϕ \phi ϕ是他的参数,初始化为第一步训练的SFT模型, 将括号中的式子拆开看,第一项就是给定一个prompt x x x π ϕ R L \pi_\phi^{\mathrm{RL}} πϕRL会输出一个 y y y,然后奖励函数会给 x x x y y y打一个分,然后更新参数 ϕ \phi ϕ使得模型输出更符合人类的期望;第二项是一个正则项,通过KL散度的形式,希望当前训练的模型仍然能尽量与SFT一致,防止奖励模型过度优化使得模型跑的太偏;这两项加起来就是PPO模型。最后一项 γ E x ∼ D pretrain  [ log ⁡ ( π ϕ R L ( x ) ) ] \gamma E_{x \sim D_{\text {pretrain }}}\left[\log \left(\pi_\phi^{\mathrm{RL}}(x)\right)\right] γExDpretrain [log(πϕRL(x))]是为了防止模型过度学习当前的排序任务,从而导致遗忘了以前预训练的知识,此处 D p r e t r a i n D_{pretrain} Dpretrain是预训练数据集,即从预训练数据集中抽样出 x x x一起训练,但 γ \gamma γ 不为0时这个称为PPO-ptx模型,简单来说就是PPO目标函数+原始GPT3目标函数加在一起。

3.3 实验结果

实验结果如下图所示,其中GPT是指初始的GPT-3模型,GPT(prompted)使用精心设计的prompt来训练的GPT-3;SFT使用人工标注的demo训练的GPT-3;PPO使用强化学习训练的InstructGPT;PPO-ptx在PPO的基础上增加了预训GPT-3的目标函数;如论文所述,1.3B的InstructGPT比175B的GPT-3效果还要好
在这里插入图片描述

总结

InstructGPT就是在GPT-3的再训练中增加了人工标注数据,将标注数据与强化学习相结合,使得模型的生成结果更符合人类的期望,也即论文中的提到的使模型更有帮助性,同时由于人工标注的数据再真实性、无害性方面有保证,因此一定程度上帮助模型生成具有真实性和无害性的内容

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI2:仅凭开源数据,可达ChatGPT 83%表现

夕小瑶科技说 原创 作者 | Python ChatGPT强大的性能让人爱不释手,ChatGPT迟迟不开源让人恨得牙根痒痒。那仅通过开源数据,能够取得怎样的效果呢?近期,AI2的一篇论文显示,最好的65B规模的模型能够达到ChatGPT表现的8…

chatgpt中的强化学习 PPO

PPO? 强化学习 基本概念 强化学习五要素:智能体、行为、环境、状态、奖励。 先直接将五个要素映射到文本生成任务上: 智能体:生成模型。 行为: 获取当前step token的概率分布,并选取其中一个作为生成的token。 环…

ChatGPT1论文解读《Improving Language Understanding by Generative Pre-Training》(2018)

论文总结 以下是我阅读完整篇论文做的个人总结,基本包含了ChatGPT1设计的完整框架思路,可以仅看【论文总结】章节。 在GPT1实现的核心架构中,包含两个阶段。 第一阶段 在第一阶段基于一个包含7000本书籍内容的海量未标注文本数据集进行无…

投资者必读:巴菲特2023致股东信全文

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年1月份热门报告合集 ChatGPT团队背景研究报告 ChatGPT的发展历程、原理、技术架构及未来方向 ChatGPT使用总结:150个ChatGPT提示此模板 ChatGPT数据集之谜 …

翻译: 比尔·盖茨 人工智能与手机和互联网一样具有革命性 人工智能时代已经开始

在我的一生中,我看到了两次技术演示,让我感到革命性。 第一次是在 1980 年,当时我接触到了图形用户界面,这是包括 Windows 在内的所有现代操作系统的前身。我和给我看演示的人坐在一起,一位名叫Charles Simonyi的杰出…

面对职业焦虑,我们需要做些什么?

目录 大环境分析:AI 发展汹涌而上 温水煮青蛙:那些“被替代”的“我们” 码农“分类”:程序员都在做些什么? 码农黑暗季:失业潮原因分析 程序员短期真的可替代吗? AI 发展来势汹汹,如何顺势…

AI 正在杀死旧 Web?

编译 | 苏宓 出品 | CSDN(ID:CSDNnews) 随着 OpenAI 的 ChatGPT、Google 的 Bard 等 AIGC 工具的出现,由 AI 驱动的内容、信息、机器人已经在过去一年中迅速融入了 Web 网站之中。 然而,在这些工具带来极大便利、提升效…

ChatGPT + 大模型 = 王炸!!

最近,总在业内传着一股风,那就是:大模型时代将会有大量的程序员被淘汰,可谓人心惶惶。但真实情况,真的是这样吗?我不这样认为。 大模型时代下,或将催化更多的程序员,有更多人成为程序…

有哪些值得推荐的数据可视化工具?

作者:文兄 链接:https://www.zhihu.com/question/19929609/answer/133825589 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 谢邀。本答案提要:1.plotly 2.R ggplot23.无需编程语言…

chatgpt赋能python:如何用Python做动画

如何用Python做动画 Python 是一门强大的编程语言,它不仅可以用于常规软件开发,还可以用于动画制作。在本文中,我们将介绍如何使用 Python 来制作动画并为其优化搜索引擎的内容。让我们开始吧! 什么是动画? 在我们深…

chatgpt赋能Python-python_mime

Python MIME:理解和使用 Python MIME 是一个用于处理电子邮件和其他多媒体内容的 Python 库。 MIME 是一种在因特网上常用的协议,它允许通过电子邮件、web 浏览器和其他方式发送多媒体内容,包括文本、图像、音频和视频。本文将介绍 Python M…

chatgpt赋能Python-python_gensim

Python Gensim: 一款高效的自然语言处理工具 自然语言处理(NLP)是目前人工智能领域最受青睐和广泛应用的一个领域。Python Gensim是一款用于实现NLP任务的高效工具,可以用于词向量表示、语料库建模、主题建模、相似性计算等各种自然语言处理…

chatgpt赋能Python-pythoninfo

Python:一款强大的编程语言 Python是一款广泛应用于全球计算机科学领域的软件编程语言。在过去的10年中,Python已经成为最受欢迎的编程语言之一。Python具有简单易学、可移植性强、高效、可扩展、可嵌入、多功能、跨平台等优点,因此越来越多…

chatgpt赋能Python-python_piano

Python Piano: 打造全新的音乐创作体验 简介 Python Piano是一个基于Python编程语言开发的音乐创作工具,它提供了简单易用的界面和多样化的音色库,使得音乐创作变得更加的直观和有趣。Python Piano可以作为一个独立的应用程序,也可以作为Py…

chatgpt赋能python:Python大屏:完美的数据可视化工具

Python大屏:完美的数据可视化工具 在今天的数字时代,数据越来越成为了每个企业和组织日常业务运营的核心。为了更好地理解和管理这些数据,数据可视化的重要性也随之凸显出来。Python大屏作为一款高效、快速、方便的数据可视化工具&#xff0…

chatgpt赋能python:Python将图片生成二维码——方便快捷的二维码生产工具

Python将图片生成二维码——方便快捷的二维码生产工具 现今,随着移动互联网的快速发展,二维码已经成为了一种广泛运用的数据传输方式。对于许多企业或者个人而言,不少网站或者广告上多会以二维码的方式展示宣传信息或者数据链接。因此&#…

chatgpt赋能python:Python建JSON文件的方法及应用

Python建JSON文件的方法及应用 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已被广泛采用。而Python具有简洁、高效、易用等特点,可以很容易地通过Python来生成和解析JSON数据。本文将介绍Python中如何建立JSON…

chatgpt赋能python:Python嵌入C:一个高效的编程技巧

Python嵌入C:一个高效的编程技巧 作为一名有10年Python编程经验的工程师,我发现在某些情况下,Python嵌入C是一种高效的编程技巧。这种技巧可以使您利用Python的简洁性和高级功能,同时仍然保持程序的执行速度。在本文中&#xff0…

chatgpt赋能python:Python信息隐藏:掩耳盗铃的神奇技巧

Python信息隐藏:掩耳盗铃的神奇技巧 在现代社会中,保护信息资产安全已经变得至关重要。信息隐藏(steganography)是一种将秘密信息嵌入到其他无关数据中以便于传输的技术。Python作为一种易学易用,而且功能强大的编程语…

chatgpt赋能python:Python代码清空方法:如何让你的代码更易于阅读和维护?

Python代码清空方法:如何让你的代码更易于阅读和维护? 在编写长期项目时,随着时间的推移,代码库变得越来越大和复杂。当开发人员需要添加新功能或修改现有功能时,他们越来越难以了解整个代码项目,其代码可…