ChatGPT/InstructGPT详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

GPT系列是OpenAI的一系列预训练文章GPT的全称是Generative Pre-Trained Transformer顾名思义GPT的目的就是通过Transformer为基础模型使用预训练技术得到通用的文本模型。目前已经公布论文的有文本预训练GPT-1GPT-2GPT-3以及图像预训练iGPT。据传还未发布的GPT-4是一个多模态模型。最近非常火的ChatGPT和今年年初公布的[1]是一对姐妹模型是在GPT-4之前发布的预热模型有时候也被叫做GPT3.5。ChatGPT和InstructGPT在模型结构训练方式上都完全一致即都使用了指示学习Instruction Learning和人类反馈的强化学习Reinforcement Learning from Human FeedbackRLHF来指导模型的训练它们不同的仅仅是采集数据的方式上有所差异。所以要搞懂ChatGPT我们必须要先读懂InstructGPT。

拓展阅读GPT-4核心技术探秘

1. 背景知识

在介绍ChatGPT/InstructGPT之前我们先介绍它们依赖的基础算法。

1.1 GPT系列

基于文本预训练的GPT-1[2]GPT-2[3]GPT-3[4]三代模型都是采用的以Transformer为核心结构的模型图1不同的是模型的层数和词向量长度等超参它们具体的内容如表1。

图1GPT系列的模型结构其中Trm是一个Transformer结构

表1历代GPT的发布时间参数量以及训练量

模型发布时间层数头数词向量长度参数量预训练数据量
GPT-12018 年 6 月12127681.17 亿约 5GB
GPT-22019 年 2 月48-160015 亿40GB
GPT-32020 年 5 月9696128881,750 亿45TB

GPT-1比BERT诞生略早几个月。它们都是采用了Transformer为核心结构不同的是GPT-1通过自左向右生成式的构建预训练任务然后得到一个通用的预训练模型这个模型和BERT一样都可用来做下游任务的微调。GPT-1当时在9个NLP任务上取得了SOTA的效果但GPT-1使用的模型规模和数据量都比较小这也就促使了GPT-2的诞生。

对比GPT-1GPT-2并未在模型结构上大作文章只是使用了更多参数的模型和更多的训练数据表1。GPT-2最重要的思想是提出了“所有的有监督学习都是无监督语言模型的一个子集”的思想这个思想也是提示学习Prompt Learning的前身。GPT-2在诞生之初也引发了不少的轰动它生成的新闻足以欺骗大多数人类达到以假乱真的效果。甚至当时被称为“AI界最危险的武器”很多门户网站也命令禁止使用GPT-2生成的新闻。

GPT-3被提出时除了它远超GPT-2的效果外引起更多讨论的是它1750亿的参数量。GPT-3除了能完成常见的NLP任务外研究者意外的发现GPT-3在写SQLJavaScript等语言的代码进行简单的数学运算上也有不错的表现效果。GPT-3的训练使用了情境学习In-context Learning它是元学习Meta-learning的一种元学习的核心思想在于通过少量的数据寻找一个合适的初始化范围使得模型能够在有限的数据集上快速拟合并获得不错的效果。

通过上面的分析我们可以看出从性能角度上讲GPT有两个目标

  1. 提升模型在常见NLP任务上的表现效果
  2. 提升模型在其他非典型NLP任务例如代码编写数学运算上的泛化能力。

另外预训练模型自诞生之始一个备受诟病的问题就是预训练模型的偏见性。因为预训练模型都是通过海量数据在超大参数量级的模型上训练出来的对比完全由人工规则控制的专家系统来说预训练模型就像一个黑盒子。没有人能够保证预训练模型不会生成一些包含种族歧视性别歧视等危险内容因为它的几十GB甚至几十TB的训练数据里几乎肯定包含类似的训练样本。这也就是InstructGPT和ChatGPT的提出动机论文中用3H概括了它们的优化目标

  • 有用的Helpful;
  • 可信的Honest;
  • 无害的Harmless。

