社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  chatgpt

探寻ChatGPT底层模型诞生之路 —— 3篇OpenAI关键论文解读

人工智能学家 • 1 年前 • 237 次点击  

最近一段时间ChatGPT的信息铺天盖地,难免眼花缭乱,但是信息太多往往约等于没有信息。同时,当我读了相关论文后发现,目前很多新闻、评论、专业人士的解读等,大部分都还是基于openAI发的几篇论文的。既然如此,为什么不直接读论文来获取一手信息呢?所以接下来我会学习ChatGPT诞生过程中的一些比较重要的论文。


本篇文章主要阅读三篇论文,分别代表着GPT、GPT2、GPT3,三篇论文分别是

  • Improving language understanding by generative pre-training[J]. 2018.

  • Language models are unsupervised multitask learners[J]. OpenAI blog, 2019, 1(8): 9.

  • Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.




GPT


《Improving Language Understanding by Generative Pre-Training》



关于摘要


首先关于这个标题“使用预训练模型提升自然语言理解能力”,其实在这里,作者还没有将模型的名字命名为GPT,只是后来取了标题中“generative pre-training”,将模型命名为GPT。



在摘要里作者首先提到,在自然语言理解中,存在许多不同的任务,但标记数据相对较少。因此,针对这个问题,一种解决方法是在没有标注的数据上训练一个预训练模型,然后在有标记的数据上进行微调。这种方法在计算机视觉领域早在八九年前就已经成为主流算法,但在自然语言处理中一直未能流行起来,因为没有像计算机视觉中的ImageNet那样大规模标记的数据集。另外,由于一个句子所包含的信息比一张图片所包含的信息要少得多,因此需要相对更大的句子级别的标准数据集才能训练出较大的模型。这也导致深度学习在自然语言处理中的进展相对不那么顺利。直到出现了像GPT这样的预训练模型,才开始有了一些进展。



与计算机视觉中的算法类似,自然语言处理中的解决方案也是先训练好预训练模型,然后进行微调。不同的是,自然语言处理使用的是没有标注的文本数据进行训练,这是一大步的进展。GPT系列文章在此基础上进行了更深入的探索,取得了一定的创新成果。此外,自然语言处理任务的多样性也导致了需要为每个任务构建不同的模型,这也是自然语言处理与计算机视觉的一个区别。GPT采用的解决方案是改变输入的形式而不是改变模型本身,这可以减少改变模型架构的工作量。



作者还指出,最早的词嵌入模型Word2Vec也是使用了大量的没有标注的文本数据,但与GPT不同的是,前者在微调时需要构造与任务相关的输入。实验结果显示,在12个任务中,GPT在9个任务上超过了当前最好的成绩。


关于导言


在导言里,作者首先提出一个问题:如何更好的利用无监督的文本?当时最成功的模型是词嵌入模型。接下来,作者列出了使用无标注文本时遇到的两个主要困难。第一个困难是优化目标函数的选择,损失函数应该是什么样子?当时有很多选择可以解决这个问题,比如语言模型、机器翻译、文本一致性等,但没有一个特别好的目标函数适用于所有任务。第二个困难是如何有效地将所学的文本表示传递到现有的子任务上,因为NLP中的子任务多样且没有一种简单有效的方式将一种表示迁移到所有任务上。 


本文提出了一种半监督方法,用于在无标号文本上训练大型语言模型,然后在具体子任务上进行微调。半监督学习是机器学习中十年前非常流行的话题,旨在利用标记数据学习未标记数据。在这种情况下,本文采用类似的方法,首先在未标记数据上训练模型,然后在标记数据上微调。 

本文的模型基于Transformer架构,这是当时相对较新的架构。作者解释说,与递归神经网络(RNN)相比,Transformer在迁移学习方面更加稳健,因为它具有更结构化的记忆,可以处理更长的文本,并从句子和段落层面提取更好的语义信息。

另一个关键技术要点是在迁移学习时使用与任务相关的表示。本文将在后面详细介绍这种表示。

最后一部分介绍了实验结果。作者在12个任务中的9个任务中获得了优异的结果,但在某些任务上略逊于BERT(其实BERT的出现时间是在GPT之后,但大家都喜欢将这两个模型进行比较)。



关于模型


在模型这个章节包含3个小节,分别介绍了在没有标注数据的情况下如何训练模型、微调模型以及如何为每个子任务表示输入。


【1】预训练


