当前位置: 首页 > news >正文

GPT,GPT-2,GPT-3 论文精读笔记

前言

参考视频:GPT,GPT-2,GPT-3 论文精读【论文精读】_哔哩哔哩_bilibili

 


 GPT1

标题:Improving Language Understanding by Generative Pre-Training

摘要

自然语言理解涵盖了一系列多样化的任务,如文本蕴含、问答、语义相似性评估和文档分类。尽管大量未标注的文本语料库非常丰富,但用于学习这些特定任务的标注数据却十分稀缺,这使得 discriminative分辨 训练的模型在性能上面临挑战。

我们证明,通过在多样的未标注文本语料库上进行生成预训练,然后在每个特定任务上进行 discriminative微调,可以在这些任务上取得显著的进展。

微调在计算机视觉领域有很多的应用,因为有imagenet这个大规模100万的标注数据集预训练,但是在nlp领域并没有这种量级,而且一张图片所包含的信息可能类比于10个句子,所以可能需要1000万量级的数据集才能类比。 这也是深度学习在nlp邻域刚开始发展不顺利的原因。

在GPT这里,参照计算机视觉的预训练+微调方法,但这里使用的是未标注的文本无监督预训练

与之前的方法相比,我们在微调过程中利用任务感知的输入转换,以实现有效的迁移,同时只需对模型架构进行最小的修改。

上面这句话的原因:文本和图片不一样,文本任务更加多样(单词判断、句子判断、语句生成等任务),多种任务导致每个任务都需要自己的模型。

最早的词嵌入只是做一个词的学习,后面的模型还需要构造,改变。

GPT与之前任务的差别:GPT在微调的时候,构造与任务相关的输入,从而使得很少的改变模型架构就可以了。

我们在自然语言理解的一系列基准测试中展示了我们方法的有效性。我们的通用任务无关模型的表现优于专门为每个任务设计的 discriminative 训练模型,在我们研究的 12 个任务中,有 9 个任务显著提高了当前的最佳水平。例如,我们在常识推理(Stories Cloze Test)上取得了 8.9% 的绝对提升,在问答(RACE)上提高了 5.7%,在文本蕴含(MultiNLI)上提高了 1.5%。


一、引言

从原始文本中有效学习的能力对减轻自然语言处理(NLP)对监督学习的依赖至关重要。大多数深度学习方法需要大量的手动标注数据,这限制了它们在许多缺乏注释资源的领域中的适用性。在这些情况下,能够利用未标注数据中的语言信息的模型提供了一种有价值的替代方案,而收集更多的注释通常耗时且成本高昂。此外,即使在有相当监督的情况下,无监督方式学习良好的表示也能显著提升性能。目前为止,最有说服力的证据是预训练词嵌入word embeddings的广泛使用,这些嵌入提高了多种 NLP 任务的性能。

然而,利用未标注文本中的信息不仅限于单词级别是具有挑战性的,主要有两个原因。首先,目前尚不清楚哪些类型的优化目标最有效地学习对迁移有用的文本表示。最近的研究考察了各种目标,如语言建模、机器翻译和话语连贯性,各种方法在不同任务上表现优于其他方法。其次,关于如何将这些学习到的表示有效地迁移到目标任务上并没有达成共识。现有技术涉及对模型架构进行任务特定的修改,使用复杂的学习方案以及添加辅助学习目标。这些不确定性使得开发有效的半监督学习方法变得困难。

利用未标注的文本信息有两个困难。

困难1:损失函数的选择和任务有关,语言模型、机器翻译或者文本一致性等任务,还没有一个目标函数在这些任务都表现的好;

困难2: 如何有效的把学习到的文本特征传递到下游任务去?因为在nlp的子任务差异比较大,没有一个简单的统一有效方式。

在本文中,我们探索了一种用于语言理解任务的半监督方法semi-supervised,结合了无监督的预训练监督的微调

为什么叫半监督?预训练自监督 + 微调监督 =  半监督

现在 人们把gpt,bert这里用到的方法叫自监督学习self-supervised,而不叫半监督。

我们的目标是学习一种通用表示,该表示可以在广泛任务中进行少量调整后迁移。我们假设可以访问一个大规模的未标注文本语料库和几个具有手动标注训练示例的数据集(目标任务)。我们的设置不要求这些目标任务与未标注语料库在同一领域。我们采用两阶段的训练程序。首先,我们在未标注数据上使用语言建模目标来学习神经网络模型的初始参数。随后,我们使用相应的监督目标将这些参数适应到目标任务上