OpenAI的GPT系列模型并没有开源但是它们提供了模型的试用网站有条件的同学可以自行试用。

1.2 指示学习Instruct Learning和提示Prompt Learning学习

指示学习是谷歌Deepmind的Quoc V.Le团队在2021年的一篇名为《Finetuned Language Models Are Zero-Shot Learners》[5]文章中提出的思想。指示学习和提示学习的目的都是去挖掘语言模型本身具备的知识。不同的是Prompt是激发语言模型的补全能力例如根据上半句生成下半句或是完形填空等。Instruct是激发语言模型的理解能力它通过给出更明显的指令让模型去做出正确的行动。我们可以通过下面的例子来理解这两个不同的学习方式

  1. 提示学习给女朋友买了这个项链她很喜欢这个项链太____了。
  2. 指示学习这句话的情感是非常正向的给女朋友买了这个项链她很喜欢。

指示学习的优点是它经过多任务的微调后也能够在其他任务上做zero-shot而提示学习都是针对一个任务的。泛化能力不如指示学习。我们可以通过图2来理解微调提示学习和指示学习。

图2模型微调提示学习指示学习三者的异同

1.3 人类反馈的强化学习

因为训练得到的模型并不是非常可控的模型可以看做对训练集分布的一个拟合。那么反馈到生成模型中训练数据的分布便是影响生成内容的质量最重要的一个因素。有时候我们希望模型并不仅仅只受训练数据的影响而是人为可控的从而保证生成数据的有用性真实性和无害性。论文中多次提到了对齐Alignment问题我们可以理解为模型的输出内容和人类喜欢的输出内容的对齐人类喜欢的不止包括生成内容的流畅性和语法的正确性还包括生成内容的有用性、真实性和无害性。

我们知道强化学习通过奖励Reward机制来指导模型训练奖励机制可以看做传统模型训练机制的损失函数。奖励的计算要比损失函数更灵活和多样AlphaGO的奖励是对局的胜负这带来的代价是奖励的计算是不可导的因此不能直接拿来做反向传播。强化学习的思路是通过对奖励的大量采样来拟合损失函数从而实现模型的训练。同样人类反馈也是不可导的那么我们也可以将人工反馈作为强化学习的奖励基于人类反馈的强化学习便应运而生。

RLHF最早可以追溯到Google在2017年发表的《Deep Reinforcement Learning from Human Preferences》[6]它通过人工标注作为反馈提升了强化学习在模拟机器人以及雅达利游戏上的表现效果。

图3人类反馈的强化学习的基本原理

InstructGPT/ChatGPT中还用到了强化学习中一个经典的算法OpenAI提出的最近策略优化Proximal Policy OptimizationPPO[7]。PPO算法是一种新型的Policy Gradient算法Policy Gradient算法对步长十分敏感但是又难以选择合适的步长在训练过程中新旧策略的的变化差异如果过大则不利于学习。PPO提出了新的目标函数可以在多个训练步骤实现小批量的更新解决了Policy Gradient算法中步长难以确定的问题。其实TRPO也是为了解决这个思想但是相比于TRPO算法PPO算法更容易求解。

2. InstructGPT/ChatGPT原理解读

有了上面这些基础知识我们再去了解InstructGPT和ChatGPT就会简单很多。简单来说InstructGPT/ChatGPT都是采用了GPT-3的网络结构通过指示学习构建训练样本来训练一个反应预测内容效果的奖励模型RM最后通过这个奖励模型的打分来指导强化学习模型的训练。InstructGPT/ChatGPT的训练流程如图4所示。

图4InstructGPT的计算流程1有监督微调SFT2奖励模型RM训练3通过PPO根据奖励模型进行强化学习。