假设我们有一个没有标注的文本,其中每个单词被表示为一个向量  ,整个文本被表示为一个序列    ,这些单词是有序列信息的,所以顺序是不能改变的。GPT使用标准的语言模型目标函数来最大化似然函数,如下面这个公式:




具体而言,语言模型要预测第i个单词的出现概率。对于单词  

,模型会考虑它前面的K个单词(即    ),这里的K被称为上下文窗口或窗口大小。模型每次会选择连续的K个单词,并预测这K个单词后面的一个单词是什么。它使用一个模型(φ)来进行预测,该模型从输入的K个单词和模型参数中得出下一个单词的概率。将每个单词的预测概率加起来,就得到了目标函数L1。


目标就是通过训练模型φ,使其能够输出与给定文本类似的文章。超参数K是窗口大小,它控制着模型输入序列的长度。输入序列越长,网络就能看到更多的信息,从而更容易在文本中发现关系。如果您希望模型更强大,则K可能需要增加到数十甚至数百。


对于公式中的模型φ,模型使用了Transformer的解码器,这个模型涉及到编码器和解码器两个部分。编码器和解码器最大的不同在于,编码器输入一个序列时,当提取第i个元素的特征时,可以看到整个序列里的所有元素。而对于解码器来说,由于存在掩码,当提取第I个元素的特征时,它只能看到当前元素和它之前的元素,后面的元素被掩码处理,注意力机制计算时会被视为0,所以解码器无法看到后面的内容。因此,我们只能使用Transformer的解码器,而不能使用编码器。

如果我们要预测单词U出现的概率,那么将U前面的K个单词全部取出来,将K个词输入到一个大的U中,做一个词嵌入的投影,并加上位置信息的编码,这将成为我们第一层的输入。接下来,我们需要做N层这样的Transformer块,每一层都需要将上一层的输出作为输入,并得到新的输出。由于我们知道存储模块不会改变输出的形状,因此一直进行完所有层之后,我们就会得到最后一个Transformer块的输出。然后我们再做一次投影,并使用softmax函数,就能得到U出现的概率分布了。



【2】微调模型


在ChatGPT的微调中,数据是有标号的,也就是给定一个长为m的词序列X1到Xm,并告诉它们对应的标号是y。我们的目标是对这个序列去预测它的y的概率。在微调任务中,我们把整个序列放入之前预训练的GPT模型中,然后获取transformer块的最后一层输出,对应着序列中的Hm,接着将其乘以输出层,再使用一个softmax函数,就能得到预测概率。这个操作在微调任务中的所有带有标签的序列上都会执行。在微调任务中,我们需要使用标准分类目标函数来最大化预测概率。



作者还提到,尽管我们只关心单个分类任务的性能,但是将预训练语言模型也放到微调模型中会提高效果。也就是说,在微调任务中我们有两个目标函数。一个是预测下一个单词,另一个是预测给定完整序列的标签。将这两个目标函数结合起来效果最好。作者通过对它们的加权平均来平衡这两个目标函数,权重是一个超参数,可以根据需要调整。




【3】子任务


对于不同的子任务,我们需要找到一种合适的方式来表示这些任务。如何将NLP中四种常见的用户任务表示为一个序列和对应的标签,是接下来要讨论的。




第一类是应用场景是“分类”(classification),例如对一段文本进行情感分类,判断其是正面还是负面。为了将这种任务表示为一个序列和标签,我们需要在原始文本前添加一个起始标记,后面添加一个结束标记,形成一个序列,然后将其输入到transformer解码器中。模型会抽取最后一个词的特征并将其传入一个线性层进行投影。线性层的输出大小在训练时是固定的,并且对于每个文本和标签对都会进行训练。在微调中,我们需要重新构造一个新的线性层,其中权重可能是随机初始化的,并且数字大小与标签数量相同。通过这个线性层,我们可以将输入序列转换为我们需要的标签,这是微调过程中的一个区别。



第一个应用场景是“蕴含”(entailment),即判断一段文本是否蕴含某种假设。该应用可以看作是一个三分类问题,需要将两段文本串联成一个长序列,采用特殊的开始符、分隔符和抽取符来区分不同部分。注意,这些特殊标记不能和文本中的其他词重复。该应用中使用的模型是GPT算法,它在训练数据集上的表现相较于之前的算法有所提升,在多个数据集上的表现也相对较好。