-------下面是两个技术要点:

1. 选择transformer为模型架构;

对于我们的模型架构,我们使用 Transformer,这已被证明在机器翻译、文档生成和句法分析等各种任务上表现良好。与递归网络等替代方案相比,这种模型Transformer选择为处理文本中的长期依赖提供了更结构化的记忆,从而在多样化任务中实现鲁棒的迁移性能。

为什么选择transformer 而不选择 rnn?
作者发现在迁移学习的时候,transformer学到的特征更加稳健,推测原因是transformer里面有更结构化的记忆能够处理更长的文本信息,从而更好的抽取句子层面和段落层面的这些语义信息。

2. 迁移的时候用的任务相关的输入表示,提高微调效果

在迁移过程中,我们利用从遍历式方法派生的任务特定输入适配,这些方法将结构化文本输入处理为一个连续的token序列。正如我们在实验中展示的,这些适配使我们能够以最小的架构变化有效地进行微调。

我们在四种类型的语言理解任务上评估我们的方法——自然语言推理、问答、语义相似性和文本分类。我们的通用任务无关模型的表现优于专门为每个任务设计的 discriminative 训练模型,在我们研究的 12 个任务中,有 9 个任务显著提高了当前的最佳水平。例如,我们在常识推理(Stories Cloze Test)上取得了 8.9% 的绝对提升,在问答(RACE)上提高了 5.7%,在文本蕴含(MultiNLI)上提高了 1.5%,在最近引入的 GLUE 多任务基准上提高了 5.5%。我们还分析了预训练模型在四种不同设置下的零-shot 行为,并证明它为下游任务获取了有用的语言知识。

二、相关工作

半监督学习在自然语言处理中的应用

我们的研究属于自然语言处理(NLP)中的半监督学习范畴。该范式引起了广泛关注,应用于序列标注或文本分类等任务。最早的方法利用未标注数据计算词级或短语级的统计数据,然后将其用作监督模型中的特征。在过去的几年中,研究人员证明了使用在未标注语料库上训练的词嵌入可以提高各种任务的性能。然而,这些方法主要传递词级信息,而我们的目标是捕捉更高层次的语义。

无监督预训练

无监督预训练是半监督学习的一种特殊情况,其目标是找到一个良好的初始化点,而不是修改监督学习目标。早期的研究探索了该技术在图像分类和回归任务中的应用。后续研究表明,预训练充当了一种正则化方案,使深度神经网络能够更好地泛化。最近,该方法已被用于帮助训练各种任务的深度神经网络,如图像分类、语音识别、实体消歧和机器翻译。与我们研究最接近的工作涉及使用语言建模目标对神经网络进行预训练,然后在目标任务上进行监督微调。然而,尽管预训练阶段有助于捕捉一些语言信息,但他们使用的 LSTM 模型限制了他们的预测能力只能在短范围内。相比之下,我们选择使用 Transformer 网络,能够捕捉更长范围的语言结构,正如我们的实验所示。此外,我们还展示了我们的模型在更广泛的任务上的有效性,包括自然语言推理、同义句检测和故事完成。

辅助训练目标

添加辅助无监督训练目标是一种替代的半监督学习形式。Collobert 和 Weston 早期的工作使用了多种辅助NLP任务,如词性标注、短语切分、命名实体识别和语言建模,以改善语义角色标注。最近,Rei 在其目标任务目标中添加了一个辅助语言建模目标,并在序列标注任务上证明了性能提升。我们的实验也使用了一个辅助目标,但正如我们所展示的,无监督预训练已经学习了许多与目标任务相关的语言特征。

上面三个部分分别对应:

1. GPT模型怎么在没有标号的数据上训练出来

2. 怎么在子任务上用有标号的数据进行微调

3. 最后是在做微调的时候使用了两个训练的目标函数

三、Framework 

3.1 无监督预训练

这里假设有一个未标注的文本,里面每一个词表示成u_i;整个文本就是从u_1 到 u_n,有一个序列信息,也就是说有顺序,不会交换词的顺序;

然后GPT使用一个标准的语言模型的目标函数 来 最大化似然函数。

语言模型就是要预测第 i 个词语u_i 出现的概率

首先提取u_i前面的k个词,这个k是窗口大小,提取u_(i-k) 到 u_(i-1);

预测这k个词后面的一个词 u_i 是什么?预测就是模型Θ;

给定 k个单词 + 模型Θ ---> 预测下一个词的概率(注意这里被预测单词的概率);

每一个词都是u_i ,然后位置从0 到 最后,加上所有的预测结果得到目标函数L1。

