文章主题:关键词:ChatGPT, InstructGPT, GPT-3, Transformer
前言
GPT系列是OpenAI的一系列预训练文章,GPT的全称是Generative Pre-Trained Transformer,顾名思义,GPT的目的就是通过Transformer为基础模型,使用预训练技术得到通用的文本模型。目前已经公布论文的有文本预训练GPT-1,GPT-2,GPT-3,以及图像预训练iGPT。据传还未发布的GPT-4是一个多模态模型。最近非常火的ChatGPT和今年年初公布的[1]是一对姐妹模型,是在GPT-4之前发布的预热模型,有时候也被叫做GPT3.5。ChatGPT和InstructGPT在模型结构,训练方式上都完全一致,即都使用了指示学习(Instruction Learning)和人类反馈的强化学习(Reinforcement Learning from Human Feedback,RLHF)来指导模型的训练,它们不同的仅仅是采集数据的方式上有所差异。所以要搞懂ChatGPT,我们必须要先读懂InstructGPT。
拓展阅读:GPT-4核心技术探秘
1. 背景知识
在介绍ChatGPT/InstructGPT之前,我们先介绍它们依赖的基础算法。
1.1 GPT系列
基于文本预训练的GPT-1[2],GPT-2[3],GPT-3[4]三代模型都是采用的以Transformer为核心结构的模型(图1),不同的是模型的层数和词向量长度等超参,它们具体的内容如表1。
图1:GPT系列的模型结构(其中Trm是一个Transformer结构)
表1:历代GPT的发布时间,参数量以及训练量
模型发布时间层数头数词向量长度参数量预训练数据量GPT-12018 年 6 月12127681.17 亿约 5GBGPT-22019 年 2 月48-160015 亿40GBGPT-32020 年 5 月9696128881,750 亿45TB
GPT-1和BERT虽然都采用了Transformer作为核心结构,但它们的预训练方式略有不同。GPT-1采用自左向右生成式构建预训练任务,从而获得了一个通用的预训练模型,与BERT一样适用于下游任务的微调。在当时的9个NLP任务中,GPT-1取得了SOTA效果,但其模型规模和数据量相对较小,这催生了GPT-2的诞生。
GPT-2在模型结构和GPT-1相比并没有明显的改进,其关键思想在于“所有的有监督学习都是无监督语言模型的一个子集”,这一理念为后来的提示学习(Prompt Learning)奠定了基础。尽管GPT-2在刚推出时引起了广泛关注,甚至被誉为“AI界最危险的武器”,但由于其生成的新闻内容存在误导性,许多网站对其生成的报道实施了限制措施。相比之下,GPT-1则通过增加模型参数和训练数据的数量来提升性能,而没有在结构上做大规模的调整。
当 GPT-3 首次亮相时,人们对其的期望值非常高,因为它不仅比其前身 GPT-2 有了显著的提升,而且它的 1750 亿参数的规模也引起了大量的讨论。然而,GPT-3 的潜力并不仅仅限于此,研究者们惊讶地发现,它不仅在处理常见的自然语言处理任务方面表现出色,而且在编写 SQL、JavaScript 等编程语言的代码以及进行简单的数学计算上也表现出了相当的实力。值得注意的是,GPT-3 的训练采用了情境学习(In-context Learning)的方法,这是一种元学习(Meta-learning)的策略。元学习的核心理念是通过少量数据来确定一个适合的初始化范围,从而使模型能够迅速适应有限的数据集,并在短时间内获得令人满意的成果。这种方法使得 GPT-3 在各种任务中都能展现出强大的学习能力,让人对它的未来发展充满期待。
通过上面的分析我们可以看出从性能角度上讲,GPT有两个目标:
提升模型在常见NLP任务上的表现效果;提升模型在其他非典型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是激发语言模型的理解能力,它通过给出更明显的指令,让模型去做出正确的行动。我们可以通过下面的例子来理解这两个不同的学习方式:
提示学习:给女朋友买了这个项链,她很喜欢,这个项链太____了。指示学习:这句话的情感是非常正向的:给女朋友买了这个项链,她很喜欢。
学习指示学习的优势在于其经多任务微调后仍具备零样本学习的能力,而提示学习则仅针对单一任务进行优化。相较于指示学习,泛化能力稍逊一筹。要更好地理解微调的概念,我们可通过图2对比分析微调在提示学习和指示学习中的作用。
图2:模型微调,提示学习,指示学习三者的异同
1.3 人类反馈的强化学习
由于训练得到的模型缺乏足够的可控性,其可以被视为对训练集分布的一种适应。这种适应性会直接影响到生成内容的质量,因为训练数据的分布是影响生成内容的关键因素。然而,有时我们期望模型能够受到人类控制,以确保生成的数据具有实用性、真实性和安全性。在此背景下,论文多次强调了“对齐”(Alignment)问题的重要性,这可以理解为模型输出内容与人类期望 output 之间的对齐。人类的喜好不仅限于生成内容的流畅性和语法准确性,还包括其有用性、真实性和安全性。
我们知道强化学习通过奖励(Reward)机制来指导模型训练,奖励机制可以看做传统模型训练机制的损失函数。奖励的计算要比损失函数更灵活和多样(AlphaGO的奖励是对局的胜负),这带来的代价是奖励的计算是不可导的,因此不能直接拿来做反向传播。强化学习的思路是通过对奖励的大量采样来拟合损失函数,从而实现模型的训练。同样人类反馈也是不可导的,那么我们也可以将人工反馈作为强化学习的奖励,基于人类反馈的强化学习便应运而生。
RLHF最早可以追溯到Google在2017年发表的《Deep Reinforcement Learning from Human Preferences》[6],它通过人工标注作为反馈,提升了强化学习在模拟机器人以及雅达利游戏上的表现效果。
图3:人类反馈的强化学习的基本原理
InstructGPT/ChatGPT中还用到了强化学习中一个经典的算法:OpenAI提出的最近策略优化(Proximal Policy Optimization,PPO)[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所示。
图4:InstructGPT的计算流程:(1)有监督微调(SFT);(2)奖励模型(RM)训练;(3)通过PPO根据奖励模型进行强化学习。
从图4中我们可以看出,InstructGPT/ChatGPT的训练可以分成3步,其中第2步和第3步是的奖励模型和强化学习的SFT模型可以反复迭代优化。
根据采集的SFT数据集对GPT-3进行有监督的微调(Supervised FineTune,SFT);收集人工标注的对比数据,训练奖励模型(Reword Model,RM);使用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%),QA(12.4%),头脑风暴(11.2%),对话(8.4%)等。
2.1.4 数据分析
因为InstructGPT/ChatGPT是在GPT-3基础上做的微调,而且因为涉及了人工标注,它们数据总量并不大,表2展示了三份数据的来源及其数据量。
表2:InstructGPT的数据分布
论文的附录A对数据的分布进行了更详细的讨论,这里我列出几个可能影响模型效果的几项:
数据中96%以上是英文,其它20个语种例如中文,法语,西班牙语等加起来不到4%,这可能导致InstructGPT/ChatGPT能进行其它语种的生成,但效果应该远不如英文;提示种类共有9种,而且绝大多数是生成类任务,可能会导致模型有覆盖不到的任务类型;40名外包员工来自美国和东南亚,分布比较集中且人数较少, InstructGPT/ChatGPT的目标是训练一个价值观正确的预训练模型,它的价值观是由这40个外包员工的价值观组合而成。而这个比较窄的分布可能会生成一些其他地区比较在意的歧视,偏见问题。
此外,ChatGPT的博客中讲到ChatGPT和InstructGPT的训练方式相同,不同点仅仅是它们采集数据上有所不同,但是并没有更多的资料来讲数据采集上有哪些细节上的不同。考虑到ChatGPT仅仅被用在对话领域,这里我猜测ChatGPT在数据采集上有两个不同:1. 提高了对话类任务的占比;2. 将提示的方式转换Q
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!