第二个应用场景是“相似”(similarity),即判断两段文本的相似程度。该应用同样采用GPT算法,但需要考虑相似关系的对称性。因此,对于每一对文本,需要构造两个序列,分别将它们放在不同的位置上,并用特殊标记区分不同部分。这些序列将分别输入模型中进行处理,得到最终的输出结果,然后通过一个线性层进行判断,是相似还是不相似。


第三个应用场景是“多选题”(multiple choice),即从多个答案中选择正确的答案。该应用需要构造多个序列,其中每个序列的开头都是同一个问题,而每个答案则依次作为第二个序列进行处理。这些序列将分别输入模型中进行处理,最终通过一个线性投影层输出对应的答案得分,用softmax函数将得分转换为对每个答案的选择概率。在这个应用中,GPT算法同样能够发挥出色的表现。


虽然这三个应用的数据形式有所不同,但它们都可以被看作是一个序列处理问题。不论输入形式如何变化,使用的GPT算法的结构都不会改变,这是与之前的算法相比的一个显著优点。因此,GPT算法在NLP领域有着广泛的应用前景,尤其适用于处理文本序列的问题。




关于实验


关于实验我们主要关心两点。第一点,该模型是在名为 "BooksCorpus" 的数据集上进行训练的,该数据集包含7000篇未发表的书。第二点,模型本身采用了12层Transformer解码器,每层维度为768,其规模相当庞大。实验结果表明该模型在训练数据集上的表现相较于之前的算法有所提升。GPT算法在精度上的表现也优于其他算法,这一点在多个数据集上都得到了验证。




总体而言,这一模型的训练规模和数据集的规模都比较大,这使得其性能表现相较于之前的算法更加优秀。



与BERT对比


从模型上来说,BERT并不使用标准的语言模型,而是采用带有掩码的语言模型,即完形填空。在完形填空任务中,一个句子中间的一个单词被挖去,然后让你去猜测这个单词。在这个任务中,我们可以看到挖去的单词之前和之后的单词,因此我们可以使用Transformer的编码器来完成这个任务,编码器可以看到所有单词

但是使用编码器和解码器并不是GPT和BERT的主要区别,实际上,GPT选择了一种更加困难的目标函数,即从前面的一段文本预测接下来的一个单词,这比完形填空要更具挑战性。举个例子,如果我给你股票的历史价格信息,你可以预测明天的股价,但是如果我不告诉你昨天的股票价格,让你去预测昨天的价格,那么这个任务就更难了。因为预测一个开放式的结局,要比预测一个中间状态难很多,所以它比完形填空更加具有挑战性。这也是为什么GPT在训练和效果方面都比BERT差的原因之一。

不过反过来思考,如果你的模型可以真正预测未来,那么你将比通过完形填空训练的BERT模型更加强大。这就是为什么GPT的作者需要不断地扩大模型规模并进行不断尝试,才能最终实现类似于GPT-3这样效果非常出色的经验模型。这也是之前提到的为什么作者选择了一条更加困难的技术路线,但同时也有更高的天花板。这就是预训练模型。因此,我们可以说GPT就是Transformer的一个解码器。



从参数上和实验结果上来说,BERT base使用了12层,每层有768维,这是为了与GPT进行比较。BERT Large则将层数翻了一倍,宽度增加了1.3倍,复杂度是BERT base的三倍。为什么BERT能做到三倍复杂度呢?主要是因为BERT使用了更大的数据集。BERT使用了包括GPT的BookCorpus的数据集在内的8亿个词,以及Wikipedia数据集中的20亿个词。因此,BERT的数据集大小大约是GBT的四倍。在这个数据集上,BERT训练了一个比GPT大三倍的模型。BERT的实验结果表明,BERT base比GPT的模型表现要好,平均精度达到了75.1,而BERT large的平均精度则达到了79,如果再增加模型大小,BERT的平均精度可以提高到82.1。






GPT2


《Language Models are Unsupervised Multitask Learners》


前情提要


OpenAI之前使用解码器训练过一个很好的模型(GPT),但几个月后,Bert用更大的数据集和更大的模型打败了GPT,OpenAI该如何回应?首先,更换解码器不是一个好的选择,因为已经选择了这种技术路线,再次更换会浪费前面的工作。如果仍旧认为解码器的方案是好的,那么你可以尝试通过增加模型的规模和数据集的大小来提升性能。但是,如果模型再次被打败,又应该如何应对呢?这是GPT2文章要探讨的问题。