why log?


 具体上面的Θ就是transformer中的解码器。

why 解码器?

Transformer一个是编码器一个是解码器,最大的不一样在于

编码器来一个序列进来,对第i个元素抽特征的时候能够看到整个序列里面所有的元素;

而解码器因为有掩码的存在,在对第i个元素抽特征的时候只会看到当前元素和他之前的这些元素,后面那些元素的东西通过一个掩码使得在计算注意力机制的时候变成0,是不看后面东西的。

(28 封私信) Transformer模型详解(图解最完整版) - 知乎

 Decoder 中的Multi-Head Attention:

输入transformer Decoder的具体流程:
先将  U经过  词嵌入word embedding  然后加上 位置编码 得到  h0;

然后通过n个 transformer block(block的输入输出形状相同);

得到最后一个block的输出,做一个投影,然后用softmax得到概率分布。

这里用的decoder因为没有encoder的输出,所以删除了docoder中的第二个cross attention模块。

 BERT VS GPT:

BERT是完形填空的操作,类似于transformer中encoder的操作,能够看完全文,预测中间;

主要区别不是编码器 解码器的选择,而是目标函数的选择:GPT选择了更难的预测未来的样式,这比BERT预测中间结果是要难很多的,这也导致gpt效率没有bert好。

但是如果模型真的能预测未来,那比bert要强大很多,天花板更高。

 3.2 监督微调

 标号是人工标的,L1是预测序列本身,L2是预测序列的标号;

解释:
一个实例,由一系列序列token组成x1,x2,...,xm;

这个token什么样子取决于分词的技术,参看BERT中的word piece:《BERT:Pre-training of Deep Bidirectional Transformers forLanguage Understanding》论文精读笔记-CSDN博客

给了一个实例,然后给定这个实例序列对应的标号y,例如(正面|负面);类似于cls;

每次给这个序列去预测y的概率,例如 正面20%,负面80%。

做法是:

把整个序列放进之前训练好的GPT模型中,然后拿到最后一层transformer block的输出h_l(公式里面的m指的最后一层也就是m层);

输出h_l * 一个输出层W_y,然后再做一个softmax,得到所有标号的概率,只去对应标号y的概率。

这里很容易误解:softmax 是对所有标号y的概率计算,y1 = 20%,y2=80%,相加等于1。

实例1 对应的标号是y1,就取y1对应的概率,这也是为什么P(y|)有y的存在,表示取y对应的概率。

将所有的实例输入,每个实例都是一个输入序列和其对应的标签,形式为 (xi,yi)。

这里的 L2(C)是对数据集 C 中所有实例的损失进行累加的结果。

每个实例的损失 log⁡P(y∣x)衡量了模型对于该实例的预测概率与真实标签之间的匹配程度。


作者又把训练时候用到的L1也加入进来,也就是说有两个目标函数:
1. 第一个是说给你这些序列然后预测序列的下一个词 L1
2. 你完整的序列预测序列对应的标号 L2

3.3 任务特定的输入转换

接下来要考虑的是怎么样把 NLP  里面那些很不一样的子任务表示成一个我们要的形式:

表示成一个序列和他一个对应的标号

对于一些任务,例如文本分类,我们可以直接按照上述方法微调模型。然而,对于其他某些任务,如问答或文本蕴含,输入数据是结构化的,例如有序的句子对,或由文档、问题和答案组成的三元组。由于我们的预训练模型是基于连续文本序列进行训练的,因此我们需要对其进行一些修改,以便将其应用于这些任务。

以往的研究提出了在转移表示的基础上学习任务特定架构的方法。这种方法重新引入了大量的任务特定定制,并没有利用这些附加架构组件的迁移学习。相反,我们使用了一种遍历式的方法,通过将结构化输入转换为预训练模型可以处理的有序序列。这样的输入转换使我们能够避免在不同任务之间进行大量架构上的更改。以下是对这些输入转换的简要描述,图1提供了可视化示例。

所有转换都包括添加随机初始化的开始和结束标记(〈s〉,〈e〉)。

分类任务

给我一句话或者一段文本,判断他对应的一个标号。(ex.比如说一个用户对一个产品的评价)
做法:

把要分类的文字,在前面放一个初始词元,后面放一个抽取的词元(类似cls token)做成一个序列放入Transformer解码器中,然后将模型输出结构中的extract位置的输出放入Linear做分类。例如是10分类任务,那么线性层的输出大小就是10.

刚开始只是的extract只是一个随机初始化,输入之前还并不代表抽取的内容。

