从word2vec开始,说下GPT庞大的家族系谱

机器之心分析师网络

编辑:H4O

GPT不是凭空而出,它是经过了很多人的努力,以及很长一段时间的演化得来的。因此,梳理一下GPT的庞大“家族”还是很有必要的,看看他继承了什么,学习了什么,又改进了什么,这样也能更好地理解GPT各个部分的原理。

现在很多人把2018年(BERT提出)作为NLP元年(类似于当时ImageNet的提出),其趋势与当年的图像领域也极其类似——模型越来越大。2018年的BERT-large(最大的BERT模型)的参数量是340M,而到了2020年的GPT-3,这个数字已经翻了无数倍了。很多人第一次了解到GPT大概是2018年,那个时候GPT还是个配角(被其兄弟BERT拉出来示众),当时的主角是BERT,BERT的成功让当时论文中作为前身的ELMo和GPT也火了一把。其实当时的GPT也没有BERT第一版论文中说的那么差,现在的BERT论文也已经没有了当时的对比图片,而最近的GPT-3总结了当时的失败经验,也开始重视媒体宣传,让GPT成功以C位出道,结结实实当了次主角。

一提到GPT3,大家第一印象大概就是异常庞大的参数量——1750亿,比其前身多100倍,比之前最大的同类NLP模型要多10倍。事实上,如今的GPT-3是在很长一段时间的演变后得到的(汇聚了老祖宗们的优秀智慧),从word2vec开始,各式各样的语言模型就开始变得让人眼花缭乱,也有很多给GPT的诞生提供了很大的启发,我们今天就从老祖级别的word2vec开始,从头到尾梳理一下GPT的“家谱”和word2vec领衔的庞大的NLP“家族集团”。

值得注意的是,这里列出的家族成员都是跟GPT关系比较近的,所以本文列举的内容并不能完全囊括所有语言模型的发展,本文的主要目的是为了梳理GPT的原理脉络,并与一些类似的模型做必要的对比以加深理解。

家谱总览

为了更好地给GPT建立一个“家谱”,也让你们知道这篇文章会涉及什么内容,首先要宏观的比较一下这个庞大的家族各个成员的出生时间(图1)。

图1:家族成员出生日期。

有了这个出生时间表,再对他们有一定的了解(本文的主要目的),它们的关系其实就很好确定了,所以这个庞大家族的族谱大概可以画成图2的这个样子。

图2:GPT族谱。

读到这里对这些模型不够了解或者有完全没有听过的也没有关系,细心的同学可能会发现Attention的出生日期并没有列在图1中,因为Attention算是GPT的一个远方表亲,因为Attention业务的特殊性(主要是外包工作,后面会详细说),GPT对其没有完全的继承关系,但是GPT和他的兄弟姐妹们都有attention的影子。

对GPT族谱有了宏观的了解后,就可以开始正式进入正题了。

WordEmbedding[1,2]

WordEmbedding(词嵌入)作为这个庞大家族集团的创始人,为整个“集团”的蓬勃发展奠定了坚实的基础。到目前为止,词嵌入一直是NLP集团的中坚力量。Word2Vec和Glove等方法就是很好的例子,为了避免对“集团”的根基不明白,这里先对词嵌入进行简要介绍。

对于要被机器学习模型处理的单词,它们需要以某种形式的数字表示,从而在模型中使用这些数字(向量)。Word2Vec的思想就是我们可以用一个向量(数字)来表征单词的语义和词间的联系(相似或相反,比如“斯德哥尔摩”和“瑞典”这两个词之间的关系就像“开罗”和“埃及”之间的关系一样),以及语法联系(如英文中的‘had’和‘has’的关系跟‘was’和‘is’的关系一样)。

这位创始人很快意识到,他可以用大量文本数据对模型进行预训练从而得到嵌入,这样的效果比在特定的任务(数据量较少)上训练更好。所以word2vec和Glove这种可供下载的预训练词向量表(每个词都有自己对应的词向量)就出现了,图3展示了GloVe中‘stick’这个词的对应的词嵌入(部分)。