从图4中我们可以看出InstructGPT/ChatGPT的训练可以分成3步其中第2步和第3步是的奖励模型和强化学习的SFT模型可以反复迭代优化。

  1. 根据采集的SFT数据集对GPT-3进行有监督的微调Supervised FineTuneSFT
  2. 收集人工标注的对比数据训练奖励模型Reword ModelRM
  3. 使用RM作为强化学习的优化目标利用PPO算法微调SFT模型。

根据图4我们将分别介绍InstructGPT/ChatGPT的数据集采集和模型训练两个方面的内容。

2.1 数据集采集

如图4所示InstructGPT/ChatGPT的训练分成3步每一步需要的数据也有些许差异下面我们分别介绍它们。

2.1.1 SFT数据集

SFT数据集是用来训练第1步有监督的模型即使用采集的新数据按照GPT-3的训练方式对GPT-3进行微调。因为GPT-3是一个基于提示学习的生成模型因此SFT数据集也是由提示-答复对组成的样本。SFT数据一部分来自使用OpenAI的PlayGround的用户另一部分来自OpenAI雇佣的40名标注工labeler。并且他们对labeler进行了培训。在这个数据集中标注工的工作是根据内容自己编写指示并且要求编写的指示满足下面三点

  • 简单任务labeler给出任意一个简单的任务同时要确保任务的多样性
  • Few-shot任务labeler给出一个指示以及该指示的多个查询-响应对
  • 用户相关的从接口中获取用例然后让labeler根据这些用例编写指示。

2.1.2 RM数据集

RM数据集用来训练第2步的奖励模型我们也需要为InstructGPT/ChatGPT的训练设置一个奖励目标要尽可能全面且真实的对齐我们需要模型生成的内容。很自然的我们可以通过人工标注的方式来提供这个奖励通过人工对可以给那些涉及偏见的生成内容更低的分从而鼓励模型不去生成这些人类不喜欢的内容。InstructGPT/ChatGPT的做法是先让模型生成一批候选文本让后通过labeler根据生成数据的质量对这些生成内容进行排序。

2.1.3 PPO数据集

InstructGPT的PPO数据没有进行标注它均来自GPT-3的API的用户。既又不同用户提供的不同种类的生成任务其中占比最高的包括生成任务45.6%QA12.4%头脑风暴11.2%对话8.4%等。

2.1.4 数据分析

因为InstructGPT/ChatGPT是在GPT-3基础上做的微调而且因为涉及了人工标注它们数据总量并不大表2展示了三份数据的来源及其数据量。

表2InstructGPT的数据分布

论文的附录A对数据的分布进行了更详细的讨论这里我列出几个可能影响模型效果的几项

  • 数据中96%以上是英文其它20个语种例如中文法语西班牙语等加起来不到4%这可能导致InstructGPT/ChatGPT能进行其它语种的生成但效果应该远不如英文
  • 提示种类共有9种而且绝大多数是生成类任务可能会导致模型有覆盖不到的任务类型
  • 40名外包员工来自美国和东南亚分布比较集中且人数较少 InstructGPT/ChatGPT的目标是训练一个价值观正确的预训练模型它的价值观是由这40个外包员工的价值观组合而成。而这个比较窄的分布可能会生成一些其他地区比较在意的歧视偏见问题。

此外ChatGPT的博客中讲到ChatGPT和InstructGPT的训练方式相同不同点仅仅是它们采集数据上有所不同但是并没有更多的资料来讲数据采集上有哪些细节上的不同。考虑到ChatGPT仅仅被用在对话领域这里我猜测ChatGPT在数据采集上有两个不同1. 提高了对话类任务的占比2. 将提示的方式转换Q&A的方式。当然这里也仅仅是猜测更准确的描述要等到ChatGPT的论文、源码等更详细的资料公布我们才能知道。

2.2 训练任务

我们刚介绍到InstructGPT/ChatGPT有三步训练方式。这三步训练会涉及三个模型SFTRM以及PPO下面我们详细介绍它们。

2.2.1 有监督微调SFT

