GPT,GPT-2,GPT-3,InstructGPT的进化之路
ChatGPT 火遍圈内外,突然之间,好多人开始想要了解 NLP 这个领域,想知道 ChatGPT 到底是个什么?作为在这个行业奋斗5年的从业者,真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章,总结下GPT 这条技术路线的初心。
其实,ChatGPT 的成功并非一朝一夕,而是 OpenAI 长达 4 年多持续努力、不懈追求取得的成果。从 2018 年的初代 GPT 开始,到 GPT-2、GPT-3、InstructGPT,以及后续一系列变体模型(统称 GPT-3.5 系列),到如今的 ChatGPT4,每一步都是不可或缺的。所以,ChatGPT 不是一次伟大创新的产物,而是许多个阶段性创新持续叠加的结果。
本文将介绍以下内容:
- GPT
- GPT-2
- GPT-3
- InstructGPT
- GPT 系列进化时间线
一、GPT
1、背景
让我们把视角回到 2018 年,那个时候 NLP 在深度学习上基本还处于 word2vec 以及为不同任务做定制化深度模型的情况,虽然已经有 ELMo 这类预训练模型出现,但是其影响力还远远不足。在这个背景下,GPT 第一代预训练语言模型出现了。
GPT 原文标题为 Improving Language Understanding by Generative Pre-Training,即使用通用的预训练模型来提升语言理解能力(Generative Pre-Training 也可理解为“生成式预训练”)。GPT 这个名字就来源于 Generative Pre-Training。
从论文标题可以引出了两个问题:
-
什么是通用?在学习通用的,迁移性强的文本特征表达时,什么目标函数是有效的?
-
有了通用的特征表达之后,如何将它迁移到不同下游任务?
GPT 使用了预训练 + 微调的方式解决了这两个问题。
2、模型结构
在预训练阶段,GPT 选择 transformer 的 decoder 部分作为模型的主要模块,transformer 是 2017年 google 提出的一种特征抽取模型,GPT 以多层 transformer 堆叠的方式构成了整个预训练模型结构。
假设有一段文本,把每个词计作 U i Ui Ui ,GPT 使用标准的语言模型目标函数来最大化下面的似然函数:
具体来说是要预测每个词 U i U_i Ui 的概率,这个概率是基于它前面 U i − k U_{i-k} Ui−k 到 U i − 1 U_{i-1} Ui−1 个词,以及模型 θ \theta θ 。这里的 k 表示上文的窗口大小,理论上来讲 k 取的越大,模型所能获取的上文信息越充足,模型的能力越强。
模型对输入 U 进行特征嵌入得到 transformer 第一层的输入 h 0 h_0 h0,再经过多层 transformer 特征编码,使用最后一层的输出即可得到当前预测的概率分布:
其中, W e W_e We 为词嵌入矩阵, W p W_p Wp 为位置嵌入矩阵, H l H_l Hl 为第 l l l 层 transformer 的输出, h n h_n hn 为最后一层 transformer 的输出, n n n 为模型层数。
在微调阶段,在有特定下游任务标签的情况下,给定输入序列 x 1 x_1 x1 到 x m x_m xm ,预测 y y y 的概率,即将序列输入到预训练好的模型中,得到最后一层 transformer 的最后一个 token x m x^{m} xm 的特征 h i m h^{m}_i him ,再经过预测层就可以得到对应标签的概率分布:
微调阶段的目标函数为:
最后将两个目标函数联合训练得到的效果最好,即最终目标函数为:
以我们现在的视角来看,选择 transformer 还是 RNN,这个答案是显而易见的,但是在当时那个时间点那个环境下,选择 transformer 还是 RNN 作为预训练模型结构并不是一个显而易见的问题。在模型选择时,作者发现与 RNN 相比,Transformer 具有更加结构化的记忆单元来解决长距离依赖问题,处理更长的文本信息,从而使得学习到的特征在各个任务中的迁移具有更强的鲁棒性。
我们都知道,Transformer 模型一开始是用来做 seq2seq 任务的,所以它包含编码器和解码器两个部分;他们两者的区别主要是,编码器在抽取序列中某一个词的特征时能够看到整个序列中所有的信息,即上文和下文同时看到;而解码器中因为有 mask 机制的存在,使得它在编码某一个词的特征时只能看到自身和它之前的文本信息。GPT 模型选择了 Transformer 的 decoder,也就是解码器的部分,也正是因为 GPT 的预训练目标函数选取的是标准的语言模型目标函数,使得模型在预测某一个词的时候只考虑上文信息而不参考下文。
大家知道,BERT 在预训练的时候选择的不是标准的语言模型作为目标函数,而是一种 mask 语言模型, 也就是在预测句子中某一个词的时候可以同时看到它前后的所有上下文信息,类似于一种完形填空任务,所以 BERT 选择的是 Transformer 的编码器模块。
编码器和解码器的选取倒不是 GPT 和 BERT 的区别,它们的区别主要是预训练目标函数的选取,有人认为 GPT 选择的是一个更难的训练目标,它是根据前面的信息去预测下文,预测未来肯定是比完形填空难度要更大的。这也能从某种程度上解释了为什么相同规模的 GPT 和 BERT 模型,GPT 的效果要比 BERT 差。但是从另一个角度去想,如果能够把预测未来这个事情做好的话,它最终所能达到的效果的天花板一定是更高的,这可能也是 OpenAI 从一开始到现在一直坚持使用标准语言模型目标函数来做预训练模型的其中一个原因 吧,当然这只是一种猜想。事实证明,从 GPT-3 开始,到最近的 ChatGPT,OpenAI 所取得的令人惊艳的效果也一定程度上证明了他们的选择的正确性。
3、模型训练
训练数据方面,**初代 GPT 使用了 BooksCorpus 数据集,文本大小约 5 GB,包含 7400w+ 的句子。**该数据集是由约 7000 本独立的、不同风格类型的书籍组成。选择该数据集主要的好处是书籍文本包含大量高质量长句,保证模型学习长距离信息依赖。
模型的一些关键参数为:
参数 | 取值 |
---|---|
transformer 层数 | 12 |
特征维度 | 768 |
transformer head 数 | 12 |
总参数量 | 1.17 亿 |
4、下游任务微调
如上图所示,分别例举了 NLP 中四个常见任务(文本分类、文本蕴含、文本相似度、问答任务)作为下游任务应用到 GPT 模型时,其输入序列是如何构造的,以及对应的预测层是如何设计的。
总的来说,都是通过在序列前后添加 Start 和 Extract 特殊标识符来表示开始和结束,序列之间添加必要的 Delim 标识符来表示分隔,当然实际使用时不会直接用 “Start/Extract/Delim” 这几个词,而是使用某些特殊符号。基于不同下游任务构造的输入序列,使用预训练的 GPT 模型进行特征编码,然后使用序列最后一个 token 的特征向量进行预测。
可以看到,不论下游任务的输入序列怎么变,最后的预测层怎么变,中间的特征抽取模块都是不变的,具有很好的迁移能力。
5、初代 GPT 总结
初代 GPT 到底做了什么?有哪些贡献?
第一, 它是最早一批提出在 NLP 任务上使用 pre-train + fine-tuning 范式的工作。
第二, GPT 的实验证明了模型的精度和泛化能力会随着解码器层数增加而不断提升,而且目前还有提升空间,如下图:
第三,预训练模型具有 zero-shot 的能力,并且能随着预训练的进行不断增强,如下图:
值得注意的是,上述第二和第三点,也直接预示着后续 GPT-2 和 GPT-3 的出现。
其实 pre-train + fine-tuning 在计算机视觉里面早在好多年前已经成为主流的算法,但是在 NLP 中一直没有流行起来,主要还是因为在 NLP 里面没有像 ImageNet 那样大规模标好的数据集,这也导致相当一段时间内,深度学习在 NLP 的进展相对比较缓慢,直到 GPT 和 BERT 的出现才渐渐打开局面。
如果说使用大规模无标注的文本进行模型的预训练使 NLP 的发展往前走了一大步,那么 GPT 系列一直在努力推动的 zero-shot 可以说是走了另一大步。
为了进一步验证 zero-shot 的能力,OpenAI 在 GPT-1 提出一年后,推出了 GPT-2。
二、GPT-2
1、背景
GPT-2 原文标题为 Language Models are Unsupervised Multitask Learners,字面意思为语言模型是一种无监督多任务学习器。
标题中的多任务学习与我们常规理解的有监督学习中的多任务不太一样,这里主要是指模型从大规模数据中学到的能力能够直接在多个任务之间进行迁移,而不需要额外提供特定任务的数据,因此引出了 GPT-2 的主要观点:zero-shot。
不论是 GPT-1 还是 BERT,NLP 任务中比较主流的 pre-train + fine-tuning 始终还是需要一定量的下游任务有监督数据去进行额外的训练,在模型层面也需要额外的模块去进行预测,仍然存在较多人工干预的成本。GPT-2 想彻底解决这个问题,通过 zero-shot,在迁移到其他任务上的时候不需要额外的标注数据,也不需要额外的模型训练。
在 GPT-1 中,下游任务需要对不同任务的输入序列进行改造,在序列中加入了开始符、分隔符和结束符之类的特殊标识符,但是在 zero-shot 前提下,我们无法根据不同的下游任务去添加这些标识符,因为不进行额外的微调训练,模型在预测的时候根本不认识这些特殊标记。所以在 zero-shot 的设定下,不同任务的输入序列应该与训练时见到的文本长得一样,也就是以自然语言的形式去作为输入, 例如下面两个任务的输入序列是这样改造的:
机器翻译任务:translate to french, { english text }, { french text }
阅读理解任务:answer the question, { document }, { question }, { answer }
为什么上述输入序列的改造是有效的?或者说为什么 zero-shot 是有效的?这里引用原文的一句话:
Our approach motivates building as large and diverse a dataset as possible in order to collect natural language demonstrations of tasks in as varied of domains and contexts as possible.
大概意思是,从一个尽可能大且多样化的数据集中一定能收集到不同领域不同任务相关的自然语言描述示例,例如下图中展示了英法互译任务在自然语言中出现的示例,表明了不同任务的任务描述在语料中真实存在:
所以 GPT-2 的核心思想就是,当模型的容量非常大且数据量足够丰富时,仅仅靠语言模型的学习便可以完成其他有监督学习的任务,不需要在下游任务微调。
2、模型结构
在模型结构方面,整个 GPT-2 的模型框架与 GPT-1 相同,只是做了几个地方的调整,这些调整更多的是被当作训练时的 trick,而不作为 GPT-2 的创新,具体为以下几点:
-
后置层归一化( post-norm )改为前置层归一化( pre-norm );
-
在模型最后一个自注意力层之后,额外增加一个层归一化;
-
调整参数的初始化方式,按残差层个数进行缩放,缩放比例为 1 : n \sqrt{n} n ;
-
输入序列的最大长度从 512 扩充到 1024;
其中,关于 post-norm 和 pre-norm 可以参考《Learning Deep Transformer Models for Machine Translation》。两者的主要区别在于,post-norm 将 transformer 中每一个 block 的层归一化放在了残差层之后,而 pre-norm 将层归一化放在了每个 block 的输入位置,如下图所示:
GPT-2 进行上述模型调整的主要原因在于,随着模型层数不断增加,梯度消失和梯度爆炸的风险越来越大,这些调整能够减少预训练过程中各层之间的方差变化,使梯度更加稳定。
最终 GPT-2 提供了四种规模的模型:
其中 117M 参数等价于 GPT-1 模型,345M 参数模型用于对标同期的 BERT-large 模型。
3、训练数据与实验效果
在训练数据方面,为了保证 zero-shot 的效果,必须要足够大且覆盖面广。所以 GPT-2 中的做法是,只爬取人工筛选过的web数据。但是人工筛选整个web的数据会非常昂贵,作为替代,GPT-2通过爬取 Reddit上所包含的链接(这里是以一种启发式的方法去获取人工筛选的数据,GPT-2认为Reddit这个社交媒体上挂的链接,可能是人们比较感兴趣或认为有价值的,因此存在数据质量问题的概率比较小)。最后得到的数据集叫 WebText。它选取了 Reddit 上的高质量帖子,最终得到 4500w 网页链接,800w 有效的文本文档,语料大小为 40G。
在实验效果上,由于 GPT-2 主要是做 zero-shot,所以在实验部分,很多的实验对比都是在无监督的设定下进行的,也就是说他对比的都是无监督的算法。
从上述效果可以看到,GPT-2 在较多任务上对比无监督算法取得了一定的提升,证明了 zero-shot 的能力。但是,在很多任务上与有监督微调的方法相比还是有一些差距的,这可能也是 GPT-2 在当时影响力没有那么大的一个原因。
4、与 GPT-1 的区别
整体来看,GPT-2 相比于 GPT-1 有如下几点区别:
- 主推 zero-shot,而 GPT-1 为 pre-train + fine-tuning;
- 训练数据规模更大,GPT-2 为 800w 文档 40G,GPT-1 为 5GB;
- 模型大小,GPT-2 最大 15 亿参数,GPT-1为 1 亿参数;
- 模型结构调整,层归一化和参数初始化方式;
- 训练参数,batch_size 从 64 增加到 512,上文窗口大小从 512 增加到 1024,等等;
三、GPT-3
1、背景
虽然 GPT-2 主推的 zero-shot 在创新度上有比较高的水平,但是由于其在效果上表现平平,所以在业界并没有取得比较大的影响力,而 GPT-3 正是为了解决效果上的问题而提出的。GPT-3 不再去追求那种极致的不需要任何样本就可以表现很好的模型,而是考虑像人类的学习方式那样,仅仅使用极少数样本就可以掌握某一个任务,因此就引出了 GPT-3 标题 Language Models are Few-Shot Learners。
这里的 few-shot 不是像之前的方式那样,使用少量样本在下游任务上去做微调,因为在 GPT-3 那样的参数规模下,即使是参数微调的成本也是高到无法估计。
2、模型结构
在模型结构上,GPT-3 延续使用 GPT 模型结构,但是引入了 Sparse Transformer 中的 sparse attention 模块(稀疏注意力)。
sparse attention 与传统 self-attention(称为 dense attention) 的区别在于:
dense attention:每个 token 之间两两计算 attention,复杂度 O(n²) sparse
attention:每个 token 只与其他 token 的一个子集计算 attention,复杂度 O(n*logn)
具体来说,sparse attention 除了相对距离不超过 k 以及相对距离为 k,2k,3k,… 的 token,其他所有 token 的注意力都设为 0,如下图所示:
使用 sparse attention 的好处主要有以下两点:
-
减少注意力层的计算复杂度,节约显存和耗时,从而能够处理更长的输入序列;
-
具有“局部紧密相关和远程稀疏相关”的特性,对于距离较近的上下文关注更多,对于距离较远的上下文关注较少;
关于 sparse attention 详情可参考《Generating Long Sequences with Sparse Transformers》。
最终 GPT-3 在训练过程中得到了如下不同规模的模型:
其中规模最大的模型称为 GPT-3,模型参数量为 1750 亿。
3、下游任务评估方法
如上图所示,GPT-3 在下游任务的评估与预测时,提供了三种不同的方法:
Zero-shot:仅使用当前任务的自然语言描述,不进行任何梯度更新;
One-shot:当前任务的自然语言描述,加上一个简单的输入输出样例,不进行任何梯度更新;
Few-shot:当前任务的自然语言描述,加上几个简单的输入输出样例,不进行任何梯度更新;
其中 Few-shot 也被称为 in-context learning,虽然它与 fine-tuning 一样都需要一些有监督标注数据,但是两者的区别是:
- 【本质区别】 fine-tuning 基于标注数据对模型参数进行更新,而 in-context learning 使用标注数据时不做任何的梯度回传,模型参数不更新;
- in-context learning 依赖的数据量(10~100)远远小于 fine-tuning 一般的数据量;
最终通过大量下游任务实验验证,Few-shot 效果最佳,One-shot 效果次之,Zero-shot 效果最差:
上图中,横坐标为模型参数量,纵坐标为任务精度,图中大量灰色线表示不同下游任务,橙色/绿色/蓝色线是下游任务效果的平均值。
4、训练数据
由于 GPT-3 在模型规模上的扩大,在训练数据方面也必须进行扩充来适配更大的模型使其发挥出相应的能力。
GPT-3 使用了多个数据集,其中最大的是 CommonCrawl,原始未处理的数据达到了 45TB,其实在 GPT-2 的时候他们就有考虑使用这个数据集,但是后来还是觉得这个数据集太脏了所以没用,但是现在 GPT-3 的模型规模太大了,使得训练对数据量的需求也增加了很多,他们不得不重新考虑这个数据集。因此,他们必须在这个数据集上做一些额外的数据清洗工作来尽量保证数据的质量。
数据处理主要包括以下几个部分:
- 使用高质量数据作为正例,训练 LR 分类算法,对 CommonCrawl 的所有文档做初步过滤;
- 利用公开的算法做文档去重,减少冗余数据;
- 加入已知的高质量数据集;
其中“高质量数据”主要是指 BERT、GPT、GPT-2 使用过的数据,最终处理完成后使用的数据规模约 570G。
如上图所示,在实际实验过程中,对不同数据集按照一定的比例进行采样,这个比例不是按照原始数据量多少来划分的,不然这里基本采样到的就都是 common crawl 的数据了,可以看到这里 common crawl 的数据量比其他几个多很多。进行采样的原因主要考虑到,就算做了一些数据清洗还是觉得 common crawl 的数据质量不如其他几个。最终采样的时候,虽然 common crawl 的数据量是其他几个数据集的上百倍,但是实际占比是 60%,有 40% 的数据是能够保证质量的。
5、实验分析
GPT-3 花了大部分篇幅介绍了各种 NLP 任务上的实验结果和分析,大家如果对某个任务感兴趣的话可以自行阅读一下论文对应的章节,本文就不做详细介绍了。
下图是 GPT-3 的一个重要分析结果:
图中横坐标为计算量,可以简单理解为模型规模或者数据量(不止如此),纵坐标为任务精度。可以看到,当我们想要线性的提升一个任务的效果时,往往需要指数级的提升模型的规模和所需的数据量。
6、GPT-3 的局限性
虽然 GPT-3 取得了非常亮眼的效果,但是出于严谨的学术态度,论文里还是客观的分析了自己的一些局限性:
-
当生成文本长度较长时,GPT-3 还是会出现各种问题,比如重复生成一段话,前后矛盾,逻辑衔接不好等等;
-
模型和结构的局限性,对于某一些任务,比如填空类型的文本任务,使用单向的自回归语言模型确实存在一定的局限性,这时候如果同时考虑上文和下文的话,效果很可能会更好一些;
-
预训练语言模型的通病,在训练时,语料中所有的词都被同等看待,对于一些虚词或无意义的词同样需要花费很多计算量去学习,无法区分学习重点;
-
样本有效性或者利用率过低,训一个模型几乎要把整个互联网上的文本数据全都用起来,这与我们人类学习时所需要的成本存在非常大的差异,这方面也是未来人工智能研究的重点;
-
有一个不太确定的点是,模型到底是在“学习”还是在“记忆”?我们当然希望它能够学习,但是在使用数据量如此大的情况下,很难去判断它到底是什么样的;
-
众所周知,GPT-3 的训练和使用成本都太大了;
-
GPT-3 跟很多深度学习模型一样,都是不可解释的,没办法知道模型内部到底是如何作出一系列决策的;
-
模型最终呈现的效果取决于训练数据,这会导致模型会出现各种各样的“偏见”;
7、某些社会影响 —— 模型“偏见”
GPT-3 可能会被拿来做一些坏事,造成一定的社会影响。比如生成新闻稿,散布一些不实的消息,生成垃圾邮件,钓鱼邮件,论文造假之类的。
这里以“种族偏见”和“性别偏见”为例:
上图展示了模型的“种族偏见”倾向,当给模型输入“The {种族} woman was very”时,可以根据后续预测词的概率分布简单分析出 GPT-3 对不同种族的人具有一定的出词倾向性。图中纵坐标的 0 表示一种正常水平,大于 0 表示比较正面的反馈,小于 0 表示比较负面的反馈。可以看到亚洲人在模型的评价里算是比较高的,但是最下面的那条线是黑人,所以当一个模型对不同种族的人的差异有这么大的时候,还是比较可怕的。
上图展示了模型的“性别偏见”,当给模型输入 “he was very” 或 “she was very” 时,GPT-3 给出的词的概率分布具有一定的倾向性,可能会产生一些具有偏见的词,比如形容男人时经常出现“Lazy”。
虽然 GPT-3 存在上述问题,不过当这些社会问题被拿出来讨论时,也侧面反映了 GPT-3 的效果及其影响力。
8、与 GPT-2 的区别
整体来看,GPT-3 相比于 GPT-2 有如下几点区别:
- 效果上,超出 GPT-2 非常多,能生成人类难以区分的新闻文章;
- 主推 few-shot,相比于 GPT-2 的 zero-shot,具有很强的创新性;
- 模型结构略微变化,采用 sparse attention 模块;
- 海量训练语料 45TB(清洗后 570GB),相比于 GPT-2 的 40GB;
- 海量模型参数,最大模型为 1750 亿,GPT-2 最大为 15 亿参数;
四、InstructGPT
1、背景
GPT-3 虽然在各大 NLP 任务以及文本生成的能力上令人惊艳,但是他仍然还是会生成一些带有偏见的,不真实的,有害的造成负面社会影响的信息,而且很多时候,他并不按人类喜欢的表达方式去说话。在这个背景下,OpenAI 提出了一个概念“Alignment”,意思是模型输出与人类真实意图对齐,符合人类偏好。因此,为了让模型输出与用户意图更加 “align”,就有了 InstructGPT 这个工作。 论文地址:Training language models to follow instructions
with human feedback
InstructGPT 提出了一个理想化语言模型的三大目标:
从做研究的角度来讲,其实很多时候人们并不在意“Alignment”(对齐)问题,只要一个模型在评估的数据集上表现好,那基本就可以说是一个好模型;但是对于工业界来说,一个产品的安全性就显得尤为重要,历史上也出现过不止一次因为某个负面 case,引发社会争议,从而导致整个产品下线的例子,特别是对于大公司来讲,出现一次负面 case 通常是比较严重的。比如之前 google 和 facebook 就都出现过把照片中的黑人识别成黑猩猩的事件,然后随之而来的就是产品的整改,公关道歉之类的。所以从这个角度来讲,OpenAI 做 InstructGPT 的出发点是非常合理且重要的。
2、技术方案 —— SFT / RLHF
关于 InstructGPT 的技术方案,原文分为了三个步骤:有监督微调,奖励模型训练,强化学习训练;实际上可以把它拆分成两种技术方案,一个是有监督微调(SFT),一个是基于人类反馈的强化学习(RLHF),下面我们简单介绍这两种技术方案。
2.1、SFT(Supervised Fine-Tuning)
本质上来说,SFT 可以理解为人工标注了一批数据,然后去微调 GPT-3。但是值得一提的是,这里标注的数据与 GPT-3 之前用来做下游任务使用的 few-shot 格式,有非常本质的区别。
GPT-3 中的 few-shot 对于同一个下游任务,通常采用固定的任务描述方式,而且需要人去探索哪一种任务表述方式更好。显然这种模式与真实场景下用户的使用方式存在较大的 gap,用户在向 GPT-3 提问时才不会采用某种固定的任务表述,而是随心所欲地以自己的说话习惯去表达某个需求。InstructGPT 在 SFT 中标注的数据,正是为了消除这种模型预测与用户表达习惯之间的 gap。在标注过程中,他们从 GPT-3 的用户真实请求中采样大量下游任务的描述,然后让标注人员对任务描述进行续写,从而得到该问题的高质量回答。这里用户真实请求又被称为某个任务的指令,即 InstructGPT 的核心思想“基于人类反馈的指令微调”。
2.2、RLHF(Reinforcement Learning from Human Feedback)
基于 SFT 得到的模型被用于后续的 RLHF 做进一步的模型优化。
如上图所示,以摘要生成任务为例,详细展示了如何基于人类反馈进行强化学习,最终训练完成得到 InstructGPT 模型。主要分为三步:
-
收集人类反馈:使用初始化模型对一个样本生成多个不同摘要,人工对多个摘要按效果进行排序,得到一批排好序的摘要样本;
-
训练奖励模型:使用第1步得到的样本集,训练一个模型,该模型输入为一篇文章和对应的一个摘要,模型输出为该摘要的得分;
-
训练策略模型:使用初始化的策略模型生成一篇文章的摘要,然后使用奖励模型对该摘要打分,再使用打分值借助 PPO 算法重新优化策略模型;
3、InstructGPT 总结
总的来说,InstructGPT 相对于之前的 GPT 系列,有以下几点值得注意:
- 解决 GPT-3 的输出与人类意图之间的 Align 问题;
- 让具备丰富世界知识的大模型,学习“人类偏好”;
- 标注人员明显感觉 InstructGPT 的输出比 GPT-3 的输出更好,更可靠;
- InstructGPT 在真实性,丰富度上表现更好;
- InstructGPT 对有害结果的生成控制的更好,但是对于“偏见”没有明显改善;
- 基于指令微调后,在公开任务测试集上的表现仍然良好;
- InstructGPT 有令人意外的泛化性,在缺乏人类指令数据的任务上也表现很好;
五、GPT 系列进化时间线
上图展示了从初代 GPT 到 ChatGPT 为止,OpenAI 公布的主要模型及其迭代路线。其中可能存在不太严谨的地方,比如 GPT3.5 的划分。关于 code-davinci 和 text-davinci,以及整个 GPT3.5 的详细介绍,强烈推荐阅读这篇博客:拆解追溯 GPT-3.5 各项能力的起源。
六、参考
文献
[1] GPT: Improving Language Understanding by Generative Pre-Training
[2] GPT-2: Language Models are Unsupervised Multitask Learners
[3] GPT-3: Language Models are Few-Shot Learners
[4] InstructGPT: Training language models to follow instructions with human feedback
[5] Learning to summarize from human feedback
[6] Generating Long Sequences with Sparse Transformers
[7] Learning Deep Transformer Models for Machine Translation
其他引用
[8] 拆解追溯 GPT-3.5 各项能力的起源
[9] 李沐: GPT,GPT-2,GPT-3 论文精读
[10] 李沐: InstructGPT 论文精读
[11] 为节约而生:从标准 Attention 到稀疏 Attention
[12] GPT / GPT-2 / GPT-3 / InstructGPT 进化之路
相关文章:
GPT,GPT-2,GPT-3,InstructGPT的进化之路
ChatGPT 火遍圈内外,突然之间,好多人开始想要了解 NLP 这个领域,想知道 ChatGPT 到底是个什么?作为在这个行业奋斗5年的从业者,真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…...
firefox_dev_linux下载安装配置(部分系统自带包请看结尾)
download 从 Firefox 的官方网站下载 Firefox Developer Edition 的 tar 文件 firefox_dev_linux_download # 终端快速下载 wget https://download.mozilla.org/?productfirefox-devedition-latest-ssl&oslinux64&langen-US彻底删除自带原版 # apt系 sudo apt --pu…...
vim缓存-交换文件
Catf1agCTF靶场 web swp 题目链接:http://catf1ag.cn/ 个人博客:https://sword-blogs.com/ 题目考点: vim在编辑文档的过程中如果异常退出,会产生缓存文件 vim 交换文件名 参考文章:vim手册 https://yianwillis.…...
Hive 优化建议与策略
目录 编辑 一、Hive优化总体思想 二、具体优化措施、策略 2.1 分析问题得手段 2.2 Hive的抓取策略 2.2.1 策略设置 2.2.2 策略对比效果 2.3 Hive本地模式 2.3.1 设置开启Hive本地模式 2.3.2 对比效果 2.3.2.1 开启前 2.3.2.2 开启后 2.4 Hive并行模式 2.5 Hive…...
CentOS 7.5 centos failed to load selinux policy 错误解决方法
这是个 selinux 使能导致的, 关闭即可 在进入到内核选中界面,选中要启动的内核, 按键盘 e 就会进入启动参数界面 进入启动参数界面如图,按上下键找到 UTF8 UTF8如图, 添加 selinux0 添加完成如图, 按 ctr…...
注入之SQLMAP(工具注入)
i sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL和SQL注入漏洞,其广泛的功能和选项包括数据库指纹,枚举,数据库提权,访问目标文件系统,并在获取操作权限时执行任…...
Linux学习资源Index
由于Linux是支撑“云计算”的最核心、最底层、最重要的技术,持续提升自已的Linux水平是必须的,这里将不断更新的Linux学习索引。 书籍 书籍首页 - Documentation (rockylinux.org) WWW链接 提定发行版 RockyLinux Rocky Linux Download Rocky | R…...
什么是SVG(可缩放矢量图形)?它与普通图像格式有何不同?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是SVG?⭐ 与普通图像格式的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚…...
求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows
求生之路2服务器搭建插件安装及详细的游戏参数配置教程windows 大家好我是艾西,最近研究了下 l4d2(求生之路2)这款游戏的搭建以及架设过程。今天就给喜欢l4d2这款游戏的小伙伴们分享下怎么搭建架设一个自己的服务器。毕竟自己当服主是热爱游…...
React TypeScript 定义组件的各种方式
目录 举例说明1. 使用 class 定义2. 使用函数定义2.1 使用普通函数2.2 使用函数组件 举例说明 比如我们要定义一个计数器 Counter,它包含一个 label 和一个 button,计数器的初始值由外部传入,点击 button 计数加 1: 这虽然是个简单组件&…...
互联网摸鱼日报(2023-09-20)
互联网摸鱼日报(2023-09-20) 36氪新闻 国货美妆这五年:押注头部主播,追求极致流量中遭反噬 处于水深火热之中的奈飞该如何自救? 一头“灰犀牛”将冲击美国 年轻人花钱的样子变了 金V之后再推橙V,微博正试图重建创作者生态 …...
AWS入列CNCF基金会
7月27日,IT之家曾经报道,微软加入Linux旗下CNCF基金会,在这之后不到一个月的今天,亚马逊AWS也宣布,以铂金身份加入此基金会。 CNCF,全称Cloud Native Computing Fundation,该基金会旨在使得容器…...
岭回归与LASSO回归:解析两大经典线性回归方法
文章目录 🍋引言🍋岭回归(Ridge Regression)🍋实战---岭回归🍋LASSO回归(LASSO Regression)🍋实战---LASSO回归🍋岭回归和LASSO哪个更容易是直线🍋…...
数学建模——微分方程介绍
一、基础知识 1、一阶微分方程 称为一阶微分方程。y(x0)y0为定解条件。 其常规求解方法: (1)变量分离 再两边积分就可以求出通解。 (2)一阶线性求解公式 通解公式: 有些一阶微分方程需要通过整体代换…...
Minio入门系列【7】Spring Boot集成Minio
1 前言 之前介绍了如何使用Minio提供的JAVA SDK进行上传和下载文件,在此基础上,我们可以使用spring boot集成Minio JAVA SDK,添加自动配置、装配、客户端管理等功能,简化开发 2 Spring Boot集成Minio 2.1 环境搭建 首先我们搭…...
抖音视频下载.py(23年9月份可用)
声明:仅供学习交流使用!!! 抖音无水印视频下载; 首先登录抖音网页端 打开要下载的视频userId 然后编码实现下载 最后是完整代码,拿走就能用那种: # _*_ coding:utf-8 _*_import json import requests import time import randomheaders = """Accept: a…...
项目基本搭建流程
项目创立:webapp 设置maven 的和settings.xml 的地址 手动建立java文件夹和resource文件夹 一.分层 二.使用generator 来自动建立实体类dao 和dao接口,存放sql文件的xml;并复制到项目中(路径可能可以直接设置) 三. 配置文件&…...
学习pytorch11 神经网络-非线性激活
神经网络-非线性激活 官网文档常用1 ReLUinplace 常用2 Sigmoid 代码logs B站小土堆学习pytorch视频 非常棒的up主,讲的很详细明白 官网文档 https://pytorch.org/docs/stable/nn.html#non-linear-activations-weighted-sum-nonlinearity 常用1 ReLU 对输入做截断…...
Jenkins学习笔记2
Jenkins下载安装: 从清华源开源镜像站上下载jenkins的安装包: 安装的是这个版本。 关于软件的版本,尽量使用LTS,长期支持。 首先是安装openjdk: yum install fontconfig java-11-openjdk[rootlocalhost soft]# java …...
自动化测试:yaml结合ddt实现数据驱动!
在pythonunittestseleniumddt的框架中,数据驱动常见有以下几种方式实现: Csv/txtExcelYAML 本文主要给大家介绍测试数据存储在YAML文件中的使用场景。首先先来简单介绍一下YAML。 1. 什么是YAML 一种标记语言类似YAML,它实质上是一种通用…...
高效管理,轻松追踪——Chrono Plus for Mac任务管理工具
Chrono Plus for Mac是一款专注于任务管理和跟踪的应用程序。它提供了一种直观、清晰的界面,使您能够轻松创建、安排和分类任务。无论是个人项目还是团队合作,Chrono Plus都能为您提供一种有效组织和管理任务的方式。 这个应用程序具有多种强大的功能&a…...
python项目2to3方案预研
目录 官方工具2to3工具安装参数解释基本使用工具缺陷 future工具安装参数解释基本使用工具缺陷 python-modernize工具安装参数解释基本使用工具缺陷 pyupgrade工具安装参数解释基本使用工具缺陷 对比 官方工具2to3 2to3 是Python官方提供的用于将Python 2代码转换为Python 3代…...
MongoDB 是什么和使用场景概述(技术选型)
一、从NOSQL(Not Only SQL)说起 常见的数据库可以分为下面的两种类型: RDBMS(关系型数据库):常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL;NoSQL(非关系型数据库&a…...
打印 pyspark.sql.dataframe.DataFrame 有哪些列
在 PySpark 中,要打印 pyspark.sql.dataframe.DataFrame 的列,可以使用 columns 属性。以下是一个示例代码: from pyspark.sql import SparkSession# 创建 SparkSession spark SparkSession.builder.getOrCreate()# 假设您的 DataFrame 名称…...
什么是虚拟DOM(Virtual DOM)?它在前端框架中的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是虚拟DOM(Virtual DOM)?⭐ 虚拟DOM 在前端框架中的作用⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦&…...
QT实现简易时钟
头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QDebug> #include <QPainter> #include <QTimerEvent> #include <QTimer> #include <QTime>QT_BEGIN_NAMESPACE namespace Ui { cl…...
win禁用更新,取消windows更新提示,禁用windows自动更新
取消windows自动更新 前言:跟着我的节奏一步一步点下去,就OK 第一步第二步第三步第四步第五步第六步第七步 新建文件第八步 新增文件名称:FlightSettingsMaxPauseDays第九步 设置暂停更新天数第十步 选中你设置的最大值 前言:跟着…...
倒计时列表实现(小程序端Vue)
//rich-text主要用来将展示html格式的,可以直接使用这个标签 <view class"ptBox" v-for"(item,index) in orderList" :key"index"> <rich-text :nodes"item.limit_time|limitTimeFilter"></rich-text>…...
ContentType:application/x-www-form-urlencoded请求方法遇到的坑【PHP】
有些API要求请求的内容类型为application/x-www-form-urlencoded function requestUrl($url,$datanull,$httpstrue,$methodpost){//1.初始化url$ch curl_init($url);//2.设置相关的参数//字符串不直接输出,进行一个变量的存储curl_setopt($ch, CURLOPT_RETURNTRANSFER, true)…...
RabbitMQ - 死信、TTL原理、延迟队列安装和配置
目录 一、死信交换机 1.1、什么是死信交换机 1.2、TTL 1.2.1、什么是 TTL 1.2.2、通过 TTL 模拟触发死信 二、延迟队列 2.1、什么是延迟队列 2.2、配置延迟队列插件 2.2.1、延迟队列配置 a)下载镜像 b)运行容器 c)刚刚设定的Rabb…...
兰州做网站公司/站点推广是什么意思
每年都有无数年轻程序员,加入软件行业。他们在学校里学过编程,但是对这个行业的现实一无所知。Patrick McKenzie 是美国一家小软件公司的老板,他写了一篇长文,介绍这个行业的一些实际情况。 原文:https://www.kalzumeu…...
佛山高端外贸网站建设/长沙自动seo
整理一帖,方便速查网络通信常见端口汇总 端口号描述0端口无效端口,通常用于分析操作系统1端口传输控制协议端口服务多路开关选择器2端口管理实用程序3端口压缩进程5端口远程作业登录7端口回显9端口丢弃11端口在线用户13端口时间17端口每日引用18端口消息发送协议19端…...
幼儿园网站如何建设/互联网营销师培训教程
Mybatis plus中使用in查询出错如何解决,参数,解决方法,代码,语句,这段Mybatis plus中使用in查询出错如何解决易采站长站,站长之家为您整理了Mybatis plus中使用in查询出错如何解决的相关内容。不想看我bb的直接点上面的 ‘解决方法‘我的情况是这样的,在…...
免费网站建站一级av/网络培训平台
http://ticktick.blog.51cto.com/823160/d-15 原创 Android音频开发(7):使用 OpenSL ES AP.. 2016-05-08 19:19:47本文主要介绍了 Android OpenSL ES 的框架设计和常见 API 的用法,并给出了示例代码,让初学者能够更加…...
兰州企业网站建设公司价格/营销活动策划方案
$(document) 是一个 JavaScript 库中的函数,用于在 HTML 文档中选择元素。它使用了 CSS 选择器语法来选择元素,返回一个 jQuery 对象,可以使用 jQuery 的方法来操作选择的元素。 如果你遇到了 $(document) 无法使用的问题,可能是因…...
网站留言效果怎么做/好看的友情链接代码
1、筛选符合条件的记录要筛选顾客为“天津大宇”的所有记录(点击图片动起来)2、筛选符合条件的部分记录要筛选顾客为“天津大宇”的部分记录,可以将“复制到”区域中提前写上需要得到的字段标题。3、筛选同时符合两个条件的记录要筛选同时符合两个条件的记录&#x…...