图3:“stick”的词向量(图源:[15])

ELMo[3]——语境很重要!

在爷爷创建了这个家族企业之后,后续也有很多很多后代在对其进行发展,GPT的近亲中也有这么一位——ELMo(2018年2月)。这位GPT-3的叔叔在2018年跟GPT-1一起被BERT拉出来示众(作比较),所以大家应该也比较耳熟。ELMo创业的时候,Transformer还未经打磨,Transformer的儿子Transformer-decoder(2018年1月)同样还没有火起来,所以他还没有用Transformer(也因此被BERT在最开始的论文里拉出来作对比),但是他注意到了词向量不能是不变的,比如一开始学习词嵌入的时候是用下面这两句话:

“哦!你买了我最爱的披萨,我爱死你了!”

“啊,我可真爱死你了!你把我最爱的披萨给蹭到地上了?”

这里的“爱”明显意思是不同的,但是因为训练的时候没有看到“爱”后面的话,所以“爱”就在词嵌入的空间里被定义为褒义词了。首先我们要知道的是ELMo(EmbeddingfromLanguageModel)中也是使用了“语言模型”任务来完成语境的学习,这也是我在这篇文章里提到ELMo的一个重要原因(另一个就是其为了解决上面提出的问题的方法),为了防止有人对语言模型不熟悉,这里给出一个语言模型的定义——语言模型其实就是给定一个模型一串词,然后让模型预测下一个词。

了解了语言模型的概念,上面问题出现的原因就不难理解了——模型看到的是前文,看不到后文。为了解决这个问题,ELMo就用双向LSTM来获取双向语境。同时,上面涉及的问题不只是双向语境问题,还有一个很严重的问题——词嵌入不应该是不变的。也就是说,不同的句子里同一个词可能有不同的意思,那么词嵌入肯定也该不一样。

Ourwordvectorsarelearnedfunctionsoftheinternalstatesofadeepbidirectionallanguagemodel(biLM),whichispretrainedonalargetextcorpus.

最终,这些思想都给他的侄子们(GPT,BERT等)带来了很大的启发。如果对ELMo的计算细节感兴趣,本文最后也贴了reference,可以去看一下原论文,还是有很多很聪明的想法的,不过它不是我们今天的主角,因此这里就不多做赘述了。

【旁支】Attention

在说完ELMo之后,本来就应该开始介绍现在家族集团的中流砥柱BERT和GPT了,但是在这之前还是要简要回顾一下attention和selfattention,我猜很多加入NLP不久的人应该跟我一样,一上来从各大科普文中接收到的概念就是self-attention和self-attention的计算过程,对于self-attention名字的由来还是很迷糊,甚至很多科普文的作者对这个概念都是迷迷糊糊的,导致我在求证自己的理解的时候都发现很多不同的版本,不过我们还是要忠于原论文,因此这个问题还是从最开始论文对Attention的定义开始说起,很多attention的科普文的第一部分都会对attention的原理进行很形象的描述,顾名思义就是我们希望我们的模型在给我们结果的时候不要傻乎乎的给它什么他就都看,而是只看重要的那一点,机器之心对于注意力还有很多很有趣的解释,这里就不浪费篇幅做重复的工作了,直接上正式的定义:

Anattentionfunctioncanbedescribedasmappingaqueryandasetofkey-valuepairstoanoutput,wherethequery,keys,values,,wheretheweightassignedtoeachvalueiscomputedbyacompatibilityfunctionofthequerywiththecorrespondingkey.

——Attentionisallyouneed

