持续创作,加速成长!这是我参加「日新计划 10 月更文挑战」的第3天,点击检查活动详情

这是我翻译这位大佬的第二篇文章了。这篇文章是遭到大佬认证的了。他的原文中有翻译链接,直接指向我。

【翻译】图解GPT-2

作者博客:@Jay Alammar

原文链接:The Illustrated GPT-2 (Visualizing Transformer Language Models) – Jay Alammar – Visualizing machine learning one concept at a time. (jalammar.github.io)


翻译正文

【翻译】图解GPT-2

本年,咱们看到了机器学习令人眼花缭乱的一些运用。OpenAI的GPT-2展示出了惊人的写作能力,其生成内容的连贯且富有感情,超出了咱们对目前言语模型的预期。GPT-2其实并不是一种新型架构,他的结构类似于只要解码器的Transformer。GPT-2是一个依据Transformer的巨大的言语模型,并在庞大的数据集进步行了练习。在这篇文章中,咱们将看一下是什么结构能让它具有如此功能;咱们将深化解析它的自留意力层;终究咱们会看一下言语模型之外的仅有解码器的Transformer的运用。

这篇文章也是想弥补我之前的博客《图解Transformer》,在这我会用更多的图片来解说Transformer的内部原理,以及它们是怎么从原始的Transformer演变过来的。随着Transformer衍生出来的新模型的内部结构不断发展,我期望这系列的图解文章能帮助咱们更容易了解这些模型。

1 GPT-2和言语模型

什么是言语模型?

1.1 言语模型

在之前的图解Word2Vec中咱们看了什么是言语模型,其实便是一个能依据一部分语句内容猜测下一个单词的机器学习模型。最常见的的言语模型大概便是手机输入法,它能依据你当时输入的内容提示下一个字或许词。

【翻译】图解GPT-2

从这个视点说,咱们能够称GPT-2是一个类似于输入法的猜测下一个单词的模型,可是它比输入法更大更智能。GPT-2是在一个叫WebText的40GB的巨大数据集上练习的,这个数据集是OpenAI的作业者从网上搜集的。从存储空间来看,咱们的输入法只需要几十MB的空间,可是GPT-2最小的模型就需要500MB来存储它的参数,而最大的GPT-2模型是它的13倍,需要6.5GB的存储空间来存储其参数。

【翻译】图解GPT-2

你能够通过AllenAI GPT-2 Explorer体会一下GPT-2,它是运用GPT-2猜测下一个词,会显示十种或许猜测(以及它们的概率分数),你能够挑选一个词,然后看它下一个猜测列表。

1.2 Transformer的言语模型

声明:关于一些用词。

英文:Transformer =encoder +decoder

中文:Transformer=编码器+解码器 | Transformer =encoder模块+decoder模块

encoder has 6 encoder block

encoder模块有6个encoder组件

在咱们之前图解Transformer中现已看到,一个Transformer是一个encoder-decoder构架组成的,编码器和解码器都是由数个Transformer组件堆叠成的。这个结构是很合理的,因为编码器-解码器构架成功解决了机器翻译中的问题。

【翻译】图解GPT-2

在随后的很多研讨作业中,该体系结构扔掉了编码器或着解码器,只运用另一部分Transformer组件。将尽或许多的组件堆叠起来,投入很多核算机资源,用很多文本进行练习(比方一些言语模型需要小几十万美元,AlphaStar或许需要数百万美元)。

【翻译】图解GPT-2

咱们能把这些Transformer组件堆多高?GPT-2不同模型大小的差异就在于组件数目的不同:

【翻译】图解GPT-2

1.3 和BERT的不同

GPT-2是用Transformer的decoder组件,BERT是用Transformer的encoder组件。咱们将在后边的章节持续探讨二者的差异。 可是两个模型一个要害的差异在于,GPT-2和传统的言语模型相同,一次只输出一个token。例如咱们让一个练习好的GPT-2输出机器人榜首规律。

First Law of Robotics

A robot may not injure a human being or, through inaction, allow a human being to come to harm.

【翻译】图解GPT-2