文本蕴含

蕴含任务就是给你一段话,再问一个假设,判断我前面这段话有没有蕴含我假设提出来的东西。

ex. 

Premise: a 送给 b 一束玫瑰
Hypothesis: a 喜欢 b

判断:支持 | 不支持 | 既不支持也不反对  三分类问题 

对于蕴含任务,我们将前提  p 和假设  h 的标记序列进行连接,中间用分隔符标记($)分隔。也就是把两个文本组合成一个序列

相似性

对于相似性任务,比较的两个句子之间没有固有的顺序。为了反映这一点,我们修改输入序列,使其包含两个句子的所有可能顺序(中间用分隔符分隔),并分别处理每个序列以产生两个序列表示 h_{l}^{m},然后在送入线性输出层之前进行元素级相加。

第二个序列就是把文字1和文字2交换顺序,两个序列是对称关系,然后将输出相加送入Linear层,得到是相似还是不相似的二分类问题。

问答和常识推理

对于这些任务,我们给定一个上下文文档 z 、一个问题 q 和一组可能的答案 {a_k}。

我们将文档上下文和问题与每个可能答案连接,中间添加一个分隔符标记,以得到序列 [z; q; $; a_k]。

这些序列都由我们的模型独立处理,然后通过 softmax 层进行归一化,以生成对可能答案的输出分布。

也就是说,问一个问题,然后给你几个答案,从中间选出你觉得正确的答案。

如果你有n个答案,就构建n个序列,Context是问题,Answer是每一个答案;

Transofmer的结果送入Linaer,线性层的大小是1,得到的就是这个答案的置信度。对每一个答案都算一个标量,然后用softmax得到最终的答案。

 总结: 虽然任务不同,但都是构建的一个序列,所以中间Transformer都不会更改。

四、实验

用的数据集: BooksCorpus dataset ,有7000篇没有被发表的书;

模型:用的12层的decoder(with mask self-attention heads),每一层的维度是768 。

结果:

vs  BERT

  BERT_large  翻了三倍

数据集:BooksCorpus + Wikipedia ,是gpt的4倍左右

 


 GPT2

标题:Language Models are Unsupervised Multitask Learners  无监督模型是无监督的多任务学习器

摘要

自然语言处理任务,如问答、机器翻译、阅读理解和摘要,通常通过在特定任务的数据集上进行监督学习来解决。我们展示了语言模型在训练于一个名为 WebText 的新数据集(包含数百万个网页)时,开始无需任何显式监督地学习这些任务。当模型基于文档和问题进行条件生成时,其生成的答案在 CoQA 数据集上达到了 55 的 F1 值——与 4 个基线系统中的 3 个系统的性能相匹配或超过,而没有使用 127,000 多个训练示例。语言模型的能力对于零-shot 任务迁移的成功至关重要,提升其能力会在各个任务中以对数线性方式改善性能。我们最大的模型 GPT-2 是一个 15 亿(BERT是3.4亿)参数的 Transformer,在 8 个测试的语言建模数据集中在zero-shot 设置下达到了最先进的结果,但仍然对 WebText 数据集表现不足。模型样本反映了这些改进,并包含连贯的段落文本。这些发现为构建能够从自然发生的示例中学习执行任务的语言处理系统提供了一条有希望的路径。

一、引言

机器学习系统现在在其训练的任务上表现优异(在期望上),这得益于大规模数据集、高容量模型和监督学习的结合(Krizhevsky 等,2012)(Sutskever 等,2014)(Amodei 等,2016)。然而,这些系统在数据分布(Recht 等,2018)和任务规范(Kirkpatrick 等,2017)的小变化面前是脆弱且敏感的。当前的系统更适合被描述为狭义专家,而不是称职的通才。我们希望朝着更通用的系统发展,使其能够执行多种任务——最终不需要为每个任务手动创建和标记训练数据集。

创建机器学习系统的主流方法是收集一个训练示例的数据集,展示所需任务的正确行为,训练一个系统以模仿这些行为,然后在独立同分布(IID)的保留示例上测试其性能。这种方法在狭义专家上取得了良好的进展。但图像描述模型(Lake 等,2017)、阅读理解系统(Jia & Liang,2017)和图像分类器(Alcorn 等,2018)在多样性和各种可能输入上的表现不稳定,突显了这一方法的一些不足。我们怀疑,在单一领域数据集上进行单任务训练的普遍性是当前系统缺乏泛化能力的一个主要原因。面对当前架构,朝着健壮系统的进展可能需要在广泛的领域和任务上进行训练和性能测量。