作者首先用了一个新的数据集——WebText,其中包含百万级别的文本。基于这个更大的数据集,他们训练了一个包含15亿个参数的transformer模型(Bert Large最大值是3.4个亿)。不过当模型变得越来越大时,与先前的Bert模型相比,它的优势并不明显。因此,作者转而提出了“zero shot”的观点,并在GPT-2中成为一个核心点,所以作者在导言中提到,收集数据集并在上面训练模型以做出预测已成为主流途径。但现有的模型的泛化能力并不是很好。也就是说,在一个特定的数据集和应用上训练好的模型难以直接应用于另一个数据集和应用中。然后作者提到了多任务学习。多任务学习最初的想法是在训练模型的同时观察多个数据集,并通过多个损失函数来建立一个能够在多个任务中使用的模型。这一思路在90年代末提出,并在2000年至2010年之间成为一个相对流行的话题。尽管多任务学习看起来很有用,但在自然语言处理领域并不常用。现在在自然语言处理领域,主流的算法是GPT和BERT等类似算法。这些算法在一个大数据集上进行预训练,然后在每个任务上进行有监督的微调。当然,这种方法仍然有两个问题。第一个问题是,对于每个下游任务,你仍然需要重新训练模型。第二个问题是你需要收集有标注的数据,这会导致在拓展到新任务时会有一定的成本。


作者最后提到的是GPT2,在进行下游任务时,他将使用一个称为“zero shot”的设置。也就是说,在进行下游任务时,不需要下游任务的任何标注信息,也不需要再次训练模型。这种方法的好处是只需训练一个模型,便可以在任何地方使用。最后,作者表示,这一方法已经得到了看起来相当不错且具有一定竞争力的结果。



如果作者只是在GPT算法的基础上,使用更大的数据集来训练更大的模型,并且说自己比BERT算法好一些,这篇文章可能就没有多少意义了。因为这种方法显得非常工程化。然而,现在作者换了一个角度,选择了一个更难的问题,也就是“zero shot”。作者表示,他不需要训练模型,也不需要下游任务的任何标注信息,然后得到了差不多的结果。有时候稍微好一些,有时候稍微差一些。虽然这个方法从结果上看可能并不像之前的方法那么出色,但它却具有创新性。




关于数据


在这一节中,作者详细介绍了他的数据集是如何得出的。首先,他提到了之前模型(BERT)的数据集是Wikipedia,但是他选择使用书籍来进行训练。为了构建更大的数据集,他使用了一个名为common crawl的项目,该项目是一个公开的网页抓取项目,通过一个爬虫程序不断从互联网上抓取网页,然后将这些网页存储在AWS的S3上供免费下载。目前,这个项目的数据规模已经达到了TB级别,是目前最大、最便于获取的文本数据集。然而,这个数据集的性价比较低,因为其中大部分可能都是垃圾网页,需要耗费大量时间进行清理。


作者提到虽然他无法将所有优质网页都标注出来,但是他可以利用Reddit上其他用户已经过滤好的网页。Reddit是一个美国排名很靠前的新闻聚合网页,用户可以提交感兴趣的网页,并按照主题进行分类。其他用户可以投票评价每个帖子,从而产生一个叫做karma的评价指标。作者选取了所有至少有3个karma的网页进行抓取,并最终得到了4500万个链接,从中提取了800万个文本信息,总共40GB大小。


另外,作者还对模型做了如下设计,其中第一个模型包含12层,每层宽度为768,一共有1亿个可学习的变量,与之前的GPT或BERT base相似。第二个模型则对标BERT large,拥有更大的尺寸,乘数增加到2^44,宽度增加到160,总共有15亿个可学习元素。



关于实验


下图展示了GPT2的Zero-task在四个场景下的具体表现,可以看到在阅读理解上来说,它的表现是高于原有模型的,但是在摘要、提问、翻译的场景下,表现情况均不如原有模型。






GPT3


《Language Models are Few-Shot Learners》


前情提要


GPT3是为了解决GPT2的有效性而设计的。因此,它回到了GPT一开始考虑的few-shot学习的设置,即不再追求太过极致的性能表现,而是在有限的样本上提供有用的信息。在现实生活中,即使是人类学习新知识也需要一些样本,而人类在样本有效性上做得相当好。但是,对于语言模型而言,需要大量的样本才能学习到足够的知识。因此,在这里,"future"的意思是,虽然仍然需要提供一些样本,但样本数量可以控制在较小的范围内,这意味着成本可以保持较低的水平。