这段话的意思就是说,attention机制里主要有三个向量-key,query和value,其实可以将Attention机制看作一种软寻址(SoftAddressing):Source可以看作一个中药铺子的储物箱,储物箱里的药品由地址Key(药品名)和值Value(药品)组成,当前有个Key=Query(药方)的查询,目的是取出储物箱里对应的Value值(药品),即Attention数值。通过Query和储物箱内元素Key的地址进行相似性比较来寻址,之所以说是软寻址,指的是我们不只从储物箱里面找出一中药物,而是可能从每个Key地址都会取出内容,取出内容的重要性(量的多少)根据Query和Key的相似性来决定,之后对Value进行加权求和,这样就可以取出最终的Value值(一副中药),也即Attention值。所以不少研究人员将Attention机制看作软寻址的一种特例,这也是非常有道理的[12]。只说理论没有细节就是耍流氓,所以下面看一下作为外包公司的Attention的甲方们到底是谁。

RNNLSTM

本节我们以机器翻译任务为例,以介绍甲方RNN提出的问题以及Attention给出的解决方案。首先看一下RNN原创的解决方案(图4)。

图4:RNN原始方案(图源:[12])

在原始的方案中,待翻译的序列(X)的信息被总结在最后一个hiddenstate(hm)中,身负重任(带着原始句子的所有信息)的hm最终被用来生成被翻译的语言(Y),这个方案的问题很明显,h_3的能力有限,当句子很长的时候,很容易丢失重要信息。问题提出来了,Attention给出了怎样的解决方案呢?

图5:Attention给出的最终方案(图源:[13])

在正式介绍Attention给出的方案之前,还是简单回顾一下Attention的计算过程(这里提到的Attention在Transformer中被称为ScaledDot-ProductAttention)。

图6:Attention计算过程(图源:[4])

如图6所示,Q和K首先会计算联系程度(这里用的是dot-product),然后通过scale和softmax得到最后的attention值,这些attention值跟V相乘,然后得到最后的矩阵。

回顾了Attention的计算过程后,图5所示的方案就好理解多了,它还是一个encoder-decoder结构,上半部分是decoder,下半部分是encoder(双向RNN)。开始的流程跟原始版本的RNN一样,首先Encoder获得了输入序列X的hiddenstate(h),然后docoder就可以开始工作了。从这里开始,docoder的工作因为Attention的加入开始发生了变化,在生成s_t和y_t时,decoder要先利用s_{t-1}和各个hiddenstate的联系度(利用加权点乘等方式获得)来获得attention(a),这些attention最终作为权重对各个h进行加权求和从而得到背景向量(context),后面就没什么变化了,y_t基于s_{t-1},y_{t-1}和context来生成。

为了更好地理解图5在做什么,我们可以再将上图中的各个符号跟我们前面的Attention中的三类向量联系起来:

在查询过程中,我们的目的是为了通过h和s的相关性来确定h在context矩阵中的权重,所以最上面的s_t就是query向量,用来做检索的;

如果理解了上一点和前面对Attention机制的解读,因此这里的h_t就很好理解了,它就是上文中的key和value向量。

LSTM公司中的Attention机制虽然没有那么明显,但是其内部的Gate机制也算一定程度的Attention,其中inputgate选择哪些当前信息进行输入,forgetgate选择遗忘哪些过去信息。LSTM号称可以解决长期依赖问题,但是实际上LSTM还是需要一步一步去捕捉序列信息,在长文本上的表现是会随着step增加而慢慢衰减,难以保留全部的有用信息。

总的来说,Attention机制在外包阶段就是对所有step的hiddenstate进行加权,把注意力集中到整段文本中比较重要的hiddenstate信息。Attention除了给模型带来性能上的提升外,这些Attention值也可以用来可视化,从而观察哪些step是重要的,但是要小心过拟合,而且也增加了计算量。

自立门户——Self-attention

Attention在外包自己的业务的时候,其优秀的外包方案引起了Transformer的注意,Transformer开始考虑Attention公司的核心思想能不能自立为王呢?一不做二不休,Transformer向自己的远房表亲Attention表达了这一想法,两者一拍即合,经过了辛苦的钻研后,他们兴奋地喊出了自己的口号——“Attentionisallyouneed!”

然后,Transformer公司应运而生了!

【中兴之祖】Transformer:Attention就够了!

承前启后——self-attention