最近,提出了多个基准,如 GLUE(Wang 等,2018)和 decaNLP(McCann 等,2018),以开始研究这一点。多任务学习(Caruana,1997)是提高整体性能的一种有前途的框架。然而,NLP 中的多任务训练仍处于起步阶段。近期的研究报告了适度的性能提升(Yogatama 等,2019),而迄今为止最雄心勃勃的两个努力分别训练了 10 和 17 个(数据集,目标)对(McCann 等,2018)(Bowman 等,2018)。从元学习的角度来看,每个(数据集,目标)对都是从数据集和目标的分布中抽样的单个训练示例。当前的机器学习系统需要数百到数千个示例来诱导出良好的泛化函数。这表明,多任务训练可能同样需要大量有效的训练对,以实现其在当前方法中的潜力。

继续扩大数据集的创建和目标设计到可能需要的程度,以目前的技术强行推进,将非常困难。这促使我们探索额外的多任务学习设置。当前在语言任务上表现最佳的系统利用了预训练和监督微调的组合。这种方法有着悠久的历史,趋势是朝着更灵活的迁移形式发展。最初,词向量被学习并用作任务特定架构的输入(Mikolov 等,2013)(Collobert 等,2011),然后递归网络的上下文表示被迁移(Dai & Le,2015)(Peters 等,2018),最近的研究表明,任务特定架构不再是必需的,而是转移许多自注意力模块就足够了(Radford 等,2018)(Devlin 等,2018)。这些方法仍然需要监督训练以执行任务当可用的监督数据非常少或没有时,另一系列的工作展示了语言模型在执行特定任务(如常识推理(Schwartz 等,2017)和情感分析(Radford 等,2017))方面的潜力。

在本文中,我们将这两条工作线连接起来,并延续了更通用的迁移方法的趋势。我们展示了语言模型可以在零-shot 设置下执行下游任务——无需任何参数或架构修改。我们通过强调语言模型在零-shot 设置下执行多种任务的能力,展示了这种方法的潜力。根据任务的不同,我们取得了有希望的、竞争性的和最先进的结果。

总结:

在引言部分,文章讨论了机器学习系统在特定任务上的表现,强调了它们在数据分布和任务规范变化时的脆弱性。当前的系统更像是狭义专家,而非通才,作者希望发展出能够执行多种任务的更通用系统,避免为每个任务手动创建和标记训练数据集。

主流方法通常是收集训练示例数据集,训练模型模仿这些行为,并在独立示例上测试性能。然而,这种方法在面对多样化输入时表现不佳,可能导致缺乏泛化能力。为此,文章提出了多任务学习作为改进性能的框架,尽管这在自然语言处理领域仍处于初期阶段。

文章还提到,当前最佳的语言任务系统结合了预训练和监督微调的方法,且逐渐向更灵活的迁移学习形式发展。最后,研究表明,语言模型能够在零-shot 设置下执行下游任务,而无需任何参数或架构修改,展现出在多种任务上取得竞争性和最先进结果的潜力。

 二、方法

近年来,能够计算这些条件概率的模型(如自注意力架构的 Transformer(Vaswani 等,2017))在表达能力上有了显著提升。执行单一任务的学习可以在概率框架中表示为估计条件分布 p(output∣input)p(output∣input)。由于通用系统应能够在同一输入下执行多种不同任务,因此它不仅应基于输入进行条件处理,还应考虑要执行的任务。也就是说,它应该建模为 p(output∣input,task)。这种任务条件化在多任务和元学习设置中被多种方式形式化。

任务条件化通常在架构层面实现,例如在(Kaiser 等,2017)中使用的特定任务编码器和解码器,或在算法层面上如 MAML 的内外循环优化框架(Finn 等,2017)。但如 McCann 等(2018)所示,语言提供了一种灵活的方式来将任务、输入和输出都表示为符号序列。例如,翻译的训练示例可以写为序列(translate to french, english text, french text)。同样,阅读理解的训练示例可以表示为(answer the question, document, question, answer)。McCann 等(2018)演示了可以训练一个单一模型 MQAN,以推断和执行具有这种格式的多个不同任务。

语言建模在原则上也能够学习 McCann 等(2018)提出的任务,而无需明确监督哪些符号是要预测的输出。由于监督目标与无监督目标相同,但仅在序列的子集上进行评估,因此无监督目标的全局最小值也是监督目标的全局最小值。在这个稍微玩味的设置中,(Sutskever 等,2015) 讨论的作为原则训练目标的密度估计问题被规避。问题转而变为我们是否能够在实践中优化无监督目标到收敛。初步实验确认,足够大的语言模型能够在这种玩味的设置中进行多任务学习,但学习速度远低于明确监督的方法。