GPT-3是一个具有1750亿个可学习参数的智能模型,比之前所有非系数模型都要大十倍。尽管如此,GPT-3在成本方面的挑战依然存在,尤其是在进行子任务训练时,所以GPT-3在进行任务时不需要进行微调或梯度更新,这也是它的一大特点。与其它模型相比,GPT-3在NLP任务中表现出色,甚至可以生成人类难以区分的新闻文章。


总之,作者想要表达的是GPT-3在处理自然语言方面的优越性以及它的巨大潜力。




关于导言


在最近的自然语言处理领域中,预训练语言模型已经成为了一种非常流行的方法,其核心思想是先使用大规模的无标注语料进行预训练,再针对特定任务进行微调。然而,在这种方法中,我们还是需要针对每个子任务准备一个与任务相关的数据集,并进行相应的微调。这其中存在着一些问题,例如需要大规模标注数据集,而且微调效果的优劣并不能完全反映预训练模型的泛化能力。此外,人类并不需要进行大规模数据集的训练就能够完成很多任务,这也引发了人们对于预训练模型的质疑。


针对以上问题,有学者提出了一种新的学习方式,即few-shot或者是dear-shot学习。这种学习方式的核心思想是,通过提供一些样例来学习,而不是像传统的训练方式那样需要大规模的数据集进行训练。这样做的好处在于,无需耗费大量的时间和成本来收集和标注数据集,而且模型可以更加关注于样例之间的共性,从而提高模型的泛化能力。此外,few-shot学习还可以使得模型更加接近人类的学习方式,因为人类也是通过少量的样本来进行学习的。


因此,预训练模型的未来发展方向可能会向着few-shot或者是zero-shot学习的方向发展。虽然在这种学习方式下,模型的表现可能不如传统方式下的微调,但是它可以更加接近人类的学习方式,从而提高模型的泛化能力,使得模型更加适用于各种不同的任务。



在这里作者又提出两个新的名词,Meta Learning和in-context learning,Meta Learning 是一种训练模型的方法,它可以帮助模型更好地适应不同的任务和领域。在 Meta Learning 中,模型不仅要学习如何解决特定的任务,还要学习如何快速适应新的任务。这样的训练方法有助于提高模型的泛化能力,使得模型在新的领域中表现更好。in-context learning 是另一种训练模型的方法。它指的是在给定一个任务的上下文中,让模型从少量样本中学习如何解决这个任务。in-context learning 只会对给定的任务产生影响,不会改变模型的权重。





关于模型


结合下面这张图,可以更好地理解GPT3的模型:





图的右边讲微调是如何做的。常规意义上的微调是指在预训练模型的基础上,在特定任务上提供少量训练样本,然后计算损失,这样就可以对他的权重进行更新,接下来再用一个样本继续更新。但是在GPT3的微调设置里,他是要求不做梯度更新的。



图的左侧是In-context learning的3种不同设置,用了一个英语翻译成法语的例子。

Zero-shot:只给出任务描述和prompt

One-shot:除了给出任务描述和prompt,还给一个例子(训练样本)。但是需要注意的是这个训练样本只做预测,不做模型更新,他希望的是你在模型在做前向推理的时候,能够通过注意力机制去处理比较长的序列信息,从而从中间抽取出来有用的信息。所以叫In-context learning,即你的学习只是限于你的上下文。

Few-shot:除了给出任务描述和prompt,给了多个例子。Few shot 是对one shot 的一种拓展,前者相比后者可以提供多个样本进行训练,但过长的序列信息可能不利于模型的信息提取和处理。同时还有一个问题,这个模型是每一次的时候要从中间去抓取信息,但是不能把上一次抓取的信息保存到模型中,也就是尽管你的训练样本很好,但是也仍旧不能保存到模型中。




关于模型的具体设计,设计了8个不同大小的模型,如下表:




每一行表示的是一个模型,每个列能表示的是模型的一些参数,其中包括:可学习的参数的数量、在模型里的层数,然后你每一层的词表示的向量长度,多头注意力里头的数量,每个头的维度大小(d model除以n heads)、训练时每个小批量的大小、学习率。

GPD3 small:12层,每一层大小768(它就是GBT模型),可学习参数是1.25个亿,也是bert base它的模型的大小,

GPT3 medium24层,每一层大小是1024(bert large的尺寸)。

GPT3 medium、GPT3 Large、GPT3 XL这几个模型就是层数没有变,但是每层的宽度有增加。