这一步的训练和GPT-3一致而且作者发现让模型适当过拟合有助于后面两步的训练。

2.2.2 奖励模型RM

因为训练RM的数据是一个labeler根据生成结果排序的形式所以它可以看做一个回归模型。RM结构是将SFT训练后的模型的最后的嵌入层去掉后的模型。它的输入是prompt和Reponse输出是奖励值。具体的讲对弈每个promptInstructGPT/ChatGPT会随机生成  个输出 4≤≤9 然后它们向每个labeler成对的展示输出结果也就是每个prompt共展示 2 个结果然后用户从中选择效果更好的输出。在训练时InstructGPT/ChatGPT将每个prompt的 2 个响应对作为一个batch这种按prompt为batch的训练方式要比传统的按样本为batch的方式更不容易过拟合因为这种方式每个prompt会且仅会输入到模型中一次。

奖励模型的损失函数表示为式(1)。这个损失函数的目标是最大化labeler更喜欢的响应和不喜欢的响应之间的差值。

(1)loss⁡()=−1(2)(,,)∼[log⁡(((,)−(,)))]

其中 (,) 是提示  和响应  在参数为  的奖励模型下的奖励值  是labeler更喜欢的响应结果  是labeler不喜欢的响应结果。  是整个训练数据集。

2.2.3 强化学习模型PPO

强化学习和预训练模型是最近两年最为火热的AI方向之二之前不少科研工作者说强化学习并不是一个非常适合应用到预训练模型中因为很难通过模型的输出内容建立奖励机制。而InstructGPT/ChatGPT反直觉的做到了这点它通过结合人工标注将强化学习引入到预训练语言模型是这个算法最大的创新点。

如表2所示PPO的训练集完全来自API。它通过第2步得到的奖励模型来指导SFT模型的继续训练。很多时候强化学习是非常难训练的InstructGPT/ChatGPT在训练过程中就遇到了两个问题

  1. 问题1随着模型的更新强化学习模型产生的数据和训练奖励模型的数据的差异会越来越大。作者的解决方案是在损失函数中加入KL惩罚项 log⁡(RL(∣)/SFT(∣)) 来确保PPO模型的输出和SFT的输出差距不会很大。
  2. 问题2只用PPO模型进行训练的话会导致模型在通用NLP任务上性能的大幅下降作者的解决方案是在训练目标中加入了通用的语言模型目标 ∼pretrain [log⁡(RL())] 这个变量在论文中被叫做PPO-ptx。

综上PPO的训练目标为式(2)。 (2) objective ()=(,)∼RL[(,)−log⁡(RL(∣)/SFT(∣))]+∼pretrain [log⁡(RL())]

3. InstructGPT/ChatGPT的性能分析

不可否认的是InstructGPT/ChatGPT的效果是非常棒的尤其是引入了人工标注之后让模型的“价值观”和的正确程度和人类行为模式的“真实性”上都大幅的提升。那么仅仅根据InstructGPT/ChatGPT的技术方案和训练方式我们就可以分析出它可以带来哪些效果提升呢

3.1 优点

  • InstructGPT/ChatGPT的效果比GPT-3更加真实这个很好理解因为GPT-3本身就具有非常强的泛化能力和生成能力再加上InstructGPT/ChatGPT引入了不同的labeler进行提示编写和生成结果排序而且还是在GPT-3之上进行的微调这使得我们在训练奖励模型时对更加真实的数据会有更高的奖励。作者也在TruthfulQA数据集上对比了它们和GPT-3的效果实验结果表明甚至13亿小尺寸的PPO-ptx的效果也要比GPT-3要好。
  • InstructGPT/ChatGPT在模型的无害性上比GPT-3效果要有些许提升原理同上。但是作者发现InstructGPT在歧视、偏见等数据集上并没有明显的提升。这是因为GPT-3本身就是一个效果非常好的模型它生成带有有害、歧视、偏见等情况的有问题样本的概率本身就会很低。仅仅通过40个labeler采集和标注的数据很可能无法对模型在这些方面进行充分的优化所以会带来模型效果的提升很少或者无法察觉。
  • InstructGPT/ChatGPT具有很强的Coding能力首先GPT-3就具有很强的Coding能力基于GPT-3制作的API也积累了大量的Coding代码。而且也有部分OpenAI的内部员工参与了数据采集工作。通过Coding相关的大量数据以及人工标注训练出来的InstructGPT/ChatGPT具有非常强的Coding能力也就不意外了。