尽管从上述良好设定到“自然语言中的混乱”之间的距离很大,Weston(2016)在对话的背景下论证了需要开发能够直接从自然语言学习的系统,并展示了一个概念验证——在没有奖励信号的情况下,使用教师输出的前向预测学习问答任务。虽然对话是一种吸引人的方法,但我们担心它过于限制。互联网包含大量信息,可以被动获取,而无需进行互动交流。我们的推测是,具有足够能力的语言模型将开始学习推断和执行自然语言序列中展示的任务,以更好地预测它们,无论其获取方式如何。如果语言模型能够做到这一点,则实际上是在进行无监督多任务学习。我们通过分析语言模型在零-shot 设置下在多种任务上的表现来测试是否确实如此。

2.1. 训练数据集

大多数之前的研究都是在单一文本领域(如新闻文章(Jozefowicz 等,2016)、维基百科(Merity 等,2016)或小说(Kiros 等,2015))上训练语言模型。我们的方法激励我们构建尽可能大且多样化的数据集,以收集尽可能多样领域和上下文中的自然语言任务示例。

一个有前景的多样化和几乎无限的文本来源是像 Common Crawl 这样的网络抓取数据。尽管这些档案的规模比当前的语言建模数据集大得多,但它们存在显著的数据质量问题

Trinh 和 Le(2018)在他们关于常识推理的研究中使用了 Common Crawl,但指出了大量“内容大多难以理解”的文档。在我们对 Common Crawl 的初步实验中也观察到了类似的数据问题。

Trinh 和 Le(2018)在其研究中取得的最佳结果是使用了 Common Crawl 的一个小子样本,该子样本仅包括与他们的目标数据集——Winograd 语法挑战最相似的文档。虽然这是改善特定任务性能的务实方法,但我们希望避免提前对要执行的任务做出假设。

相反,我们创建了一个新的网络抓取,强调文档质量。为此,我们仅抓取那些经过人类策划/过滤的网页。手动过滤完整的网络抓取将非常昂贵,因此作为起点,我们从一个社交媒体平台 Reddit 中抓取了所有获得至少 3 点 Karma 的外部链接。这可以视为其他用户是否觉得该链接有趣、教育性或搞笑的启发式指标。最终数据集 WebText 包含这些 4500 万个链接的文本子集。为了从 HTML 响应中提取文本,我们使用了 Dragnet(Peters & Lecocq,2013)和 Newspaper1 内容

提取器的组合。本文中呈现的所有结果使用的是 WebText 的初步版本,该版本不包括 2017 年 12 月后创建的链接,经过去重和一些基于启发式的清理后,包含稍微超过 800 万个文档,总共 40 GB 的文本。我们从 WebText 中移除了所有维基百科文档,因为它是其他数据集常用的数据来源,并且可能由于与测试评估任务的训练数据重叠而 complicate 分析。

表一给了一些句子证明:

在爬取的数据中,对于英语翻译法语的例子,有很多的样例。

2.2. 输入表示

一个通用的语言模型(LM)应该能够计算(并生成)任何字符串的概率。目前的大规模语言模型包括预处理步骤,如小写转换、分词和处理词汇外的标记,这些步骤限制了模型能够处理的字符串空间。虽然将 Unicode 字符串作为 UTF-8 字节序列进行处理优雅地满足了这一要求,如 Gillick 等(2015)所示,但当前的字节级语言模型在大规模数据集(如 One Billion Word Benchmark(Al-Rfou 等,2018))上的表现不如词级语言模型。我们在尝试在 WebText 上训练标准字节级语言模型时也观察到了类似的性能差距。