这些模型实践作业的办法:在生成每个token之后,这个token会被添加到输入序列中组成新序列,新序列作为模型下一步的输入。这办法被称为“主动回归”(auto-regression)。这便是RNNs模型的一个机制。

【翻译】图解GPT-2

GPT2以及TransformerXL和XLNet等后来的模型本质上看都是自回归模型。当然BERT不是。这是有价值的,不运用主动回归,可是BERT获得了整合上下文的能力,然后获得了更好的成果。XLNet又回到了自回归,可是一起找到了另一种办法来整合双方的上下文。

1.4 Transformer 组件的演变

Transformer论文原文介绍了两种类型的transformer组件:

1.4.1 encoder组件

首先是编码器组件:

【翻译】图解GPT-2

原文中的编码器块能够接纳最大长度为512的序列作为输入。
假如一个输入序列达不到512也没关系,咱们能够把序列的其余部分填充起来。

1.4.2 decoder组件

然后是decoder组件,decoder组件和encoder组件略微有点不相同,差异是它中心加了一层能够让它重视到encoder的内容。

【翻译】图解GPT-2

当然这儿的自留意力层也有一个要害差异,便是他会把之后的内容mask掉。 不是和BERT那样把词替换为[mask],而是在自留意力核算进程中通过一些办法不让自留意力核算当时方位右侧的内容。

例如,假如咱们现在核算第四个单词,他的留意力只能重视到前四个词。

【翻译】图解GPT-2

再重复一遍,BERT的自留意力和GPT-2的屏蔽式自留意力之间是有明显的差异的。一个正常的自留意核算在核算某方位的时分允许模型重视其右边的信息,屏蔽式自留意则不能重视到右侧信息:

【翻译】图解GPT-2

1.4.3 只要decoder组件的decoder模块

在Transformer论文之后,Generating Wikipedia by Summarizing Long Sequences 提出了transformer组件的另一种打开办法,也能够进行言语建模。这个模型丢掉了Transformer的编码器,因而咱们称之为“Transformer-解码器”。这个前期的依据transformer的言语模型由六个transformer的decoder组件组成:

【翻译】图解GPT-2

decoder组件都是相同的。我展开了榜首个,所以你能够看到它的自留意力层是带mask的自留意。留意,该模型现在能够承受的输入序列长度为4000,这是比照原始transformer输入长度512的一个大规模晋级。

这些decoder组件和原始的transformer的decoder组件非常相似,可是他们去掉了第二个自留意力层。 Character-Level Language Modeling with Deeper Self-Attention这篇文章也研讨了一个类似结构,创立一个言语模型每次猜测一个字或词。

OpenAI的GPT-2便是这种仅运用解码器组件的模型。

1.5 GPT-2内部结构

Look inside and you will see, The words are cutting deep inside my brain. Thunder burning, quickly burning, Knife of words is driving me insane, insane yeah. ——Budgie

上边这句话,据我调查便是作者引用他人一句话,皮了一下。

让咱们把一个练习好的GPT-2丢到手术台上,拆解看一下它是怎么运作的。

【翻译】图解GPT-2

GPT-2能够处理1024长度的tokens,每个token沿着自己的途径流经一切decoder组件。 运转一个现已练习好的的GPT-2,最简略的办法是让它自己运转,或许称之为无条件生样本。咱们也能够给它一个提示(prompt),让它围绕一个特定的主题生成,或称之为交互式条件样本生成。 在无限制的情况下,咱们只需要给他一个开端符号,就能够让他开端生成词语(练习好的模型运用<|endoftext|>作为开端符号,之后咱们用<s>来代替)。

【翻译】图解GPT-2

该模型只要一个输入符号,所以该途径将是仅有的活动途径。这个token在一切层中被连续处理,然后会发生一个向量。这个向量能够依据模型的词汇表进行评分,词汇表便是模型知道的一切单词,GPT-2的词汇表是5万词。在这个比方中,咱们挑选了概率最高的token:”the”。