3.2 缺点

  • InstructGPT/ChatGPT会降低模型在通用NLP任务上的效果我们在PPO的训练的时候讨论了这点虽然修改损失函数可以缓和但这个问题并没有得到彻底解决。
  • 有时候InstructGPT/ChatGPT会给出一些荒谬的输出虽然InstructGPT/ChatGPT使用了人类反馈但限于人力资源有限。影响模型效果最大的还是有监督的语言模型任务人类只是起到了纠正作用。所以很有可能受限于纠正数据的有限或是有监督任务的误导只考虑模型的输出没考虑人类想要什么导致它生成内容的不真实。就像一个学生虽然有老师对他指导但也不能确定学生可以学会所有知识点。
  • 模型对指示非常敏感这个也可以归结为labeler标注的数据量不够因为指示是模型产生输出的唯一线索如果指示的数量和种类训练的不充分的话就可能会让模型存在这个问题。
  • 模型对简单概念的过分解读这可能是因为labeler在进行生成内容的比较时倾向于给给长的输出内容更高的奖励。
  • 对有害的指示可能会输出有害的答复例如InstructGPT/ChatGPT也会对用户提出的“AI毁灭人类计划书”给出行动方案图5。这个是因为InstructGPT/ChatGPT假设labeler编写的指示是合理且价值观正确的并没有对用户给出的指示做更详细的判断从而会导致模型会对任意输入都给出答复。虽然后面的奖励模型可能会给这类输出较低的奖励值但模型在生成文本时不仅要考虑模型的价值观也要考虑生成内容和指示的匹配度有时候生成一些价值观有问题的输出也是可能的。

图5ChatGPT编写的毁灭人类计划书。

3.3 未来工作

我们已经分析了InstrcutGPT/ChatGPT的技术方案和它的问题那么我们也可以看出InstrcutGPT/ChatGPT的优化角度有哪些了。

  • 人工标注的降本增效InstrcutGPT/ChatGPT雇佣了40人的标注团队但从模型的表现效果来看这40人的团队是不够的。如何让人类能够提供更有效的反馈方式将人类表现和模型表现有机和巧妙的结合起来是非常重要的。
  • 模型对指示的泛化/纠错等能力指示作为模型产生输出的唯一线索模型对他的依赖是非常严重的如何提升模型对指示的泛化能力以及对错误指示示的纠错能力是提升模型体验的一个非常重要的工作。这不仅可以让模型能够拥有更广泛的应用场景还可以让模型变得更“智能”。
  • 避免通用任务性能下降这里可能需要设计一个更合理的人类反馈的使用方式或是更前沿的模型结构。因为我们讨论了InstrcutGPT/ChatGPT的很多问题可以通过提供更多labeler标注的数据来解决但这会导致通用NLP任务更严重的性能下降所以需要方案来让生成结果的3H和通用NLP任务的性能达到平衡。