他们到底做了什么呢?简单来说,就是用了改良版的self-attention将attention从配角位置直接带到了主角位置。为了防止我的转述使大家的理解出现偏差,这里还是先贴上原文对于Transformer中各个组件的attention机制的介绍(为了方便解释,我稍微调整了一下顺序):

,allofthekeys,valuesandqueriescomefromthesameplace,inthiscase,eroftheencoder.

Similarly,self-attentionlayersinthedecoderalloweachpositioninthedecode(settingto−∞)allvaluesintheinputofthesoftmaxwhichcorrespondtoillegalconnections.

In"encoder-decoderattention"layers,thequeriescomefromthepreviousdecoderlayer,einputsequence.

可以看出Transformer主要提使用了两种Attention——Self-attention和encoder-decoderattention。这里的Self-attention主要是为了抛掉外力(LSTM,RNN,CNN等),encoder-decoderattention则延续了前面的外包方案(图5),作用跟过去相同,主要是为了连接encoder和decoder。这里的SelfAttention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制[12]。

图7:self-attention可视化(图源:)

图7可视化了某一层的self-attention的结果,Attention值都是相对于这个句子本身的(包括这个词本身),这个图很生动的表现了self的含义。同时我们可以看到相较于传统的时间序列模型,self-attention的优势还是很明显的——可以很好地注意到该注意的部分,不会受文章长度的影响。原论文[4]中的第四章有具体的抛掉外力之后的好处(总不能只是为了自立门户而自立门户,自立门户的时候一定是有自己的优势的),但是这里的原因与主线关系不太大,这里就不做搬运工了。

总的来说,self-attention的引入让Attention机制与CNN、RNN等网络具有了一样的地位(都开了公司),但是可以看到的是,这样做的限制还是很大的,所以Transformer的儿子们几乎都没有完整的引入Transformer,都是有选择的保留一部分。

Self-attention计算细节

但是,对于self-attention理解在后面理解这些兄弟们企业核心的区别很重要,所以这里我们占用篇幅搬运一个具体的计算例子(来自Jalammar的多篇文章,如果已经理解了可以跳过):第一步,先是通过X_i和各个W(可训练的权重矩阵)的相乘得到query,key和value矩阵(如图8所示):

图8:self-attention原始矩阵(图源:)

然后就是按照图9所示的步骤一步一步先计算score,再normalize(divide那一步),最后用softmax得到attentionscore,然后用这个attetion作为权重求v1和v2的加权和,就得到最终的self-attention在这个位置(thinking这个词)的输出值了。

图9:self-attention计算流程(图源:)

图10是一个具体的self-attention的例子,可以看到it这个词对自己的attention其实很小,更多的注意力放在了arobot上,因为it本身没有意思,它主要是指代前面的arobot。所以一个词的query和key是不同的(相同的话相似度肯定是最大的,这样百分百的注意力都在自己身上),在做计算的时候是一视同仁的,虽然都是来自于it这个词,但是这里it的key告诉我们的信息就是它并不重要。

图10:self-attention矩阵细节(图源:)

绝不微不足道的区别

前面介绍了那么多,甚至贴上了论文的原文,一个很重要的目的是为了强调self-attention层在encoder和decoder中是不一样的!encoder在做self-attention的时候可以“atttoallpositions”,而decoder只能“atttoallpositionsinthedecoderuptoandincludingthatposition”(划重点,涉及到BERT和GPT的一个重要区别)。简单来说,就是decoder跟过去的Languagemodel一样,只能看到前面的信息,但是encoder可以看到完整的信息(双向信息)。具体细节在介绍到BERT和GPT的时候会详细介绍。

【后浪时代】BERTGPT其他

如果你足够细心的话,可以看到前面我提到的例子几乎都是机器翻译相关的,这是因为Transformer的encoder-decoder结构给其带来了很大的局限性。如果你想要做文本分类任务,使用Transformer的困难就很大,你也很难预训练好这个模型然后再在各种下游任务上fine-tune。因此,Transformer的儿子们给我们带来了令人惊喜的后浪时代。