字节对编码(BPE)(Sennrich 等,2015)是一种在字符级和词级语言建模之间的实用中间方案,能够有效地在频繁符号序列的词级输入和不频繁符号序列的字符级输入之间进行插值。尽管其名称如此,参考 BPE 实现通常是在 Unicode 代码点上操作,而不是字节序列。这些实现需要包括所有 Unicode 符号的完整空间,以便对所有 Unicode 字符串进行建模。这将导致一个超过 130,000 的基础词汇量,在添加任何多符号标记之前,这在与 BPE 通常使用的 32,000 到 64,000 的词汇量相比显得过于庞大。相比之下,一个字节级的 BPE 版本只需要 256 的基础词汇量。然而,直接将 BPE 应用到字节序列上会导致次优的合并,因为 BPE 使用基于贪婪频率的启发式方法来构建标记词汇。我们观察到 BPE 包括了许多常见单词的不同变体,如“dog”,因为它们在许多变体中出现(如 dog、dog!、dog?)。这导致有限的词汇插槽和模型容量的次优分配。为了避免这种情况,我们防止 BPE 在任何字节序列上跨字符类别进行合并。我们对空格做了一个例外处理,这显著提高了压缩效率,同时仅对多个词汇标记之间的单词造成了最小的碎片化。这种输入表示使我们能够结合词级语言模型的经验优势与字节级方法的通用性。由于我们的方法可以对任何 Unicode 字符串分配概率,这使我们能够在任何数据集上评估我们的语言模型,而无需考虑预处理、分词或词汇大小。

2.3. 模型

我们使用基于 Transformer(Vaswani 等,2017)的架构来构建我们的语言模型。该模型基本上遵循 OpenAI GPT 模型(Radford 等,2018)的细节,并进行了少量修改。

层归一化(Ba 等,2016)被移到每个子块的输入处,类似于预激活的残差网络(He 等,2016),并且在最后一个自注意力块之后添加了额外的层归一化。我们使用了一种修改过的初始化方法,以考虑残差路径上随模型深度的累积。我们在初始化时将残差层的权重按 1/√N 的因子进行缩放,其中 N 是残差层的数量。词汇表扩展到 50,257。我们还将上下文大小从 512 增加到 1024 个标记,并使用了更大的批处理大小 512。

作者设计了四个模型。

 结果:


GPT3

标题:Language Models are Few-Shot Learners

GPT1: pre-training + fine_tuning

GPT2: 主推 zero-shot , 并且①参数量更大15亿,GPT1只有1.17亿;②数据量更大;③训练参数变化,batch_size从64->512,上下文窗口从512->1024;

GPT-2的核心思想就是,当模型的容量非常大且数据量足够丰富时,仅仅靠语言模型的学习便可以完成其他有监督学习的任务,不需要在下游任务微调。

GPT3: GPT2虽然提出zero-shot,但是有效性不高,所以GPT3考虑用少量样本替身有效性;

具体而言:

训练一个GPT3自回归模型,有1750亿个可学习的参数,比之前所有的非稀疏模型都还要大10倍,如果下游任务还需要训练成本很高;GPT3使用few-shot ,但不做任何的梯度更新或者微调,给一些样本的情况下做下游任务。

few-shot但不训练,那还要样本有什么用?

few-shot的样本直接作为prompt放在输入,不用微调,一个大模型解决所有问题。

 一、引言

首先提出,预训练语言表示在自然语言处理(NLP)系统中逐渐成为一种趋势,被以越来越灵活和任务无关的方式应用于下游迁移学习。

但是作者任务 “微调” 应该被消除,原因如下:

  1. 实用性每个新的下游任务都需要大量标注示例的数据集,限制了语言模型的适用性。
  2. 模型泛化能力:在训练数据中发现的虚假相关性可能随着模型的表达能力和训练分布的狭窄性而增加,从而导致在窄任务分布上的微调表现不佳。微调后的效果的提升无法确认是预训练模型还是微调的原因。
  3. 学习效率:人类在学习大多数语言任务时不需要大量的监督数据,只需简短的自然语言指令或少量示例,通常就能以合理的能力执行新任务。

然后提出了两个名词,“meta-learning元学习” 和 “in-context learning 上下文学习”。

“meta-learning元学习”:训练了一个大模型,泛化性很不错;

“in-context learning上下文学习”:GPT3在后面训练样本也不更新权重。

三个蓝色区域表示三个样本,学习了大量的任务,也就是meta-learning过程;

每一个蓝色区域又是相关的任务,可以理解为in-contxt learning上下文的学习。

 通过训练一个1850亿参数的自回归模型GPT-3,测试其上下文学习能力,在每个任务中用三个条件评估GPT3:

  • 少量学习(few-shot learning):允许尽可能多的示例进入模型的上下文窗口(通常为 10 到 100 个)。
  • 单次学习(one-shot learning):仅允许一个示例。
  • 零次学习(zero-shot learning):不允许示例,仅提供自然语言指令。

二、方法

 对 fine-tuning,和GPT3使用的few-shot,one-shot,zero-shot做了解释:

1. 微调(Fine-Tuning, FT)

微调是近年来最常见的方法,它通过在特定任务的监督数据集上更新预训练模型的权重来进行。通常,使用数千到数十万条标注示例。

