2018年发掘的自回归模型,采用预训练和下游微调方式处理NLP任务;解决动态语义问题,word embedding 送入单向transformer中。

1、GPT简介

目前大多数深度学习方法依靠大量的人工标注信息,这限制了在很多领域的应用。此外,即使在可获得相当大的监督语料情况下,以无监督学习的方式学到的表示也可以提供显着的性能提升。到目前为止,最引人注目的证据是广泛使用预训练词嵌入来提高一系列NLP任务的性能。

GPT主要出论文《Improving Language Understanding by Generative Pre-Training》,GPT 是”Generative Pre-Training”的简称,从名字看其含义是指的生成式的预训练。链接

GPT 采用两阶段过程,第一个阶段是利用语言模型进行预训练(无监督形式),第二阶段通过 Fine-tuning 的模式解决下游任务(监督模式下)。

2、GPT模型概述

2.1 第一阶段

GPT模型 - 图1
上图展示了 GPT 的预训练过程,其实和 ELMO 是类似的,主要不同在于两点:

  • 特征抽取器不是用的 RNN,而是用的 Transformer,上面提到过它的特征抽取能力要强于 RNN,这个选择很明显是很明智的;
  • ELMO使用上下文对单词进行预测,而 GPT 则只采用 Context-before 这个单词的上文来进行预测,而抛开了下文。

GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention,如下图所示。

GPT模型 - 图2

2.2 第二阶段

上面讲的是 GPT 如何进行第一阶段的预训练,那么假设预训练好了网络模型,后面下游任务怎么用?它有自己的个性,和 ELMO 的方式大有不同。
GPT模型 - 图3
对于不同的下游任务来说,要向 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 的网络结构是一样的。

在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构,这样通过预训练学到的语言学知识就被引入到你手头的任务里来了,这是个非常好的事情。再次,你可以用手头的任务去训练这个网络,对网络参数进行 Fine-tuning,【类似图像领域预训练的过程】

那怎么改造才能靠近 GPT 的网络结构呢?
GPT模型 - 图4
GPT 论文给了一个改造施工图如上:

  1. 对于分类问题,不用怎么动,加上一个起始和终结符号即可;
  2. 对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;
  3. 对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
  4. 对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。

3、GPT-1

3.1、GPT-1结构

GPT-1是OpenAI在论文《Improving Language Understanding by Generative Pre-Training》中提出的生成式预训练语言模型。该模型的核心思想:通过二段式的训练,第一个阶段是利用语言模型进行预训练(无监督形式),第二阶段通过 Fine-tuning 的模式解决下游任务(监督模式下)。GPT-1可以很好地完成若干下游任务,包括分类、蕴含、相似度、多选等。在多个下游任务中,微调后的GPT-1系列模型的性能均超过了当时针对特定任务训练的SOTA模型。

GPT-1基于Transformer Decoder的结构。GPT-1在无然督训练阶段,依然采用标准的语言模型,即给定无标签的词汇集合u = { u 1 , . . . , u 2 } ,最大化以下似然函数:
image.png
其中,k是上下文窗口的大小。在模型结构上,GPT-1选择了Transformer Decoder作为其主要组成部分。GPT-1由12层Transformer Decoder的变体组成,称其为变体,是因为与原始的Transformer Decoder相比,GPT-1所用的结构删除了Encoder-Decoder Attention层,只保留了Masked Multi-Head Attention 层和Feed Forward层。Transformer结构提出之始便用于机器翻译任务,机器翻译是一个序列到序列的任务,因此Transformer设计了Encoder用于提取源端语言的语义特征,而用Decoder提取目标端语言的语义特征,并生成相对应的译文。GPT-1目标是服务于单序列文本的生成式任务,所以含弃了关于Encoder部分,包括Decoder的 Encoder-Dcoder Atcnion层。

GBT保留了Decoder的Masked Multi-Atenlion 层和 Fed Forward层,并扩大了网络的规模。将层数扩展到12层,GPT-1还将Atention 的维数扩大到768(原来为512),将Attention的头数增加到12层(原来为8层),将Fed Forward层的隐层维数增加到3072(原来为2048),总参数达到1.5亿。GPT-1还优化了学习率预热算法,使用更大的BPE码表,活函数ReLU改为对梯度更新更友好的高斯误差线性单元GeLU,将正余弦构造的位置编码改为了带学习的位置编码。

GPT-1以Transfomer Decoder模型为主要结构,搭建语言模型骨架, 成为Transformer Block,扩大模型复杂度和相应的参数。GPT-1的数据流如下:

(1)输入语句的前k个词通过词表转化为一维向量GPT模型 - 图6
(2)输入GPT模型 - 图7右乘权重矩阵GPT模型 - 图8GPT模型 - 图9转化为转为特征向量GPT模型 - 图10:
image.png
(3)经过12层Transformer Block,最终的语义特征向量GPT模型 - 图12的计算公式
image.png
(4)Softmax输出下一个词GPT模型 - 图14的概率:
image.png
以上为无监督训练阶段语言模型的数据流,此阶段利用GPT模型 - 图16似然函数作为优化目标训练语言模型。在监督微调阶段,GPT-1采用附加的线性输出层作为针对不同任务的自适应层(每个自适应层都是并列关系,各自拥有的独立的权重矩阵GPT模型 - 图17,需要根据特定任务微调训练)。假定有带标签的数据集GPT模型 - 图18,其中每个实例由一系列输入词GPT模型 - 图19和标签GPT模型 - 图20组成。通过预训练的GPT-1先将输入转化为语义特征GPT模型 - 图21(下标GPT模型 - 图22表示层,上标GPT模型 - 图23表示输入对应GPT模型 - 图24的语义特征),再经过任务特定的线性输出层预测GPT模型 - 图25
image.png
而需要优化的目标函数也变为:
image.png
为了使微调训练后的模型有更好的泛化性能,在监督微调的优化目标函数中加入辅助优化函数是一个已被验证可行的方法,而且可以加速模型的微调收敛。在监督微调训练阶段,GPT-1使用的优化目标函数为
image.png
其中,GPT模型 - 图29是无监督训练阶段的目标函数, GPT模型 - 图30是辅助函数的权重常系整。总体来说,在GPT-1监督微调训练阶段,需要训练的最主要的额外权重矩阵就是GPT模型 - 图31

3.2、GPT-1下游任务微调

文本分类任务

可以通过带标签的文本分类数据,通过微调方法进行训练,让GPT-1学会文本分类。

输入文本:梅西宣布退役。标签:体育新闻

问答或者常识推理任务

虽然标签代表的文本与输入文本并没有因果关系,但语义上存在强关联,可以理解为预训练语言模型经过微调训练能够学会这样的映射。对于输入文本包含多个句子(有序的句子对、二元组、三元组)的任务。

问:今天天气怎么样? 答1: 今天多云转阴,气温23摄氏度。 答2: 今天适合去爬山。答3:周末天气很好。 正确选择:答1

3.3、遍历式方法(Traversal-style Approach)做输入数据预处理

对于由多个句子按照规定组合而成的数据格式,GPT-1显然无法通过更改其输入数据格式来匹配指定任务。将问答语句揉在一起作为输入序列的简单拼接方式存在明显的隐患,事实上,这样做也无法获得很好的微调效果。思考Self-Attention过程在以下输入语句上的表现:

常添天气怎么样?今天多云转阴,气温23摄氏度。今天适合去爬山。周末天气很好。

隐患一,虽然Self-Atcntion的计算过程不考虑词与词之间的距离,直接计算两个词的语义类联性:但是,位置编码会引入位置关系,人类语言学认知及实验结果均表明,距离越近的。因此,直接拼接的输入会导致相同的答案之间在不同的位置与问句产生不同的相关性,即答案之间存在不公平的现象。

隐患二,模型无法准确分割问句与多个答句,在本例中,模型带问号,或者答句内部存在句号,则会出现问题,例如:

怎么用一句话证明你是去过北京?北京干燥。而且北京风沙很大。北京冬天很冷。但是北京的烤鸭很好吃。

模型无法根据句号判断这是两个答案还是四个答案。

考虑到以上两个隐患,GPT-1采用遍历式方法(Traversal-style Approach)做输入数据预处理,从而将预训练语言模型应用于有序句对或者多元组任务。
image.png
蕴含任务
(1)任务介绍:给定一个前提P(Pronise)根据这个前提推断假设H(Hypotheis),与前提P的关系,蕴含关系表示可以根据前提推理得到假设H,蕴含的任务就是计算在已知前提P的情况下,能推理得到假设H成立的概率值。
(2)人改写:顺序连接前提户和假设日,中间加入分隔符,如图A1中蓝色部分所示。
(3)样例:

体错我的球明天还你。$你的球在我这里。

相似度任务
(1)任务个绍:给定两个文本序列,判断两个序列的语义相似性,以概率表示(0~1)。
(2)输入改写:相似度任务中的两个文本序列并没有固定顺序,为了避免序列顺序对相似度计算造成干扰,生成两个不同顺序的输入序列,经过GPT-1主模型(12个Transfomer Block)后,得到语义特征向量GPT模型 - 图33,在输入至任务独有的线性层之前按元素相加。
(3)样例:

她很漂亮S她很好看 她很好看S她很漂亮

多选任务
(1)任务介绍:给定上下文文档GPT模型 - 图34也可以没有)、一个问题GPT模型 - 图35(question)和一组可能的答案GPT模型 - 图36(answer),从可能的答案中选取最佳答案。
(2)输入改写:将上下文GPT模型 - 图37和问题GPT模型 - 图38连在一起作为前提条件,加入分隔符与每个可能的答案GPT模型 - 图39拼接,得到GPT模型 - 图40序列。这些序列都用GPT-1单独进行处理(包括独有的线性层),最后通过Softmax 层进行规范化,在所有可能的答案上计算一个概率分布。
(3)样例:

今天天气怎么样?8今天多云转阴,气温23摄氏度。 今天天气怎么样?S今天适合去爬山。 今天天气怎么样?S周末天气很好。