大儿子Transformer-decoder[6]——语言模型回来了!

Transformer的大儿子首先发现了父亲公司的冗余机制,然后打出了自己的两块主要招牌:

翻译成中文就是:“我们的模型在裁员(encoder)后,看的更远了,也能pretrain了,还是儿时的味道(LanguageModelling)!”

可以看出大儿子是个黑心老板,他发现只需要用一部分Transformer,就可以做成他想做的languagemodelling,因此它只保留了decoder,因为decoder在Transformer里的工作就是根据前面的词预测后面的词(跟Languagemodelling的任务一样)。但是如前文所述(图11),Transformer除了其提出的self-attention以外,还保留了过去的encoder-decoderattetion,而现在因为没有encoder了,所以encoder-decoderattention层这里就没有了。

图11:Transformer的encoder-decoder结构细节(图源:)

如果你仔细读了上面那一句话,然后看了图11并相应地移除了encoder-decoderattention层,你就会发现,encoder和decoder的结构一模一样了!那为什么我还要提BERT和GPT使用的Transformer不同呢?先看一下图12中对于transformerdecoder的描述:

图12:transformerdecoder细节(图源:[6])

就是说本来Transformer中的decoder是要接收encoder那边对输入(m)处理后得到的信息,然后得到最终输出(y),而且在得到后面的y的时候,要考虑前面已经生成的y,因此在去掉encoder之后,decoder在考虑y的同时也得考虑m的信息,所以公司既然裁员了,那么decoder的活就得多一些,它的输入就是m和y的结合体了,同时中间还有\gamma来分隔开输入输出(黑心老板无疑了),当然这样做的时候,给的工资也是更高的(输入序列长度从512变成了1024)。

基于回归语言模型的特性,Transformer-decoder为自己赢下了极好的声誉,而这良好的声誉引起了他的弟弟——GPT-1的注意。

二儿子GPT-1-NLP也能迁移学习

GPT-1从大哥Transoformer-decoder的成功中看到了机会,并且挖掘出了更本质的商机——用预训练好的模型做下游任务。基于这个想法,他然后打出了自己的招牌:

Wedemonstratethatlargegainsonthesetasks(downstreamtasks)canberealizedbygenerativepre-trainingofalanguagemodelonadiversecorpusofunlabeledtext,followedbydiscriminativefine-tuningoneachspecifictask.

这块招牌里的GenerativePre-Training(GPT)其实本质上就是大哥Transformer-decoder做的事,但是真的在finetune的时候,其实有很多麻烦,于是GPT-1公司体贴的在这个基础上做了很多很灵活的调整,给出了很多方案:

wemakeuseoftask-awareinputtransformationsduringfine-tuningtoachieveeffectivetransferwhilerequiringminimalchangestothemodelarchitecture.

具体GPT-1的具体工作流程如图13所示:

图13:如何使用GPT(OpenAITransformer)进行Finetune(图源:)

图14展示了GPT-1给出的finetune方案,也就是前面说的对应不同任务的inputtransformation,这些方案非常巧妙,也取得了很多成功,同样也使其获得了广泛的应用。但是GPT-1的热度并没有BERT高,因为当时的GPT-1没有足够商业头脑,媒体宣传度不够,从而在其兄弟BERT公司开张的时候被当做“反面典型”示众。当然,当时的GPT家族野心也不够大,他的few-shotlearning的强大力量还没有展现出来(GPT-2开始在做的事,后面详述)。

图14:如何进行Finetune(图源:)

小儿子BERT——Encoder也能撑起半边天

在GPT的公司开的如日中天的时候,小儿子BERT也悄悄地长大了。叔叔ELMo最喜欢他兄弟的这个小儿子,所以常常带他来公司玩,也会给他讲一讲他们公司的业务,因此“双向信息很重要”这个概念也在小BERT的脑海中深深烙下了烙印。当他长大后,看到哥哥GPT公司的宣传标语时,觉得这不就是语言模型吗?不行,双向信息都没得到,得改!可是他不想直接进叔叔ELMo的公司,父亲Transformer又直接抛弃了叔叔公司的核心技术之一——LSTM,双向信息无法直接应用在transformer中(看一下LSTM和基于selfattention的Decoder的工作机制就可以发现Decoder没办法像LSTM那样获得反向的信息)。