GPT3 175B(简称GPT3):96层,每一层的大小已经到了12000左右了。



关于数据


GPT-3的训练数据基于Common Crawl,但作者认为Common Crawl的数据质量相对较低。为了解决这个问题,作者使用了一些技巧来使数据更干净。他们使用了一个简单的逻辑回归分类器来区分高质量数据和低质量数据,使用LSH算法去重,以及加入了一些已知的高质量数据集。通过设置采样率,其中60%来自Common Crawl,22%来自WebText2,其余的来自其他数据集,最终他们获得了一个非常大的数据集。虽然作者没有详细解释权重是如何计算的,但是作者认为这个数据集质量相对较高。下图是各种数据以及相应的权重






关于实验


这里只列举几个比较有代表性的实验结果:


下图展示的是不同大小的预训练模型在训练过程中与计算量之间的关系。在图中,我们可以看到每根线代表一个不同设置的模型,而黄色线代表的是GPT上最大的模型,蓝色线则表示最小的那个模型。X轴表示的是计算量,Y轴表示的是验证损失。由于验证损失与子任务上的精度有关,所以可以很好地表示预训练模型的好坏。

在训练时间变长的情况下,计算量也会随之增加。虽然你的计算量还在增加,但是你的损失却没有再下降,这时就往往不用再进行训练了。在机器学习领域中,一个常见的问题是当想要持续线性提高进度时,需要不断地指数级地增加数据量。然而,对于人类而言,学习所需的样本量相对较少。例如,学会阅读只需要读几本书即可,而机器学习则需要全部抓取互联网上的数据才能进行学习,这与人类的学习方式相比还有很大差距,我们还有很长的路要走。


下图表现的是模型参数大小与精度之间的关系。在图中,X轴表示模型参数的大小,Y轴表示精度。作者指出,在增加模型大小的情况下,机器学习算法可以超越目前最好的一些算法,并且使用few shot的情况下,精度与人类相当接近。





关于局限性


在本章中,作者列举了多个局限性。在我看来,无论是个人使用ChatGPT,还是想将ChatGPT进行商业化落地,这些局限性都是需要进行了解的,因为这样更有助于你更有效地使用,并且能够帮你设计出更合适的落地场景。


1、虽然GPT3在文本生成方面比之前的模型有很大提升,但其仍然存在弱点。举例来说,如果我们让GPT3生成一个很长的文本,它可能会在写几段后重复之前的内容。因此,要让它帮你写小说可能有些困难。

2、GPT3存在一些结构和算法上的局限性。其中一个主要的局限性是因为GPT3使用了语言模型,它是根据上下文生成文本的,因此无法像之前的"Bidirectional Encoder Representations from Transformers (BERT)"那样反向看待文本。这也是因为GPT3使用的是transformer的解码器。

3、因为训练是语言模型,每个词的重要性在预测下一个词时都是相同的。这意味着模型将花费大量时间来学习一些常见但不是非常重要的单词。在人类语言中,有些词是必须要记住的,而有些则不是。但GPT3无法区分它们的重要性。

4、由于训练数据来自整个网络上的文章,其有效性可能不高。对于人类来说,这种方式可能不可靠。

5、对于这种多样本的上下文学习方式,我们不确定模型是否真的是从头开始学习。它是在你给的样本中学习的,还是根据以前的文本中找到相关内容并记忆下来的?这两种方式非常不同。虽然我们喜欢前者,即从头开始学习的方式,但如果模型根据以前的文本中找到相关内容并记忆下来的话,那么最终的泛化能力也将受到训练数据的大小的限制。

6、训练GPT3需要大量的时间和资源。

7、像许多深度学习模型一样,GPT3无法解释。对于GPT3这样的大型模型,找出这些权重和决策是非常困难的。







参考文献



【1】Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. 2018.

【2】Radford A, Wu J, Child R, et al. Language models are unsupervised multitask learners[J]. OpenAI blog, 2019, 1(8): 9.

【3】Brown T, Mann B, Ryder N, et al. Language models are few-shot learners[J]. Advances in neural information processing systems, 2020, 33: 1877-1901.

【4】https://github.com/mli/paper-reading

【5】https://zhuanlan.zhihu.com/p/597586623

【6】https://www.lesswrong.com/posts/ZHrpjDc3CepSeeBuE/gpt-3-a-disappointing-paper








Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/161269
 
237 次点击