4、GPT-2:Zero-shot Learning

机器学习中的三个概念:Zero-shot Learning(零样本学习)、One-shot Learning(单样本学习)和Few-shot Learming(少样本学习)。深度学习技术的迅速发展离不开大量高质量的数据,但在很多实际应用场景中,获取大量的高质量数据非常困难,所以模型能从少量样本中学习规律并具备推理能力是至关重要的。

4.1、核心思想

GPT-2的核心思想并不是通过二阶段训练模式(预训练+微调)获得特定自然语言处理任务中更好的性能。而是彻底放弃微调阶段,仅通过大规模多领域的数据预训练,让模型在Zero-shot Learning的设置下自己学会解决多任务的问题。与之相对的是,在特定领域进行监督微调的爱的专家模型并不具备多任务场景下的普适性。GPT-2在Zero-shot Learning设置下依然能够很好执行各种任务,证明了自然语言处理领域通用模型的可能性。

对于Zero-Shot问题,则需要考虑目标的风格以及分布情况,并实现一些训练集到测试集的映射(如处理特殊符号、缩写等),从而实现从已知领域到未知领域的迁移学习。GPT-2在Zero-Shot(尤其是小数据集Zero-Shot)以及长文本(长距离依赖)中都表现优异。下图为GPT-2在童书词性识别测试中的成绩:位于人类水平之下,但超过了之前模型的水平。
image.png

4.2、模型结构

与第一代GPT模型相I比,GPT-2在模型结构上改动极小、在复用GPT的基础上,GPT-2做了以下修改:
(1)LN层被放置在Self-Attention层和Feed Forward层前,而不是像原来那样后置。
(2)在最后一层Tansfomer Block后增加了LN层。
(3)修改初始化的残差层权重,缩放为原来的GPT模型 - 图42。其中,N是残差层的数量。
(4)特征向量维数从768扩展到1600,词表扩大到50257。
(5)Transformer Block的层数从12扩大到48。

GPT-2有4个不同大小的模型,它们的参数如下:
image.png

最小的模型其实就是第一代GPT,参数量也达到了1.17亿;而参数量高达15亿的最大模型,一般被称为GPT-2。GPT-2的不俗表现,证明它是一个极其优秀的预训练语言模型。

5、GPT-3:Few-shot Learning的优秀表现

与GPT-2在Zero-shot Learning设置下的惊喜表现相比,GPT-3在Few-shot Learning设置下的性能足以震惊所有人。在自然语言处理下游任务性能评测中,GPT-2在Zero-shot Learning设置下的性能表现远不如SOTA模型,而GPT-3在Few-shot Learning设置下的性能表现与当时的SOTA模型持平,甚至超越了SOTA模型。

GPT-3 的训练过程与 GPT-2 类似,但对模型大小、数据集大小与多样性、训练长度都进行了相对直接的扩充。关于语境学习,GPT-3 同样使用了与 GPT-2 类似的方法,不过 GPT-3 研究团队系统地探索了不同的语境学习设定。

OpenAI 团队明确地定义了用于评估 GPT-3 的不同设定,包括 zero-shot、one-shot 和 few-shot。

Fine-Tuning (FT):微调是近几年来最为常用的方法,涉及在期望任务的特定数据集上更新经过预训练模型的权重; Few-Shot (FS):在该研究中指与 GPT-2 类似的,在推理阶段为模型提供少量任务演示,但不允许更新网络权重的情形; One-Shot (1S):单样本与小样本类似,不同的是除了对任务的自然语言描述外,仅允许提供一个任务演示; Zero-Shot (0S):零次样本除了不允许有任何演示外与单样本类似,仅为模型提供用于描述任务的自然语言指示。

以英-法翻译任务为例,展示了四种方法。该研究将重点放在 zero-shot、one-shot 和 few-shot 上,其目的并非将它们作为竞品进行比较,而是作为不同的问题设置。OpenAI 团队特别强调了 few-shot 结果,因为其中许多结果仅仅略微逊色于 SOTA 微调模型。

模型结构
使用了和 GPT-2 相同的模型和架构,包括改进的初始设置、预归一化和 reversible tokenization。区别在于 GPT-3 在 transformer 的各层上都使用了交替密集和局部带状稀疏的注意力模式,类似于 Sparse Transformer。

GPT-3缺点
(1)不具备真正的推理
(2)存在不良内容出现
(3)在高度程序化问题上表现不佳

6、总结

GPT 预训练时利用上文预测下一个单词,ELMO和BERT (下一篇将介绍)是根据上下文预测单词,因此在很多 NLP 任务上,GPT 的效果都比 BERT 要差。但是 GPT 更加适合用于文本生成的任务,因为文本生成通常都是基于当前已有的信息,生成下一个单词。

优点
RNN所捕捉到的信息较少,而Transformer可以捕捉到更长范围的信息。
计算速度比循环神经网络更快,易于并行化
实验结果显示Transformer的效果比ELMo和LSTM网络更好

缺点
对于某些类型的任务需要对输入数据的结构作调整
对比bert,没有采取双向形式,削弱了模型威力

image.png