冥思苦想之后,他突然发现,父亲的Encoder不正是最好的选择吗?哥哥们用了Decoder做语言模型,那他用Encoder不也可以吗,而且还能获得双向信息(MaskedlanguageModel,MLM)。MLM的大概思想就是本来自注意力机制不是主要注意自己嘛(类似于照镜子),那我就挡住你自己的脸,让你自己根据兄弟姐妹的样子(前后文信息)来猜自己的样子,等你能猜得八九不离十了,你就出师了,可以干活了。

但是小BERT还是太天真了,哥哥们选择decoder不是没有理由的,比如一个很实际的问题就是,BERT既然用的是Encoder,因为encoder输入的就是一个带mask的句子,那么怎么去做“双句问题”(如给定两个句子,说明是否是表达同一个意思)呢?经过仔细的考量,BERT决定再学习一下哥哥们语言模型的特性,在预训练的时候加入了Nextsentenceprediction任务——就是给定句子A,让你猜句子B是不是A后面的句子,这样句间关系也学到了。这个时候,BERT公司就可以正式开业了。具体业务和工作方式如图15所示:

图15:BERT业务(图源:[10])

最后,还是要说一下Encoder和Decoder的区别,其实本质上是自回归模型(Autoregression)和自编码模型(AutoEncoder)的区别,他们并不是谁比谁更好的关系,而是一种要做权衡的关系。BERT选择了Encoder给其带来的一个很重要的问题,Encoder不具备Decoder的自回归特性(AutoRegressive),而自回归特性可以让模型有很明确的概率依据。这个区别在XLNet(不重要的儿子们之一,后面会再稍微提一下)提出的时候尤为明显,因为XLNet属于AutoRegressive模型,而BERT属于AutoEncoder模型,为了更好地理解AR和AE模型的差异,我们来看一下BERT和XLNet的目标函数:

这是XLNet(AR)的:

这是BERT(AE)的:

这两个公式的具体意思我这里就不详细讲了,感兴趣的可以去看原论文,我之所以贴出这两个目标函数,重点在于XLNet的“=”和BERT的“≈”。而这个“≈”,就是抛弃自回归特性带来的代价。至于具体原理,由于输入中预测的token是被mask的,因此BERT无法像自回归语言建模那样使用乘积法则(productrule)对联合概率进行建模,他只能假设那些被mask的token是独立的,而这个“≈”就是来自于这个假设。同时,因为模型微调时的真实数据缺少BERT在预训练期间使用的[MASK]等人工符号,也就是在输入中加入了部分噪音,这会导致预训练和微调之间出现差异。而AR模型不需要在输入中加入这些噪音,也就不会出现这种问题了。

他的哥哥们之所以选择AR模型,是因为AR模型在生成任务中表现得更好,因为生成任务一般都是单向且正向的,而且GPT的招牌中就明确写出了他们的主要工作是Gnereativepretraining。因此AR和AE,具体来说就是选择encoder还是decoder,其实最本质还是一种权衡利弊,最适合自己的就是最好的。

【外传】Transformer的私生子们

私生子们因为不受到重视,反而就会格外努力去遵循父亲的指导,尽心尽力去改进父亲的不足。Transformer的其中一个私生子,transformerXL[17](XL的意思是extralong),表现很出色(主要是他的儿子XLNet[16]出色),让transformer回归了AR的本性,也让Transformer可以处理的序列更长了,前面也说过AR模型的优势。但是AR模型之所以没有这些缺陷是因为他们没有使用MaskedLM方法,而MaskedLM的提出正是为了解决AR模型的限制之一——AR语言模型仅被训练用于编码单向语境(前向或后向),而下游语言理解任务通常需要双向语境信息。可见AR阵营本身有自己的优势,但如果想要获得更大的胜利,就必须找到一个比MaskedLM更好的办法来解决双向语境问题。

