当下最流行的 ChatGPT :前世今生

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

现在很多人把 2018 年BERT 提出作为 NLP 元年类似于当时 ImageNet 的提出其趋势与当年的图像领域也极其类似——模型越来越大。2018 年的 BERT-large最大的 BERT 模型的参数量是 340M而到了 2020 年的 GPT-3这个数字已经翻了无数倍了。很多人第一次了解到 GPT 大概是 2018 年那个时候 GPT 还是个配角被其兄弟 BERT 拉出来示众当时的主角是 BERTBERT 的成功让当时论文中作为前身的 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 的这个样子。

图 2GPT 族谱。

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

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

Word Embedding [1,2]

Word Embedding词嵌入作为这个庞大家族集团的创始人为整个 “集团” 的蓬勃发展奠定了坚实的基础。到目前为止词嵌入一直是 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-decoder2018 年 1 月同样还没有火起来所以他还没有用 Transformer也因此被 BERT 在最开始的论文里拉出来作对比但是他注意到了词向量不能是不变的比如一开始学习词嵌入的时候是用下面这两句话

  • “哦你买了我最爱的披萨我爱死你了”
  • “啊我可真爱死你了你把我最爱的披萨给蹭到地上了”

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

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

因此 ELMo 又提出要在看完整个句子的前提下再给定这个词的嵌入。也就是说词嵌入的来源不再是过去的查表了而是通过预训练好的模型来获得是不是很像图像领域的 transfer learning?。看一下原论文中对 ELMo 的定义

Our word vectors are learned functions of the internal states of a deep bidirectional language model (biLM), which is pretrained on a large text corpus.

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

【旁支】Attention

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

An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key.

——Attention is all you need

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

RNN & LSTM

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

图 4RNN 原始方案 图源[12]

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

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

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

图 6Attention 计算过程 图源[4]

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

回顾了 Attention 的计算过程后图 5 所示的方案就好理解多了它还是一个 encoder-decoder 结构上半部分是 decoder下半部分是 encoder双向 RNN。开始的流程跟原始版本的 RNN 一样首先 Encoder 获得了输入序列 X 的 hidden state (h)然后 docoder 就可以开始工作了。从这里开始docoder 的工作因为 Attention 的加入开始发生了变化在生成 s_t 和 y_t 时decoder 要先利用 s_{t-1}和各个 hidden state 的联系度利用加权点乘等方式获得来获得 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其中 input gate 选择哪些当前信息进行输入forget gate 选择遗忘哪些过去信息。LSTM 号称可以解决长期依赖问题但是实际上 LSTM 还是需要一步一步去捕捉序列信息在长文本上的表现是会随着 step 增加而慢慢衰减难以保留全部的有用信息。

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

自立门户 —— Self-attention

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

然后Transformer 公司应运而生了

【中兴之祖】TransformerAttention 就够了

承前启后 —— self-attention

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

  • The encoder contains self-attention layers. In a self-attention layer, all of the keys, values and queries come from the same place, in this case, the output of the previous layer in the encoder. Each position in the encoder can attend to all positions in the previous layer of the encoder.
  • Similarly, self-attention layers in the decoder allow each position in the decoder to attend to all positions in the decoder up to and including that position. We need to prevent leftward information flow in the decoder to preserve the auto-regressive property. We implement this inside of scaled dot-product attention by masking out (setting to −∞) all values in the input of the softmax which correspond to illegal connections.
  • In "encoder-decoder attention" layers, the queries come from the previous decoder layer, and the memory keys and values come from the output of the encoder. This allows every position in the decoder to attend over all positions in the input sequence.

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

还是用机器翻译做例子假设要从英语 (knowledge is powerful) 翻译成中文知识就是力量在前文中没有 self-attention 的方案中Knowledge is powerful 首先被转化为 hidden state这些 hidden state 作为 key 和 valuequery 则来源于 decoder 中的 s。加入了 self-attention 后hidden state 就不需要学了query 直接来源于 Knowledge is powerful最终 self-attention 得到的东西其实可以类比于图 5 方案中 RNN 中的 hidden state也就是说 self-attention 仅仅使用 attention 完成了 RNN 的做的事情。

图 7self-attention 可视化图源http://jalammar.github.io/illustrated-transformer/

图 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 所示

图 8self-attention 原始矩阵图源http://jalammar.github.io/illustrated-transformer/

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

图 9self-attention 计算流程图源http://jalammar.github.io/illustrated-transformer/

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

图 10self-attention 矩阵细节图源http://jalammar.github.io/

绝不微不足道的区别

前面介绍了那么多甚至贴上了论文的原文一个很重要的目的是为了强调 self-attention 层在 encoder 和 decoder 中是不一样的encoder 在做 self-attention 的时候可以“attend to all positions”而 decoder 只能“attend to all positions in the decoder up to and including that position”划重点涉及到 BERT 和 GPT 的一个重要区别。简单来说就是 decoder 跟过去的 Language model 一样只能看到前面的信息但是 encoder 可以看到完整的信息双向信息。具体细节在介绍到 BERT 和 GPT 的时候会详细介绍。

【后浪时代】BERT & GPT & 其他

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

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

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

翻译成中文就是“我们的模型在裁员encoder后看的更远了也能 pretrain 了还是儿时的味道Language Modelling”

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

图 11Transformer 的 encoder-decoder 结构细节图源http://jalammar.github.io/

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