咱们也能够从中调节:你想一下,假如你在输入法里不断点击提示单词,它有时会陷入重复,便是一直都显示相同的文字,仅有的解决办法是你点击第二个或第三个建议的单词。相同的情况也会发生在GPT-2里。

【翻译】图解GPT-2

GPT-2有一个叫做top-k的参数,咱们能够借助它,让模型采样除了最高概率单词以外的单词(top-k=1时便是上边说的情况)。

Top—k便是进行束查找,设置束查找的宽度k,当k=1的时分又退化成贪心算法,每次采样概率最高的那个单词。

在下一步,咱们将榜首步的输出添加到咱们的输入序列中,并让模型进行下一次猜测。

【翻译】图解GPT-2

留意,现在第二条途径是核算中仅有活动的途径。GPT-2的每一层都保留了自己对榜首个token的解说,并在处理第二个token时运用自己存储的解说(咱们将在后边自留意部分对此进行具体介绍)。GPT-2不会依据第二个token内容对榜首个token重新编码。

1.6 更深化了解内部结构

1.6.1 输入编码

看一下更多的细节加深对模型的了解。先从输入开端看。跟咱们之前说到的其他模型相同,模型会先从embedding矩阵中查找输入单词的embedding向量,embedding矩阵能够看做是预练习模型的一部分。

【翻译】图解GPT-2

每一行都是一个单词的embedding向量:用一组数字表明一个词语,这组数字是捕获词语的一些含义信息。向量长度在不同大小的GPT-2中是不相同的。最小的GPT-2模型(GPT-2 small)中每个token的embedding向量长度为每768。

因而最开端咱们需要到embedding矩阵中找到开端token <s> 。在把它丢给模型榜首个块之前,咱们需要给它加上方位编码,方位编码作用是给transformer组件指示该单词在输入序列中的方位。

方位编码矩阵也是GPT-2模型的一部分,它包括输入中1024个方位的每个方位编码向量。

GPT—2可承受的最大的输入长度为1024,。Transformer承受的输入序列的最大长度是512.

【翻译】图解GPT-2

至此,咱们现已介绍了在将输入词交给榜首个transformer组件之前怎么处理这个单词。咱们还知道练习好的GPT-2中的两个权重矩阵。

意思便是一个练习好的GPT—2模型是有embedding矩阵和方位编码矩阵的。之后用这个练习好的模型的时分直接从里边找到对应单词的表明加吧起来用就行了。

【翻译】图解GPT-2

把一个单词丢进transformer组件之前要做的事:先找到该单词的embedding,再把它和对应的方位编码相结合。

便是输入序列进入榜首个transformer之前要通过两部分将其转化为对应的单词表明向量:单词的词嵌入向量+单词方位编码

1.6.2 堆栈之旅

说完了输入序列怎样进入榜首个transformer块,接下来就要说这些排排坐的transformer的decoder块怎样连续处理输入序列了。

先看最底下榜首个decoder组件,要处理的token先通过自留意力层的处理,再通过神经网络层的处理,处理完之后把它成果丢给下一个decoder组件。每个组件的处理流程都是相同的,可是每个组件的自留意力层和神经网络层都有自己的权重。

【翻译】图解GPT-2

1.6.3 回顾自留意力

言语很大程度上依赖于语境。例如,看看机器人第二规律:

Second Law of Robotics

A robot must obey the orders given it by human beings except where such orders would conflict with the First Law.*

我在语句中标出了三个当地,这些当地的单词是指代其他单词的。假如不结合它们所指的上下文,就没有办法了解或处理这些单词。当一个模型处理这个语句时,它有必要能够知道:

  • it 指的是 robot
  • such orders前半部分的 the orders given it by human beings
  • First Law 指的是机器人榜首规律

这便是自留意力要做的。在处理某个单词之前,它会先让模型了解相关单词,这些相关单词能够解说某个单词的上下文。留意力要做的便是给每个词进行相关度打分,并将它们的向量表明相加来。

举个栗子,处理“it”的时分,留意力机制会重视到“a robot”,留意力会核算三个词“it”、“a”、“robot”的向量及其attention分数的加权和。