可是他究其一生也没能完成这个任务,他的儿子XLNet弥补了它的遗憾,解决了双向语境问题,大概的方案就是

图16:XLNet提出的双向语境方案(图源:[16])

一开始AR模式不是只能单向工作吗?那就把输入乱序,找到所有的排列组合,并按照这些排列组合进行因式分解。当然这样计算量很大,XLNet也想到了很好的方式来解决,具体怎么解决的这里就不说了,可以去原论文看一下,但是XLNet确实在当时也引起了不小的波澜,也算是私生子们一场不小的胜利了。

【现代】GPT23——大即正义(Biggerthanbigger)

最后回到当下,也是现在的GPT2和GPT3,读到这里,其实GPT2和GPT3就没什么技术细节可以讲了,他们发现父辈们已经开创了一个时代,比如BERT打破了自然语言处理领域模型在各项任务中的记录,而且在描述模型的论文发布后不久,该团队还开源了该模型的代码,并提供了已经在大量数据集上进行了预训练的模型。这是一项重要的发展,因为它使任何构建涉及语言处理的机器学习模型的人都可以使用此强大的功能作为随时可用的组件,从而节省了从训练语言处理模型上来的时间,精力,知识和资源(如图17所示)。

图17:新时代(图源:)

回到GPT,在介绍GPT-1的后代们做了什么之前(主要是扩大模型),先看一下GPT-2和GPT-3的论文名字:

Languagemodelsareunsupervisedmultitasklearners.(GPT-2)

LanguageModelsareFew-ShotLearners.(GPT-3)

看到这些名字,第一感觉大概就是“一脉相承”。实际上GPT的后代们也是这么做的,GPT-1的后代们的目标是实现zero-shotlearning,取消fine-tune机制!这也是为什么GPT-3能够大火,给人以经验的原因。到了GPT-2,就开始跨出了创造性的一步——去掉了fine-tuning层,再针对不同任务分别进行微调建模,而是不定义这个模型应该做什么任务,模型会自动识别出来需要做什么任务。这就好比一个人博览群书,你问他什么类型的问题,他都可以顺手拈来,GPT-2就是这样一个博览群书的模型[18]。其他的特征主要就是扩大了公司规模(扩大数据及,增加参数,加大词汇表,上下文大小从512提升到了1024tokens),除此之外,也对transformer进行了调整,将layernormalization放到每个sub-block之前,并在最后一个Self-attention后再增加一个layernormalization。

总的来说GPT-2跟GPT-1的区别如GPT-2的名字所示,他要让语言模型变成unsupervisedmultitasklearner,[19]给了一个很简洁的对比,我搬运过来供大家参考理解:

数据质量:GPT2更高,进行了筛选

数据广度:GPT2更广,包含网页数据和各种领域数据

数据数量:GPT2更大,WebText,800万网页

数据模型:模型更大,15亿参数

结构变化:变化不大

两阶段vs一步到位:GPT1是两阶段模型,通过语言模型预训练,然后通过Finetuning训练不同任务参数。而GPT2直接通过引入特殊字符,从而一步到位解决问题

到了GPT-3,如果去看一下论文就发现其实GPT-3更像一个厚厚的技术报告,来告诉大家GPT-3怎么做到few-shot甚至zero-shotlearning,他的内核细节这里已经没有什么要单独提及的了,他的庞大和财大气粗就是他最大的特色(整个英语维基百科(约600万个词条)仅占其训练数据的0.6%),如果有机会,还是希望大家可以自己去试一下这个模型,去体验一下GPT-3带来的魅力。

总结

读完这篇文章,估计就可以发现,所有的技术都不是凭空而来的,都是一点一点进步得来的,从源头开始,梳理一下一个模型的“集团成员”,不仅仅可以对这个领域有更深刻的理解,对于这个模型的每一块技术,都能有更加深刻的理解。

