2022年11月30日,OpenAI发布了一款具有多种能力的通用大模型ChatGPT,开启了人工智能新时代的序幕。ChatGPT不仅可以生成文本、回答问题、摘要、翻译,还可以与用户进行自然和流畅的对话,根据用户的输入创造出各种有趣和有创意的内容。
截止到2023年4月底,ChatGPT的全球注册用户已达1.5亿,每月的网站访问量约为1.6亿。
ChatGPT被誉为是消费者应用中用户增长最快的记录保持者,它在发布后仅用了5天就吸引了100万的用户。
2023年3月14日,OpenAI的首席执行官山姆·奥尔特曼(Sam Altman)宣布了他们最新的人工智能系统:GPT-4。他表示,GPT-4是OpenAI迄今为止开发的最强大的大型语言模型,它可以处理各种自然语言处理任务,如文本生成、文本理解、问答、对话等。GPT-4的发布,将大模型的热度推向了新的高度。
本文将深入浅出的介绍ChatGPT的技术原理,为读者揭开这一大模型的神秘面纱。
由于ChatGPT是基于Transformer,如果对Transformer不太了解,可以先阅读下面的文章:
绝密伏击:一文了解Transformer全貌(图解Transformer)
一、GPT发展历史------从GPT-1到GPT-4
OpenAI GPT系列模型的发展历史是一个充满挑战和机遇的过程,它也反映了人工智能领域的发展趋势和前沿问题。图1-1展示了GPT模型的发展历史,除了我们熟悉的ChatGPT和GPT-4,还有专注于代码生成的Codex,以及中间版本的text-davinic。
图1-1 GPT模型发展历史
OpenAI GPT系列模型在短短五年内,不断地改进和创新,涉及模型结构、参数量、训练数据、优化技术等多个方面。表1-1展示了每个GPT模型的具体细节。
。模型 | 参数量 | 主要改进 | 发布时间 |
---|---|---|---|
GPT-1 | 1.17亿 | 使用Transformer的解码器作为模型结构,使用标准语言模型作为预训练目标,使用预训练+微调的方式解决下游任务 | 2018年6月 |
GPT-2 | 15亿 | 扩大了模型规模和训练数据,使用WebText数据集进行预训练,使用零样本或少样本学习来解决下游任务 | 2019年2月 |
GPT-3 | 1750亿 | 进一步扩大了模型规模和训练数据,使用Common Crawl数据集进行预训练,使用不同规模的模型来适应不同复杂度的下游任务 | 2020年5月 |
ChatGPT | 1750亿 | 在GPT-3.5的基础上,使用人类反馈强化学习训练,使用人类标注师撰写的问答数据进行预训练,使用奖励模型来优化回答质量 | 2022年11月 |
GPT-4 | 未知 | 进一步扩大了模型规模和训练数据,使用更高效的计算和通信优化技术,使用更多样化和多语言的数据源进行预训练 | 2023年3月 |
二、GPT-1技术原理
GPT-1 是一种生成式预训练语言模型,2018年6月由OpenAI 在Improving Language Understanding by Generative Pre-Training这篇论文中提出。该模型的训练分为两个阶段:第一阶段是无监督地用语言模型进行预训练,第二阶段是有监督地用微调的方法解决下游任务。GPT-1 在文本分类、文本蕴含、语义相似度、问答等多个下游任务上都有很好的表现,经过微调后的 GPT-1 系列模型的性能甚至超过了当时专门针对这些任务训练的最先进的模型。
2.1 GPT-1模型结构
GPT-1模型的结构是基于 Transformer 的解码器部分,它只使用了一种注意力机制,即掩码多头注意力。
图2-1 GPT-1模型结构
Transformer 是一种用于机器翻译的序列到序列模型,它由编码器和解码器两部分组成。编码器负责提取源语言的语义特征,解码器负责提取目标语言的语义特征,并生成对应的译文。GPT-1是一种用于单序列文本生成的模型,它只保留了Transformer 的解码器部分,而且只使用了掩码多头注意力这种机制。
GPT-1是一种基于Transformer解码器的模型,它使用了掩码多头注意力和前馈神经网络两种层,并且增加了网络的规模。它的层数从原来的6层增加到了12层,注意力的维度从原来的512增加到了768,注意力的头数从原来的8个增加到了12个,前馈层的隐层维度从原来的2048增加到了3072,总参数达到了1.5亿。
除了上面提到的,GPT-1和Transformer还有以下三点差异。
-
GPT-1是一种单向的语言模型,它只利用上文来预测当前位置的值。为了实现这一点,GPT-1采用了掩码多头注意力,它可以屏蔽掉下文的信息。
-
Transforme需要对输入的词嵌入加入位置嵌入,以便捕获文本的位置信息。Transformer使用了正弦和余弦函数来计算位置嵌入,而GPT-1则使用了一种不同的方法。GPT-1的位置嵌入是随机初始化的,并且可以在训练过程中进行更新,这使得它更像词向量。
-
GPT-1的训练分为两个阶段:预训练和微调。在预训练阶段,GPT-1模型学习文本的语义向量;在微调阶段,GPT-1模型根据具体任务进行调整,以解决下游任务。
接下来,我们将具体介绍GPT-1的预训练和微调(Fine-tuning)过程。预训练是指在大规模的无标注文本上训练语言模型,以学习通用的语言知识。微调是指在特定的有标注数据上对预训练模型进行微调,以适应不同的下游任务,如文本分类、情感分析、问答等。
2.2 第一阶段:无监督预训练
GPT-1模型的预训练采用了标准的语言模型,即根据上文来预测当前的词。它的目标函数如下。
其中,k 是窗口大小,θ是模型参数。
GPT-1模型由12个Transformer模块组成,每个Transformer模块只包含解码器中的掩码多头注意力和后面的前馈层,它们的计算公式如下所示。
其中
是当前单词
的上文单词向量,例如[3222, 439, 150, 7345, 3222, 439, 6514, 7945](其中数字3222是词在词表中的索引),
是词向量矩阵(词的 Embedding 矩阵),
是 position embedding,
是 Transformer 层数。
2.3 第二阶段:有监督微调
为了适应下游任务,GPT-1模型需要对其网络结构进行一些修改,如图3-2的微调部分。假设有一个带有标签的数据集C,其中,词的序列为
,标签为 y。词序列首先输入到预训练好的GPT-1模型中,经过最后一层Transformer后得到输出
,然后输入到下游任务的线性层中,得到最终的预测输出,如下所示。
其中,Wy是线性层的参数。这时,目标函数为如下形式。
这个目标函数与预训练阶段的目标函数L1相结合,得到最终的目标函数。
其中,λ是一个超参数,用来控制两个目标函数的权重。
为了适应GPT-1模型结构,不同的下游任务需要对输入进行一些转换,如图2-2所示。
图2-2 GPT-1不同下游任务的输入转换
- 分类任务。我们只需要在输入序列的前后分别加上开始(Start)和结束(Extract)标记,表示这是一个分类任务的输入。
- 句子关系任务。我们除了需要加上开始和结束标记外,在两个句子之间还需要加上分隔符(Delim),表示这是一个句子关系任务的输入。
- 文本相似性任务。我们与句子关系任务类似,不过需要生成两个文本的表示,分别用开始和结束标记包围,然后用分隔符隔开,表示这是一个文本相似性任务的输入。
- 多项选择任务。我们可以把这个任务看作是文本相似性任务的扩展,只不过我们需要生成多个文本的表示,每个文本都用开始和结束标记包围,然后用分隔符隔开,表示这是一个多项选择任务的输入。
2.4 GPT-1应用实践------中文文本分类
绝密伏击:OpenAI ChatGPT(二):Tensorflow实现GPT-1
三、 GPT-2技术原理
GPT-2是OpenAI在2019年提出的一种大规模的语言模型,它的论文标题是Language Models are Unsupervised Multitask Learners。GPT-2是在GPT-1的基础上进行了改进,它的模型结构与GPT-1几乎没有变化,只是增加了模型的层数、宽度和参数量,并且取消了微调的步骤。这意味着GPT-2只需要进行一阶段的预训练,就可以直接应用到多种不同的自然语言任务上,如文本摘要、文本生成等,而无需进行任何任务特定的微调。这样,GPT-2可以实现统一建模,提高模型的泛化能力和灵活性,并且在相关领域取得了很好的效果。
GPT-1使用了12层的Transformer作为其模型结构,而BERT最多使用了24层的Transformer。GPT-2则使用了48层的Transformer,共有15亿个参数。这使得GPT-2成为当时最大的语言模型之一。GPT-2使用了一个称为网页数据(WebText)的数据集作为其训练数据,该数据集是从网站Reddit上爬取的大量外链文本组成的,经过了一些简单的数据清洗,并且覆盖了多个领域和主题。论文中指出,大规模的模型需要更多的数据才能收敛,并且实验结果表明,目前的模型仍然处于欠拟合的状态。因此,增加数据量和模型规模是提升语言模型性能的有效途径。
之前的自然语言模型大多数采用无监督的预训练和有监督的微调的方法,但这种方法有一个缺点,就是针对每个特定任务都需要不同类型和规模的标注数据。而标注数据往往是稀缺、昂贵和单一的,导致系统缺乏泛化性和鲁棒性。OpenAI想通过构建和利用足够大且多样化的数据集,来保证最终的模型能够应用于多个不同的自然语言任务中。为此,OpenAI专门从网站Reddit上爬取了得分高的外链文本作为数据源,并且去除了维基百科等常见数据源。最终得到了一个大小为40GB的数据集,称为网页数据(WebText)。由于Reddit网站上的数据涵盖了各个领域和主题,所以既保证了数据质量、数量又保证了数据多样性。
此外,据研究表明,语言模型有望完成某些特定任务,如常识推理、情感分析等。所以OpenAI提出了去掉有监督的微调阶段,仅采用无监督预训练的语言模型来直接应用到下游任务中。OpenAI通过GPT-2论证了这种方法的可行性,并证明了语言模型在相关领域具有很大潜力。
在本节中,我们将详细介绍GPT-2模型的原理和特点,以及它在各种任务上的表现。
3.1 GPT-2模型结构
自然语言处理任务,如问答、机器翻译、阅读理解和摘要,通常需要在任务特定的数据集上进行有监督的学习才能完成。然而,OpenAI在其论文中证明了,当语言模型在一个由数百万网页组成的新数据集WebText上进行无监督的预训练时,它们就开始学习这些任务,而不需要任何明确的监督信号。例如,当给定一个文档和一个问题时,语言模型可以生成一个合理的答案,在阅读理解CoQA数据集上的F1分数达到了0.55。这说明语言模型具有很强的泛化能力和自适应能力,它们可以利用预训练阶段学习到的通用语言知识来解决各种下游任务。GPT-2就是这样一种强大的语言模型,它在零样本(zero-shot)设置下,在8个测试数据集中有7个实现了最好的性能。
- 具体方法
GPT-2 的核心是一个语言模型,语言具有天然的顺序性。和监督模型类似,语言模型是对序列的条件概率建模,通常可以表示为如下形式。
可以泛化为:
任何有监督的任务,都是在估计:P (output|input)。通常我们会用特定的网络结构去给任务建模,但如果要做通用模型,它需要对下面的目标进行建模:P(output|input, task)。
有很多方法可以建模P(output|input, task),比如特定任务的编码器和解码器。语言模型提供了一种灵活的方式来指定任务、输入、输出。比如对于机器翻译任务,训练样本可以表示为序列(翻译为法语, 英语文本, 法语文本);对于阅读理解任务,训练样本可以表示为(回答问题, 文档, 问题,答案)。可以训练单一模型,使用这种格式的样本,对不同的任务做推断。按照上面的方法,语言模型也能够学习某些监督任务,并且不需要明确具体的监督符号。
下面是网页数据WebText训练集中的一个例子。
"Mentez mentez, il en restera toujours quelque chose, " which translates as, "Lie lie and something will always remain. "
从这个例子可以看到,语料中包含了法译英的内容。那么在训练完上面的文本后,语言模型自然地学习到了法语如何翻译成英语。因此监督学习通常只是无监督学习的一个子集,所以无监督学习的全局最小也必定是监督学习的全局最小。目前的问题变为了无监督学习是否能收敛。
- 训练数据集
为了训练语言模型,OpenAI 从网上爬取了大量的语料,构建了一个名为WebText的数据集,包含了约800万篇文档,40G 的文本。这些文档涵盖了多个领域,不同于之前的工作,它们只针对单一文本领域,如新闻文章、维基百科或小说。另外,WebText还移除了维基百科(Wikipedia)的数据,以避免和其他数据集重复。
- 模型改动
GPT-2 相对于 GPT-1 在模型方面几乎没有什么修改,只是在每个编码器层的输入和最后一个注意力层的输出都加入了一个层归一化(Layer normalization)。
为了解决模型深度对残差路径的累积问题,GPT-2 采用了修正的初始化方法,将残差层的权重缩放到
倍,其中n为残差层的数量。此外,GPT-2 还扩展了词表的大小到 50257,输入的上下文大小从 512 扩展到了1024,并且使用更大的批处理大小(512)。
如下图所示,GPT-2 提供了四种不同规模的模型,最大的模型参数达到了1.5B(15亿)。
图3-1 GPT-2不同大小规模
在维基百科数据WikiText2、宾夕法尼亚数据PTB等数据集上,只经过预训练的GPT-2就打败了之前最好的版本。具体数据见下表3-1所示。
模型 | LAMBADA | CBT-CN | CBT-NE |
---|---|---|---|
之前最优版本 | 59.23% | 85.7% | 82.3% |
GPT-2(15亿) | 63.24% | 93.30% | 89.05% |
其中LAMBADA(Large-scale Automated Machine learning with DAta) 是测试长句建模能力的数据集,预测句子末尾的词汇;CBT(Children's Book Test Dataset) 检验针对不同类别的词汇。
总结而言,GPT-2在GPT-1的基础上采用单向语言模型,并舍去微调阶段,利用高质量多样化的大文本数据训练得到一个巨型模型,最终在语言模型相关的任务中取得了不错的成绩。它的主要贡献有以下三点。
-
收集了一个大语料库WebText,即使对于像GPT-2这样的大模型,也依然处于欠拟合的状态。
-
最大的GPT-2模型有15亿的参数量,用零样本提示在很多任务上进行测试,发现有7/8的任务上都达到了最优版本。
-
验证了大模型 + 大语料 + 多样性数据的组合,在多个任务上也能取得不错效果,即使不做微调。
目前,我们已经介绍了GPT-2的原理,接下来我们通过一个实例,说明GPT-2如何联合应用于文本生成任务和文本分类任务。
3.2 GPT-2应用实践------文本生成和文本分类
绝密伏击:OpenAI ChatGPT(三):Tensorflow实现GPT-2
四、GPT-3技术原理
近年来,Transformer语言模型的容量大大增加,从1亿个参数,到3亿个参数,再到15亿个参数、80亿个参数、110亿个参数,最后到了170亿个参数。每次增加都带来了文本合成和下游NLP任务的改进,有证据表明,与许多下游任务相关的对数损失随着规模的增加呈现出平稳的提升趋势。由于上下文学习涉及将许多技能和任务吸收到模型的参数中,因此有可能在不同规模下,上下文学习能力也会有类似的强大收益。
OpenAI通过训练一个1750亿参数的自回归语言模型,即GPT-3,来测试这一假设,并测量它的上下文学习能力。具体来说,在NLP数据集上对GPT-3进行了评估,以及几个旨在测试快速适应训练集中不太可能直接包含的任务的新颖任务。对于每个任务,在以下三种条件下评估GPT-3的性能。
- 少样本学习(few-shot learning),或称为上下文学习,允许尽可能多的样本(通常为10到100个) 。
- 一个样本学习(one-shot learning),只允许一个样本。
- 零样本学习(zero-shot learning),一个样本也不提供,只给出自然语言的指令给模型。
图4-1展示了一个简单任务的少样本学习过程,要求模型从一个单词中去除多余的符号。模型的表现随着自然语言任务描述的添加和模型上下文中示例的数量k的增加而提高。少样本学习也随着模型规模的增大而显著提高。虽然在这种情况下的结果特别惊人,但这些学习曲线的一般趋势在大多数任务中都成立。这些学习曲线不涉及梯度更新或微调,只涉及作为条件的示例数量的增加。
图4-1 上下文样本数量对效果的影响
图4-、1展示了在一个简单而具体的任务中,更大的模型能够更好地利用自然语言任务描述的上下文信息。我们可以看到,大模型的"上下文学习曲线"更陡峭,表明了从上下文信息中学习任务的能力得到了提高。此外,在许多任务中看到了类似的行为趋势。
4.1 如何训练GPT-3
OpenAI 使用的预训练方法,包括模型、数据和训练。GPT-3相比之前的大模型预训练,采用了多种上下文学习方式,探索了上下文内的不同学习设置。具体而言,有以下四种上下文设置(见图4-2)。
图4-2 GPT-3训练方法和微调方法对比
图4-2展示了使用将 "英语翻译成法语" 的例子来说明上面的四种方法。OpenAI 特别强调了少样本提示的结果,因为它们中的许多仅略逊于最先进的微调模型,这主要是因为通过少样本提示,可以让模型更容易理解人类意图,要知道意图理解是大模型最难完成的任务。然而,单样本提示,甚至有时是零样本提示,似乎才是与人类表现最公平的比较。
4.2 GPT-3模型结构
GPT-3基于GPT-2的模型和架构,但在Transformer的每一层中采用了密集和稀疏注意力的交替方式,类似于稀疏Transformer的设计。为了探索模型性能与模型规模之间的关系,OpenAI训练了从1.25亿到1750亿参数不等的8个模型,其中最大的一个就是GPT-3模型。根据先前的研究,当训练数据充足时,验证集损失值服从幂律分布;因此,通过比较不同规模模型的验证集损失值和下游语言任务表现,可以验证这一假设。表4-1列出了8个模型的规模和结构参数。
模型 | 参数量 | 头数 | 层数 | 学习率 |
---|---|---|---|---|
GPT-3 Small | 1.25亿 | 64 | 12 | 6e-4 |
GPT-3 Medium | 3.50亿 | 16 | 24 | 3e-4 |
GPT-3 Large | 7.60亿 | 16 | 24 | 2.5e-4 |
GPT-3 XL | 13亿 | 24 | 24 | 2.5e-4 |
GPT-3 2.7B | 27亿 | 32 | 32 | 1.6e-4 |
GPT-3 6.7B | 67亿 | 32 | 32 | 1.2e-4 |
GPT-3 13B | 130亿 | 40 | 40 | 1.0e-4 |
GPT-3 175B | 1750亿 | 96 | 96 | 0.6e-4 |
4.3 训练数据
为了训练GPT-3这样的大规模语言模型,OpenAI利用了Common Crawl数据集,这是一个包含近万亿单词的庞大语料库。但是,Common Crawl的原始版本质量不高,需要经过一系列的筛选和清洗。OpenAI 采用了以下三个步骤。
-
第一步,从Common Crawl的不同版本中下载数据,并根据其与若干高质量参考语料库的相似度进行筛选。
-
第二步,对文档进行去重处理,消除数据集内部和跨数据集之间的重复内容。将一些已知的高质量参考语料库加入到训练混合中,提高Common Crawl的多样性和覆盖度。
-
第三步,OpenAI选择了几个高质量的数据集作为补充,包括一个扩充版的WebText数据集,该数据集是通过长期抓取网络链接而得到的,两个从互联网上收集的书籍语料库(Books1和Books2)以及英文维基百科。
表4-2展示了训练时使用的最终混合数据集的情况。Common Crawl包含了2016年至2019年间的网络数据,原始压缩文本大小为45TB,经过筛选后剩余570GB。在训练过程中,Common Crawl和Books2 数据集只被使用一遍(1个epoch),而其他数据集则被重复使用2-3遍(多个epoch)。
数据集 | token数 | 占比 | epoch |
---|---|---|---|
Common Crawl | 410B | 66% | 0.44 |
WebText2 | 19B | 22% | 2.9 |
Books1 | 12B | 8% | 1.9 |
Books2 | 55B | 8% | 0.43 |
Wikipedia | 3B | 3% | 3.4 |
4.4 训练过程
图4-3显示了不同模型的计算开销,其中GPT-3 1750亿的计算开销最大。
图4-3 不同模型的训练开销
GPT-3使用了较大的模型和较大的批量大小,但相应地降低了学习率。训练过程和超参数设置的详细信息如下所示。
- 使用Adam优化器,设置参数β 1=0.9, β 2=0.95, ε=1e-8。
- 将梯度规范化到1.0。
- 使用cosin衰减,将学习率在训练完2600亿个token后衰减到原来的10%,然后继续训练。在前375亿token使用线性的热加载(warmup)。
- 动态调整批量大小,在前40~120亿令牌之间逐渐增加批量大小。
- 在训练期间对数据进行无重复采样,以最小化过拟合。
- 对模型权重使用0.1的正则化
五、ChatGPT
2022年11月30日,OpenAI发布了一款强大的大模型ChatGPT,它在不到一周的时间内就吸引了100万注册用户,这标志着通用人工智能(AGI)的时代已经来临。接下来,我们将详细介绍ChatGPT的原理和应用。
5.1 有监督微调SFT
ChatGPT是在GPT-3的基础上进行了改进的大模型,它可以与人类进行自然语言交互。要想了解 ChatGPT的核心,我们需要先明白GPT-3有哪些问题,以及ChatGPT是如何解决这些问题的。
GPT-3的最大问题是它的训练目标和用户意图不一致。也就是说,GPT-3并没有真正理解用户的意图,而只是根据语言的统计规律来生成文本。GPT-3本质上是一个语言模型,它的优化目标是最大化下一个词出现的概率。给定一个词序列作为输入,GPT-3模型要预测序列中的下一个词。例如,如果给模型输入句子:"猫坐在",它可能会预测下一个词是"垫子"、"椅子"或"地板",因为这些词在前面的上下文中出现的概率较高。
GPT-3目标函数的优点是,它们可以让模型学习语言的统计结构,例如常见的词序列和词使用模式。这通常有助于模型生成更自然、更流畅的文本,并且是每个语言模型预训练阶段的必要步骤。然而,这些目标函数也有缺点,那就是它们无法区分重要错误和不重要错误。例如,如果给模型输入句子:"罗马帝国[掩码]奥古斯都的统治" 它可能会预测掩码位置应该填入"开始于"或"结束于",因为这两个词出现的概率都很高。但是对于历史知识来说,这两个答案有着天壤之别。
更一般地说,这些训练策略可能导致语言模型在一些需要更深入地理解语言含义的任务或上下文中出现偏差。因此,这样的模型很难泛化到不同类型和风格的问题上,并且很难理解用户的真实意图。经常会出现答非所问的情况。
因此,ChatGPT要解决的核心问题就是如何让模型和用户对齐。也就是说,如何让模型能够理解用户提出的不同类型和风格的问题,并且能够生成优质、有用、无害、不歧视的答案。
ChatGPT的核心方法就是引入"人工标注数据+强化学习"来不断微调预训练语言模型。在"人工标注数据+强化学习"框架下,训练ChatGPT主要分为以下三个阶段。
- 第一阶段使用标准数据(提示和对应的回答)进行微调,也就是有监督微调(Supervised Fine-Tuning, SFT)。
- 第二阶段,训练奖励模型(Reward Model, RM)。给定提示(大约3万左右),使用微调后的模型生成多个回答,人工对多个答案进行排序,然后使用成对学习(pair-wise learning)来训练奖励模型,也就是学习人工标注的顺序(人工对模型输出的多个答案按优劣进行排序)。
- 第三阶段,使用强化学习,微调预训练语言模型。利用奖励模型的打分结果来更新模型参数,从而使模型更加符合用户的期望。
为了让ChatGPT能够理解用户提出的问题中所包含的意图,首先需要从用户提交的问题中随机抽取一部分,由专业的标注人员给出相应的高质量答案,然后用这些人工标注好的<提示, 答案> 数据来微调 GPT-3模型,如图5-1所示。
图5-1 第一阶段:有监督微调
通过这个过程,我们可以认为ChatGPT已经具备了一定的能力,能够理解用户问题中的意图,并且根据意图生成相对高质量的答案。但是由于标注数据太少,模型的效果还不够理想。我们来看一下这部分标注数据包含了哪些任务类型,如表5-1所示。
问题类型 | 占比(%) |
---|---|
生成任务(Generation) | 45.6% |
开放问答(Open QA) | 12.4% |
头脑风暴(Brainstorming) | 11.2% |
聊天(Chat) | 8.4% |
重写(Rewrite) | 6.6% |
摘要(Summarization) | 4.2% |
分类(Classification) | 3.5% |
其它(Other) | 3.5% |
封闭问答(Closed QA) | 2.6% |
抽取(Extract) | 1.9% |
其中最主要的是生成任务,例如生成故事、诗歌、歌词、代码等。其次是一些问答任务,例如回答历史、科学、文化等方面的问题。还有一些头脑风暴任务,例如给出创意、建议、想法等。下面是一些具体的例子。有监督微调就是使用这些问题和答案来微调GPT-3模型。
问题类型 | Prompt |
---|---|
头脑风暴(Brainstorming) | 列出5个方法用于重新对职业充满热情 |
生成任务(Generation) | 编写一个短篇故事,讲述一只熊前往海滩,结识了一只海豹,然后返回家中的经历。 |
重写(Rewrite) | 将下面一段话翻译成法语: <English sentence> |
5.2 训练奖励模型
这个阶段的主要目的是通过人工标注数据来训练奖励模型(Reward Model, RM)。具体而言,从用户提交的问题中随机抽取一部分(大部分和第一阶段的相同),使用第一阶段微调好的模型,对每个问题生成K 个不同的答案(这里K 是4到9之间的一个数)。这样就得到了<问题, 回答1>, <问题, 回答2>,...,< 问题, 回答K >数据。然后,标注人员根据多个标准(例如相关性、信息量、有害性等)综合考虑,对K 个回答进行排序,给出K 个回答的排名顺序,这就是这个阶段人工标注的数据。
接下来,利用这个排序数据来训练奖励模型,采用的训练方法是成对学习(pair-wise learning)。对于K 个排序结果,两两组合,形成Ck2个训练数据对,ChatGPT采用成对学习损失值来训练奖励模型。奖励模型接受一个输入<问题, 回答>,输出一个评价答案质量高低的分数(score)。对于一对训练数据<回答1, 回答2>,假设人工排序中回答1排在回答2前面,那么损失函数就鼓励奖励模型对<问题, 回答1> 的分数要高于<问题, 回答2>的分数。具体过程见图5-2所示。
图5-2 第二阶段:训练奖励模型
奖励模型的损失值可以表示为如下的形式。
其中
表示奖励模型的输出,
是给定的 prompt,
表示对于的回答。
和
表示回答
排在回答
前面 ,类似上面的回答1排在回答2前面。
总结第二阶段的过程,首先,监督模型根据每个提示生成K个回答,并按照质量从高到低排序。然后,人工将这些回答作为训练数据,采用成对学习的方法来训练奖励模型。最后,对于训练好的奖励模型,它可以接收<问题, 回答>作为输入,输出回答的质量得分。得分越高,说明回答的质量越高。
5.3 使用强化学习微调预训练模型
第三阶段是使用强化学习微调预训练模型,无需人工标注数据,只需借助上一阶段训练好的奖励模型作为奖励函数。具体步骤如下:首先,从用户提交的问题中随机抽取一些新的命令(即与前两个阶段不同的问题),并用第一阶段经过监督微调的模型初始化近端策略优化(Proximal Policy Optimization, PPO)模型的参数。然后,对于每个抽取的问题,用近端策略优化模型生成回答,并用奖励模型评估回答的质量得分。这个得分就是奖励模型给出的回答的整体收益。整个过程如图5-3所示。
图5-3 第三阶段:使用强化学习微调预训练模型
强化学习的优化目标可以表示为如下形式。
公式(8)中的第一项是最大化奖励模型的得分,第二项是让强化学习的输出不要偏离有监督微调(SFT)太多,最后一项是保证微调效果的同时,原有语言模型的效果不会变差。
经过强化学习的微调,13亿参数模型在某些任务上甚至超过了经过有监督微调的1750亿 GPT-3模型的效果。
六、最强大模型------GPT-4
2023年3月14日,OpenAI的首席执行官山姆·奥尔特曼(Sam Altman)宣布了他们最新的人工智能系统:GPT-4。他表示,GPT-4是OpenAI迄今为止开发的最强大的大型语言模型,它可以处理各种自然语言处理任务,如文本生成、文本理解、问答、对话等。GPT-4相比于前一代的ChatGPT,实现了以下几个方面的飞跃式提升。
- 强大的识图能力。GPT-4可以直接处理图像和文字的混合输入,理解图表中数据的含义,并做进一步计算。甚至可以直接把论文截图发给它,GPT-4可以按像素处理其中的文字和图片,并给出对整篇论文的总结摘要。
- 文字输入限制提升至2.5万字。GPT-4可以接受更长的输入文本,从而处理更复杂的问题和任务。例如,在修改代码方面,用户只需要把1万字的程序文档一股脑扔给GPT-4就行,格式也不用管,GPT-4会自动识别并修正代码中的错误和缺陷。
- 回答准确性显著提高。GPT-4在模拟律师考试中,取得了前10%的好成绩,相比之下ChatGPT是倒数10%。在美国高考SAT试题中,GPT-4也在阅读写作中拿下710分高分、数学700分(满分800)。
- 能够生成歌词、创意文本,实现风格变化。GPT-4可以根据用户的指令或者示例,创造各种内容,如歌词、故事、诗歌、名人模仿等,并且可以根据用户的喜好调整风格和语气。
OpenAI还在为机器学习模型设计的传统基准上评估了GPT-4。结果显示,GPT-4大大优于现有的大型语言模型,以及大多数最优模型。接下来我们具体介绍下GPT-4做了哪些不一样的事,这个最强大模型是如何诞生的。
6.1 GPT-4的涌现能力
复杂系统学科已经对"涌现"现象进行了深入的研究。涌现现象是什么呢?它指的是当一个复杂系统由许多微观个体组成,这些个体相互作用并达到一定的数量时,就会在宏观层面上表现出一些微观个体无法解释的特性。我们可以把这种特性称为涌现现象。
在我们的日常生活中,也有很多涌现现象的例子,比如雪花、堵车、动物迁徙、涡流等。以雪花为例,它是由水分子构成的,水分子非常小,但是当大量的水分子在外界温度变化的影响下相互作用时,就会在宏观层面上形成一个对称、规则、美丽的雪花。
那么,我们可以问一个问题:超级大模型是否会产生涌现现象呢?很多人可能已经知道答案了,那就是肯定的。
我们来看看大语言模型的规模发展情况。如果要总结近几年来大语言模型最大的技术进步,那可能就是模型规模的快速增长了,如图3-12所示。目前,大规模模型通常超过了1000亿个参数。 例如,在2022年11月,OpenAI发布了ChatGPT,它有1750亿个参数。而在今年3月发布的GPT-4则有万亿级别的参数。
图6-1 大模型参数增长
随着大语言模型规模的不断扩大,它们对下游任务的影响也有所不同。根据任务的类型,我们可以将它们分为以下三类。
- 第一类任务遵循伸缩法则:这类任务通常是知识密集型的,需要大量的常识和事实。因此,当模型规模增加时,任务的效果也会持续提升,说明这类任务对模型中蕴含的知识有很高的需求。
- 第二类任务呈现出饱和现象:这类任务一般是技能型的,需要一定的逻辑和推理能力。当模型规模达到一定程度时,任务的效果就会趋于稳定,说明这类任务对模型中蕴含的技能有一定的限制。
- 第三类任务较为少见,呈现出U形曲线:这类任务通常是创造性的,需要一定的想象力和创新能力。当模型规模增加时,任务的效果先会下降,然后再上升。当模型规模不够大时,效果会受到噪声和偏差的影响,但当模型规模足够大时,效果会因为涌现现象而提升。如果对这类任务使用思维链(Chain of Thought, CoT)技术,就可以将它们转化为第一类任务,使得效果随着模型规模增加而持续上升。
因此,我们可以认为模型规模增加是一种必然的趋势,它会带来涌现现象的出现,从而提高任务的效果。
目前有两种被认为具有涌现能力的任务,第一种是上下文学习(少样本提示),用户只需要给出几个例子,大模型就可以在不调整参数的情况下处理好任务。 第二种具有涌现能力的技术是思维链。思维链本质上是一种特殊的少样本提示,它要求用户把一个复杂问题的推导过程写出来,并提供给大语言模型,这样大语言模型就可以完成一些相对复杂的推理任务。那么,一个模型要达到多大的规模才能具备涌现能力呢?这个问题很难有一个确定的答案。不同类型的任务,在上下文学习方面,需要多大的模型才能具备涌现能力,这与具体的任务有关。例如三位数加法任务,只要模型达到130亿参数,就可以具备涌现能力;但是对于数学推理任务来说,需要千亿模型才能做到这一点。我们只能说,在上下文学习方面,如果一个模型达到1000亿参数,那么它就可以在大多数任务上具备涌现能力。
如今GPT-4的模型规模已经达到了万亿级别,是ChatGPT的10倍以上。这样巨大的规模带来了显著的效果提升,在小学数学应用题GSM8K 上,准确率从57%提升到了92%,显示出了"涌现"能力。
当然,除了模型规模之外,还有很多其他因素会影响涌现现象的出现,比如数据、模型结构、微调、强化等。接下来,我们将介绍GPT-4在这些方面做了哪些优化。
6.2 大模型预测扩展
GPT-4项目的一个重要目标是构建一个能够支持多任务预测的深度学习技术栈。这是因为对于像GPT-4这样的超大规模的训练,进行特定任务的微调非常困难。为了克服这个挑战,OpenAI开发了一套基础设施和优化方法,使得GPT-4可以适应多种任务。这些改进让我们可以使用更小的模型(计算成本降低了1000到10000倍)。
1. 损失值预测
为了训练LLM模型,OpenAI用一个幂律函数来近似表示最终的损失函数和计算成本的关系。为了验证优化方法是否具有可扩展性,OpenAI使用一个缩放定律来预测GPT-4的最终损失,表示为如下的形式。
这个预测是基于使用与GPT-4相同的方法训练的模型,但是计算资源只有GPT-4的1/10000。这个预测是在训练开始后不久就做出的,没有借助任何中间结果。拟合的缩放定律能够非常精确地预测GPT-4的最终损失,如图6-1所示。
图6-1 预测模型损失值
为了提升大模型的预测扩展,OpenAI开发了一系列的基础设施和优化方法,使得GPT-4可以在不同规模下表现出可预测的性能。为了验证这种可扩展性,OpenAI提前准确地预测了GPT-4在内部代码库(不属于训练集)上的最终损失。
在GPT-4技术报告里提到大模型的"能力预测(Capability Prediction)"是一个非常有价值的新研究方向。它可以用小模型来预测大模型在某些参数组合下的某种能力,如果预测足够精确,就可以大大缩短训练周期,同时大大降低试错成本,所以这个方向无论从理论价值还是实际价值都很高,非常值得深入研究具体技术方法。
- 在HummanEval编程数据上预测损失值
如果我们能够在训练之前预测模型的能力,那么我们就可以更好地做出关于对齐、安全和部署的决策。除了预测最终损失之外,OpenAI还开发了一种方法,可以预测一些更具解释性的能力指标。其中一个指标是模型在HumanEval数据集上的通过率。HumanEval是OpenAI自己收集的一个数据集,它包含了164个原创的编程问题,涉及到语言理解、算法、简单数学和软件面试等方面。OpenAI成功地用只有1/1000计算资源的模型来预测了GPT-4在HumanEval数据集上的通过率,如图6-2所示。
图6-2 在HummanEval上的损失值预测
对于HumanEval中的某些问题,随着规模的增大,性能可能会下降。尽管如此,OpenAI仍然发现了一个近似的幂律关系,如下所示。
其中
和
为正常数,
是数据集中的问题子集。假设这种关系对该数据集中的所有问题都成立。在实践中,由于非常低的通过率很难或不可能估计,因此只关注那些每个模型至少解决了一个问题的问题P 和模型M,即使只有一些大的样本。
6.3 GPT-4性能分析
OpenAI评估了GPT-4在各种基准测试中的表现,这些测试包括一些原本是为人类设计的考试。这些考试都是从公开的材料中获取的,有选择题和非选择题两种格式。OpenAI没有对这些考试进行特殊的训练,只是让模型在训练期间看到了少数考试中的问题。OpenAI为每种格式设计了不同的提示,并在需要的时候将图像作为输入。评估方法是基于一组验证考试的表现来设计的,并在另一组测试考试上报告最终结果。综合得分是通过使用每个考试的公开可用方法来合并选择题和非选择题得分来计算的。
GPT-4在各种专业测试和学术基准上的表现达到了人类水平。例如,它通过了模拟律师考试,并且分数在前10%的范围内;相比之下,ChatGPT的分数只有后10%的水平。
GPT-4在传统的语言模型基准上也大大优于现有的大型语言模型,以及大多数最优模型。为了初步了解GPT-4在其他语言上的能力,在测试的26种语言中,GPT-4在24种语言上优于ChatGPT和其他大语言模型的英语语言性能。GPT-4还在用户意图理解方面比以前的模型有了大幅改进。在一个由5214个提示组成的数据集上,这些提示提交给了ChatGPT和OpenAI API,与ChatGPT生成的结果相比,GPT-4生成的结果在70.2%的提示上被优先选择。
除此之外,GPT-4在考试中的能力似乎主要源自预训练过程,而不受人工反馈强化学习的影响。在测试的多项选择题中,基本的GPT-4模型和人工反馈强化学习模型平均表现相同。表3-11是GPT-4在各项评测中的表现。
GPT-4的一大特点是支持图片输入,除了文字处理能力之外。GPT-4可以接受文本和图像形式的提示,新能力与纯文本设置并行,允许用户指定任何视觉或语言任务。
GPT-4 可以在任意交错排列的文本和图像输入下生成文本输出。在一系列领域中,GPT-4表现出与仅有文本输入时类似的能力。这些领域包括具有文本和照片、图表或屏幕截图的文档等。
GPT-4在各项评测中的表现
任务类型 | GPT-4(少样本提示) | ChatGPT | 语言模型最优版 | 最优版 |
---|---|---|---|---|
MMLU(多项选择题54个学科) | 86.4%(5个样本提示) | 70.0%(5个样本提示) | 70.7%(5个样本提示) | 75.2% |
HellaSwag(常识推理) | 95.3%(10个样本提示) | 85.5%(10个样本提示) | 84.2% | 85.6% |
ARC(小学多项选择题) | 96.3%(25个样本提示) | 85.2%(25个样本提示) | 85.2%(8个样本提示) | 85.6% |
WinoGrande(代词消解的常识推理) | 87.5%(5个样本提示) | 81.6%(5个样本提示) | 85.1%(5个样本提示) | 85.1% |
HummanEval(python编程题) | 67.0%(零样本提示) | 48.1%(零样本提示) | 26.2%(零个样本提示) | 65.8% |
DROP(阅读理解和算术) | 80.9%(3个样本提示) | 64.1%(3个样本提示) | 70.8%(1个样本提示) | 88.4% |
GSM8K(小学数学应用题) | 92.0%(5个样本提示) | 57.1%(5个样本提示) | 58.8%(8个样本提示) | 87.3% |
参考
GPT-1:Improving Language Understanding by Generative Pre-Training
GPT-2:Language Models are Unsupervised Multitask Learners
Training language models to follow instructions with human feedback
绝密伏击:OpenAI ChatGPT(四):十分钟读懂 GPT-3
绝密伏击:OpenAI ChatGPT(三):Tensorflow实现GPT-2
绝密伏击:OpenAI ChatGPT(三):十分钟读懂 GPT-2
绝密伏击:OpenAI ChatGPT(二):Tensorflow实现GPT-1