【翻译】图解GPT-2

【翻译】图解GPT-2

1.6.4 自留意力处理进程

自留意力处理进程是沿着序列的每个token的途径处理的, 主要组成部分是下边三个向量:

  • Query: query是当时单词的表明方式,用于对一切其他单词(key)进行评分,咱们只需要重视当时正在处理的token的query。
  • Key: Key能够看做是序列中一切单词的标签,是在咱们找相关单词时分的对照物。
  • Value: Value是单词的实践表明,一旦咱们对每个单词的相关度打分之后,咱们就要对value进行相加表明当时正在处理的单词的value。

【翻译】图解GPT-2

一个简略的比喻是,就像在文件柜里找文件相同。query就像一张你拿着一张便签,上面写着要找的主题。key就像柜子里文件夹的标签,当你找到与便当贴上相关的标签的时分,咱们取出该文件夹,文件夹中的内容便是value向量。当然你要找的不是一个文件,是一组相关文件。

将query向量乘以key向量生成文件夹的相关度分数(实现上便是两个向量点积之后softmax)

【翻译】图解GPT-2

咱们把每一个key乘以一组value,然后相加,这就发生了咱们自留意力的成果。

【翻译】图解GPT-2

向量加权换和核算在上图的比方中便是将50%留意力放在“robot”这个词上,将30%留意力放在“a”这个词上,将19%的留意力放在“it”这个词上。 假如你想具体了解,第二部分咱们会更深化探讨自留意力机制,在这咱们就简略说一下这一部分,持续往下看模型输出是怎样的。

1.6.5 模型输出

当模型终究一个decoder组件发生输出向量的时分,会把这个向量和embedding矩阵做乘法。

【翻译】图解GPT-2

回想一下,embedding矩阵中的每一行对应词汇表中的一个单词。因而这个乘法的核算成果咱们能够认为是当时单词成果对整个词汇表的打分。

类比—下attention核算,query和key点乘成果是留意力分数,在这儿输出和embedding矩阵相乘能够认为是输出对embedding矩阵打分。

【翻译】图解GPT-2

咱们能够从中选出分数最高的那个词(top_k=1)。可是模型考虑其他词汇或许会获得更好的成果。因而一个更好的战略是运用这个分数进行随机采样,从中抽一个词出来,这样分数高的词汇被选中的概率也高。还有一种更一般的办法是将tok_k设置为40,从中选取40个得分最高的词汇。

可是模型考虑其他词汇或许会获得更好的成果:这个不了解回去看束查找和贪心战略的比照。

更好的战略是运用这个分数进行随机采样:我个人了解是,采用加权采样的办法,得分高的更容易被抽到,可是仍是有随机性的,因而能够认为是从tok_k中抽一个词,这种办法保证功能的一起减小核算开销。想一下,运用贪心战略纷歧定能得到最好的成果,运用束查找设置为40又要耗费一定的空间和核算资源。因而加权随机采样确实是能够看做更好的办法。

【翻译】图解GPT-2

这样,模型就完成了一次迭代,终究输出了一个单词。该模型持续迭代,直到生成整个上下文(GPT-2序列上限1024个token)或直到生成序列结束的token<e>

1.7 GPT-2小结

现在咱们知道了GPT-2是怎么作业的了。假如你想持续了解自留意力层是怎么运作的,接下来的额定部分便是为你预备的。我弥补这部分内容是为了更具体地图解自留意力机制,以便引进更多依据Transformer的模型(比方TransformerXL、XLNet等)。

别的要指出在这篇文章中一些过分简化的内容:

  • 原文中没有清晰区别“words”和“tokens” 的概念。可是实践上GPT-2 运用 Byte Pair Encoding创立单词表的tokens。这意味着GPT-2中token是word的一部分。

  • 本文用的示例都是GPT的推理、评价模式,这便是为什么一次只处理一个单词。在练习的时分GPT-2是能够对长文本序列进行并行处理的。相同在练习时分,不同于评价时分batch为1,GPT-2能够处理的batch大小为512。

  • 为了更好组织文章图像的空间,我对一些向量进行了转置。但在模型履行的时分有必要更精确。

  • Transformers 运用很多的层归一化(layer normalization)咱们在【翻译】图解transformer – ()中提到过,但在这篇文章中咱们主要是讲自留意力。

  • 有时分我需要用更多的块块表明一个向量,我是这样画的。