同时,在实际应用的时候,不是最新的模型就是最好的,还要考虑这个模型的大小是否合适,模型在你特定所需的任务上表现是否优秀等等等等,对整个NLP领域有更广泛的理解,你在做选择的时候就更能做出更好地选择,而不是在别人问到你为什么选择BERT的时候说一句,“哦,我只会BERT。”

参考文献

[1]Mikolov,Tomas;etal.(2013)."EfficientEstimationofWordRepresentationsinVectorSpace".arXiv((identifier)):1301.3781()[()].

[2]Mikolov,Tomas(2013)."Distributedrepresentationsofwordsandphrasesandtheircompositionality".Advancesinneuralinformationprocessingsystems.

[3],MarkNeumann,MohitIyyer,MattGardner,ChristopherClark,KentonLee,LukeZettlemoyer.(2018).Deepcontextualizedwordrepresentations.

[4]AshishVaswaniand(2017).AttentionIsAllYouNeedCoRR,abs/1706.03762.

[5](2019).Transformer-XL:AttentiveLanguageModelsBeyondaFixed-LengthContextCoRR,abs/1901.02860.

[6],,,,,,,2018.

[7]Radford,A.,Narasimhan,K.,Salimans,T.,Sutskever,I.(2018).Improvinglanguageunderstandingbygenerativepre-training.

[8]Radford,A.,Wu,J.,Child,R.,Luan,D.,Amodei,D.,Sutskever,I.(2019).,1(8),9.

[9],BenjaminMann,NickRyder,MelanieSubbiah,JaredKaplan,PrafullaDhariwal,ArvindNeelakantan,PranavShyam,GirishSastry,AmandaAskell,SandhiniAgarwal,ArielHerbert-Voss,GretchenKrueger,TomHenighan,RewonChild,AdityaRamesh,,JeffreyWu,ClemensWinter,ChristopherHesse,MarkChen,EricSigler,MateuszLitwin,ScottGray,BenjaminChess,JackClark,ChristopherBerner,SamMcCandlish,AlecRadford,IlyaSutskever,DarioAmodei.(2020).LanguageModelsareFew-ShotLearners.

[10]JacobDevlinandMing-WeiChangandKentonLeeandKristinaToutanova(2018).BERT:Pre-trainingofDeepBidirectionalTransformersforLanguageUnderstandingCoRR,abs/1810.04805.

[11](2019).XLNet:GeneralizedAutoregressivePretrainingforLanguageUnderstandingCoRR,abs/1906.08237.

[12]attention机制及self-attention(transformer).Accessedat:

[13]Attention机制详解(一)——Seq2Seq中的:

[14]一文看懂Attention(本质原理+3大优点+5大类型.Accessedat:

[15]TheIllustratedBERT,ELMo,andco.(HowNLPCrackedTransferLearning).Accessedat:

[16]Yang,Zhilin,etal."Xlnet:Generalizedautoregressivepretrainingforlanguageunderstanding."

[17]Dai,Zihang,etal."Transformer-xl:Attentivelanguagemodelsbeyondafixed-lengthcontext."arXivpreprintarXiv:1901.02860(2019).

[18]NLP——GPT对比:

[19]深度学习:前沿技术-:

分析师介绍:

本文作者为王子嘉,目前在帝国理工学院人工智能硕士在读。主要研究方向为NLP的推荐等,喜欢前沿技术,热爱稀奇古怪的想法,是立志做一个不走寻常路的研究者的男人!

关于机器之心全球分析师网络SyncedGlobalAnalystNetwork

机器之心全球分析师网络是由机器之心发起的全球性人工智能专业知识共享网络。在过去的四年里,已有数百名来自全球各地的AI领域专业学生学者、工程专家、业务专家,利用自己的学业工作之余的闲暇时间,通过线上分享、专栏解读、知识库构建、报告发布、评测及项目咨询等形式与全球AI社区共享自己的研究思路、工程经验及行业洞察等专业知识,并从中获得了自身的能力成长、经验积累及职业发展。

免责声明:本文章如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系