3.4 InstrcutGPT/ChatGPT的热点话题解答

  • ChatGPT的出现会不会导致底层程序员失业从ChatGPT的原理和网上漏出的生成内容来看ChatGPT生成的代码很多可以正确运行。但程序员的工作不止是写代码更重要的是找到问题的解决方案。所以ChatGPT并不会取代程序员尤其是高阶程序员。相反它会向现在很多的代码生成工具一样成为程序员写代码非常有用的工具。
  • Stack Overflow 宣布临时规则禁止 ChatGPT。ChatGPT本质上还是一个文本生成模型对比生成代码它更擅长生成以假乱真的文本。而且文本生成模型生成的代码或者解决方案并不能保证是可运行而且是可以解决问题的但它以假乱真的文本又会迷惑很多查询这个问题的人。Stack Overflow为了维持论坛的质量封禁ChatGPT也是情理之中。
  • 聊天机器人 ChatGPT 在诱导下写出「毁灭人类计划书」并给出代码AI 发展有哪些问题需关注ChatGPT的「毁灭人类计划书」是它在不可遇见的指示下根据海量数据强行拟合出来的生成内容。虽然这些内容看起来很真实表达也很流畅这说明的只是ChatGPT具有非常强的生成效果并不表示ChatGPT具备毁灭人类的思想。因为他仅仅是一个文本生成模型并不是一个决策模型。

4. 总结

就像很多人们算法刚诞生时一样ChatGPT凭借有用性真实性无害性的效果引起了业内广泛的关注和人类对AI的思考。但是当我们看完它的算法原理之后发现它并没有业内宣传的那么恐怖。反而我们可以从它的技术方案中学到很多有价值的东西。InstrcutGPT/ChatGPT在AI界最重要的贡献是将强化学习和预训练模型巧妙的结合起来。而且通过人工反馈提升了模型的有用性真实性和无害性。ChatGPT也进一步提升大模型的成本之前还只是比拼数据量和模型规模现在甚至也引入了雇佣的外包这一支出让个体工作者更加望而却步。

本文作者通过和 @人民邮电出版社 的合作目前此专栏的大部分内容经过反复的校正和排版已发布成书籍《深度学习高手笔记——卷1基础算法》和《深度学习高手笔记——卷2前沿应用》内容经过作者和出版社的专业审核人员的10余轮的教改内容的丰富性算法讲解的精确性叙述文本的流畅度已大幅提升。目前卷1已多平台上架欢迎大家点击下面链接购买。

《深度学习高手笔记 卷1基础算法异步图书出品》(刘岩@大师兄)【摘要 书评 试读】- 京东图书​item.jd.com/13484669.html正在上传…重新上传取消

参考

  1. ^Ouyang, Long, et al. "Training language models to follow instructions with human feedback." *arXiv preprint arXiv:2203.02155* (2022). https://arxiv.org/pdf/2203.02155.pdf
  2. ^Radford, A., Narasimhan, K., Salimans, T. and Sutskever, I., 2018. Improving language understanding by generative pre-training. https://www.cs.ubc.ca/~amuham01/LING530/papers/radford2018improving.pdf
  3. ^Radford, A., Wu, J., Child, R., Luan, D., Amodei, D. and Sutskever, I., 2019. Language models are unsupervised multitask learners. *OpenAI blog*, *1*(8), p.9. https://life-extension.github.io/2020/05/27/GPT%E6%8A%80%E6%9C%AF%E5%88%9D%E6%8E%A2/language-models.pdf
  4. ^Brown, Tom B., Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan et al. “Language models are few-shot learners.” *arXiv preprint arXiv:2005.14165* (2020). https://proceedings.neurips.cc/paper/2020/file/1457c0d6bfcb4967418bfb8ac142f64a-Paper.pdf
  5. ^Wei, Jason, et al. "Finetuned language models are zero-shot learners." *arXiv preprint arXiv:2109.01652* (2021). https://arxiv.org/pdf/2109.01652.pdf
  6. ^Christiano, Paul F., et al. "Deep reinforcement learning from human preferences." *Advances in neural information processing systems* 30 (2017). https://arxiv.org/pdf/1706.03741.pdf
  7. ^Schulman, John, et al. "Proximal policy optimization algorithms." *arXiv preprint arXiv:1707.06347* (2017). https://arxiv.org/pdf/1707.06347.pdf
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: ChatGPT