【翻译】图解GPT-2

针对倒数第二条:并不是layer normalization不重要,这篇文章作者主要是想讲自留意力的运用,就将其他相对来说“细枝末节”的部分省略了。

针对终究一条:作者画几个格子不重要,重要的是数字表明。

2 图解自留意力机制

因为文章篇幅较长,所以我把自留意力机制单独摘出去了。有需要的点击链接检查第二部分的《图解自留意力机制》

图解GPT – 2:

图解自留意力机制:

【翻译】图解GPT-2

3 Beyond Language Modeling

只要decoder的transformer不断显示出逾越言语模型(LM)的前景。它在许多运用场景中都获得了很好的作用,也能够简略图解一下。接下来咱们就介绍几个运用场景来结束咱们这篇文章。

3.1 机器翻译 machine translation

翻译使命不需要编码器,只用解码器就能够进行翻译了。

【翻译】图解GPT-2

3.2 摘要 Summarization

这是只要编码器的transformer练习的榜首个使命,练习它阅览维基百科的文章(不包括目录前边的最初部分),前边的最初部分作为练习数据的标签。

看下图,维基百科构成是“摘要(紫色区域)—目录—正文(绿色区域)”,在这儿便是用正文做练习文本,用摘要做标签。

【翻译】图解GPT-2

GPT-2便是运用wikipedia的文章进行练习的,因而练习好的模型能够直接拿来做摘要。

【翻译】图解GPT-2

3.3 搬迁学习 Transfer Learning

在《Sample Efficient Text Summarization Using a Single Pre-Trained Transformer》,只要解码器的transformer结构首先在言语模型进步行预练习,然后微调做摘要使命,成果证明,在有限的数据设置中,它比预先练习的编码器-解码器变压器获得更好的成果。

GPT-2的论文原文也展示了在言语建模上对模型进行预练习后做摘要使命的成果。

3.4 音乐生成 Music Generation

音乐Transformer运用的是只要解码器的Transformer结构来生成具有表现力的音乐。“音乐建模”就像言语建模相同,让模型以一种无监督的办法学习音乐,然后让它对输出进行采样(咱们之前称之为“rambling”)。

你或许会好奇音乐是怎么表明的。言语建模能够通过字(characters)、词(words)或token作为某个单词(word)的表明,并将其转化为向量表明。在音乐演奏中(比方钢琴),咱们除了要表明音符,还要表明速度——衡量钢琴键按得有多用力。

【翻译】图解GPT-2

一个表演只是一组one-hot向量罢了。一个mini文件能够转化为下图的格局。

论文中输入序列的示例如下图:

【翻译】图解GPT-2

这个输入序列的 one-hot 向量表明如下:

【翻译】图解GPT-2

我很喜欢这篇论文中的音乐transformer的自留意力图像。在这儿我添加了一些注释:

【翻译】图解GPT-2

这个音乐中有明显的三角形循环。query在终究一个三角形的峰值上,它会留意到之前一切的三角形的高音峰值(包括乐曲最开端的峰值)。图中的线表明query都重视到了哪些方位,荧光绿色的条条代表的是attention分数,绿条条越长代表在这个方位投入的留意力越多。

假如你不懂图中黑色条条块块的音符表明办法能够看一下这个视频:d小调托卡塔与赋格

4 总结

GPT-2到这儿就介绍完了。本文对GPT-2以及它的父模型(只要解码器的Transformer结构)的探索。我期望你在读完这篇文章后,对自重视力机制有了更深化的了解,而且对Transformer的呢哦不作业机制有了更多的了解。

5 其他资源

  • OpenAI 实现的 GPT-2

  • 还能够看一下的 pytorch-transformers ,这儿还有一些其他依据Transformer的预练习模型的。