优点:在许多基准上表现出色。

缺点:每个任务都需要新的大数据集,可能会导致对分布外的泛化能力较差,以及可能利用训练数据中的虚假特征,从而导致与人类表现的不公平比较。本文不对 GPT-3 进行微调,重点关注任务无关的性能,但未来微调仍然是一个有前景的方向。

2. 少量学习(Few-Shot, FS)

推理时为模型提供少量任务示例进行条件化,但不允许更新权重。具体而言,对于典型数据集,示例包括上下文和期望的结果(例如,英语句子及其法语翻译),然后给出 K 个上下文和结果的示例,最后给出一个上下文示例,模型需提供结果。

优点:大幅减少对任务特定数据的需求,并减少从大而窄的微调数据集中学习过于狭窄分布的潜在风险。

缺点:目前这种方法的结果仍然远逊色于最先进的微调模型,并且仍需少量任务特定数据。

3. 单次学习(One-Shot, 1S)

单次学习与少量学习类似,但仅允许一个示例,外加自然语言描述任务。这种区分反映了某些任务向人类传达的方式。给出一个示例通常是人类理解任务内容的有效方式。

优点:提供了一种简单有效的方式来引导任务执行。

4. 零次学习(Zero-Shot, 0S)

零次学习与单次学习相似,但不允许任何示例,仅提供自然语言指令。这种方法提供了最大便利性和潜在的鲁棒性,并避免了虚假相关的影响,但也是最具挑战性的设置。

优点:在某些情况下,这种设置更接近人类执行任务的方式,例如在翻译等任务中,人类通常只需文本指令即可理解任务。

 2.1 模型架构

我们使用与 GPT-2 相同的模型和架构,包括修改过的初始化、把Normalization放到了前面 和可翻转的词元,但不同之处在于我们在变换器的层中使用交替的密集和局部带状稀疏注意力模式,这与sparse Transformer类似。

为了研究机器学习性能对模型大小的依赖性,我们训练了 8 种不同大小的模型,范围从 1.25 亿参数到 1750 亿参数,最后一个模型被称为 GPT-3。

lsh??????? 

http://www.lryc.cn/news/576938.html

相关文章:

  • 各种常用的串口助手工具分享
  • vue-30(理解 Nuxt.js 目录结构)
  • Java 大视界 -- 基于 Java 的大数据分布式存储在科研大数据归档与长期保存中的应用(328)
  • TCP/UDP协议深度解析(三):TCP流量控制的魔法—滑动窗口、拥塞控制与ACK的智慧
  • 【AGI】Qwen VLo:多模态AI的范式重构与AGI演进关键里程碑
  • 数据可视化 - 单子图
  • LeetCode 第80题 删除有序数组中的重复项Ⅱ
  • 【如何实现分布式压测中间件】
  • Conda 环境配置之 -- Mamba安装(causal-conv1d、mamba_ssm 最简单配置方法)-- 不需要重新配置CDUA
  • MCPA2APPT 智能化演示文稿系统:A2A、MCP、ADK 三大架构全流程自动化
  • stm32之普通定时器
  • 左神算法之Zigzag方式打印矩阵
  • 飞云翻倍布林(翻倍密码系统四线布林版)双安全系统+均价趋势指标+日线周线MACD,组合操盘技术图文分享
  • H3C-路由器DHCPV6V4配置标准
  • 群晖nas安装moodle跳坑记录
  • 【更新至2024年】1996-2024年各省农村居民人均消费支出数据(无缺失)
  • 第十二节:Vben Admin 最新 v5.0 (vben5) 快速入门 - 两种权限控制方式(附前后端代码)
  • 对象的finalization机制Test
  • 智慧水务:未来城市水务管理的创新实践与科技飞跃
  • 【科技核心期刊推荐】《计算机与现代化》
  • 学习使用dotnet-dump工具分析.net内存转储文件(3)
  • Java 数据结构 泛型
  • ListExtension 扩展方法增加 转DataTable()方法
  • 常用指令合集(DOS/Linux/git/Maven等)
  • BP-Tools21.02下载 加解密利器 金融安全交易算法工具 PCI认证工具 金融和智能卡的数据加解密和数据转换工具
  • RabbitMQ中,basicAck、basicNack和basicReject是三种核心的消息确认机制
  • 左神算法之矩阵旋转90度
  • 浮油 - 3 相分层和自由表面流 CFX 模拟
  • github上传代码步骤(http)
  • Docker安装的gitlab配置ssl证书