图 12transformer decoder 细节图源: [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 的成功中看到了机会并且挖掘出了更本质的商机——用预训练好的模型做下游任务。基于这个想法他然后打出了自己的招牌

We demonstrate that large gains on these tasks (downstream tasks) can be realized by generative pre-training of a language model on a diverse corpus of unlabeled text, followed by discriminative fine-tuning on each specific task.

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

we make use of task-aware input transformations during fine-tuning to achieve effective transfer while requiring minimal changes to the model architecture.

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

图 13如何使用 GPTOpenAI Transformer进行 Finetune图源http://jalammar.github.io/

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

图 14如何进行 Finetune图源http://jalammar.github.io/

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

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

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

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

图 15BERT 业务图源[10]

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

这是 XLNetAR的

这是 BERTAE的

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

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

【外传】Transformer 的私生子们

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

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

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

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

【现代】GPT2 & 3 —— 大即正义 (Bigger than bigger)

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

图 17新时代图源http://jalammar.github.io/

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

  • Language models are unsupervised multitask learners. (GPT-2)
  • Language Models are Few-Shot Learners. (GPT-3)

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

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

  • 数据质量GPT 2 更高进行了筛选
  • 数据广度GPT 2 更广 包含网页数据和各种领域数据
  • 数据数量GPT 2 更大WebText800 万网页
  • 数据模型模型更大15 亿参数
  • 结构变化变化不大
  • 两阶段 vs 一步到位GPT 1 是两阶段模型通过语言模型预训练然后通过 Finetuning 训练不同任务参数。而 GPT 2 直接通过引入特殊字符从而一步到位解决问题

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

总结

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

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

参考文献

[1] Mikolov, Tomas; et al. (2013). "Efficient Estimation of Word Representations in Vector Space". arXiv (https://en.wikipedia.org/wiki/ArXiv_(identifier)):1301.3781 (https://arxiv.org/abs/1301.3781) [cs.CL (https://arxiv.org/archive/cs.CL)].

[2]Mikolov, Tomas (2013). "Distributed representations of words and phrases and their compositionality". Advances in neural information processing systems.

[3] Matthew E. Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, & Luke Zettlemoyer. (2018). Deep contextualized word representations.

[4] Ashish Vaswani and Noam Shazeer and Niki Parmar and Jakob Uszkoreit and Llion Jones and Aidan N. Gomez and Lukasz Kaiser and Illia Polosukhin (2017). Attention Is All You NeedCoRR, abs/1706.03762.

[5] Zihang Dai and Zhilin Yang and Yiming Yang and Jaime G. Carbonell and Quoc V. Le and Ruslan Salakhutdinov (2019). Transformer-XL: Attentive Language Models Beyond a Fixed-Length ContextCoRR, abs/1901.02860.

[6] P. J. Liu, M. Saleh, E. Pot, B. Goodrich, R. Sepassi, L. Kaiser, and N. Shazeer. Generating wikipedia by summarizing long sequences. ICLR, 2018.

[7] Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training.

[8] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D., & Sutskever, I. (2019). Language models are unsupervised multitask learners. OpenAI Blog, 1(8), 9.

[9] Tom B. Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, Sandhini Agarwal, Ariel Herbert-Voss, Gretchen Krueger, Tom Henighan, Rewon Child, Aditya Ramesh, Daniel M. Ziegler, Jeffrey Wu, Clemens Winter, Christopher Hesse, Mark Chen, Eric Sigler, Mateusz Litwin, Scott Gray, Benjamin Chess, Jack Clark, Christopher Berner, Sam McCandlish, Alec Radford, Ilya Sutskever, & Dario Amodei. (2020). Language Models are Few-Shot Learners.

[10]Jacob Devlin and Ming-Wei Chang and Kenton Lee and Kristina Toutanova (2018). BERT: Pre-training of Deep Bidirectional Transformers for Language UnderstandingCoRR, abs/1810.04805.

[11]Zhilin Yang and Zihang Dai and Yiming Yang and Jaime G. Carbonell and Ruslan Salakhutdinov and Quoc V. Le (2019). XLNet: Generalized Autoregressive Pretraining for Language UnderstandingCoRR, abs/1906.08237.

[12] attention 机制及 self-attention(transformer). Accessed at: https://blog.csdn.net/Enjoy_endless/article/details/88679989

[13] Attention 机制详解一——Seq2Seq 中的 Attention. Accessed at: https://zhuanlan.zhihu.com/p/47063917

[14]一文看懂 Attention本质原理 + 3 大优点 + 5 大类型. Accessed at:https://medium.com/@pkqiang49/%E4%B8%80%E6%96%87%E7%9C%8B%E6%87%82-attention-%E6%9C%AC%E8%B4%A8%E5%8E%9F%E7%90%86-3%E5%A4%A7%E4%BC%98%E7%82%B9-5%E5%A4%A7%E7%B1%BB%E5%9E%8B-e4fbe4b6d030

[15]The Illustrated BERT, ELMo, and co. (How NLP Cracked Transfer Learning). Accessed at:http://jalammar.github.io/illustrated-bert/

[16] Yang, Zhilin, et al. "Xlnet: Generalized autoregressive pretraining for language understanding." Advances in neural information processing systems. 2019.

[17] Dai, Zihang, et al. "Transformer-xl: Attentive language models beyond a fixed-length context." arXiv preprint arXiv:1901.02860 (2019).

[18] NLP——GPT 对比 GPT-2. Accessed at: https://zhuanlan.zhihu.com/p/96791725

[19] 深度学习前沿技术 - GPT 1 & 2. Accessed at: http://www.bdpt.net/cn/2019/10/08/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%EF%BC%9A%E5%89%8D%E6%B2%BF%E6%8A%80%E6%9C%AF-gpt-1-2/

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: ChatGPT