文章主题:自然语言处理, GPT模型, 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相比并没有明显的改进,其关键思想在于“所有的有监督学习都是无监督语言模型的一个子集”,这一理念奠定了提示学习的基础。尽管在刚出生时,GPT-2引起了广泛关注,甚至被誉为“AI界最危险的武器”,但由于它可以生成几乎可以欺骗人类的新闻,许多网站对其产生了担忧并禁止使用。值得注意的是,GPT-2在训练数据上的提升,采用了更多参数的模型和更大规模的训练数据,这使得其性能得到了显著提升。
当 GPT-3 首次亮相时,人们对其的期望值非常高,因为它不仅比其前身 GPT-2 有了显著的提升,而且它的 1750 亿参数的规模也引起了广泛的关注。然而,除了其在 NLP 任务上的卓越表现外,研究人员还发现 GPT-3 在编写 SQL、JavaScript 等编程语言的代码以及进行简单数学运算方面也有着不俗的表现。这一发现让人们更加惊讶的是,GPT-3 的训练所采用的方法是情境学习(In-context Learning),这是元学习(Meta-learning)的一种变体。元学习的核心理念在于,通过仅使用少量数据来寻找一个最佳的初始化范围,从而使模型能够在有限的數據集上迅速适应并取得良好的效果。
通过上面的分析我们可以看出从性能角度上讲,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 之间的对齐。人类的喜好不仅限于生成内容的流畅性和语法准确性,还包括其有用性、真实性以及无害性。
我们清楚,强化学习借助奖励机制来引导模型训练,这个奖励机制可以被视为传统模型训练中的损失函数。相较于损失函数,奖励机制更加灵活且多样化(例如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将变得相对容易。简而言之,这两种方法都基于GPT-3的网络架构,通过指示学习来构建和训练用于预测内容效果的奖励模型(RM)。最终,这个奖励模型的评分将用于指导强化学习模型的训练。图4展示了InstructGPT/ChatGPT的训练流程。
图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
自然语言处理, GPT模型, Transformer结构, 预训练任务
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!