本文是机器之心:完全图解GPT-2:看完这篇就够了(二)的梳理总结。第三部分:GPT-2全流程是本文的核心重点。
1. 自注意力机制(不使用掩模)
2. 图解掩模自注意力机制:使用注意力掩模矩阵
我们通常使用注意力掩模矩阵来实现这种屏蔽操作。不妨想象一个由四个单词组成的序列(例如「robot must obey orders」(机器人必须服从命令))在语言建模场景中,这个序列被分成四步进行处理——每个单词一步(假设现在每个单词(word)都是一个词(token))。由于这些模型都是批量执行的,我们假设这个小型模型的批处理大小为 4,它将整个序列(包含 4 步)作为一个批处理。
注:在训练过程中,模型会在更长的文本序列上进行训练,并且一次处理多个词(token)。训练过程的批处理大小(batch size)较大(512 or 文本序列长度),而评价时的批处理大小只有 1。
为每一个query都重新生成前文所有token的key和value向量。
此Scores分数表的含义如下:
当模型处理数据集中的第一个示例(第一行)时,这里只包含了一个单词(「robot」),所以 100% 的注意力都在该单词上。
当模型处理数据集中的第二个示例(第二行)时,这里包含了(「robot must」),当它处理单词「must」时,48% 的注意力会在「robot」上,而另外 52% 的注意力会在「must」上。
3. GPT-2 的掩模自注意力机制
3.1. 模型评价时:一次只处理一个词
GPT-2 在「推断/评价」(inference / evaluation)模式下一次只处理一个单词。我们可以通过掩模自注意机制的方式执行 GPT-2。在模型评价时,当我们的模型每轮迭代后只增加一个新单词时,沿着先前已经处理过的路径再重新计算词(token)的自注意力是效率极低的。(不像在训练阶段,可以批量处理,所以第一个example里[robot]和第二个example里[robot]的key,value向量是不同的)
比较训练阶段和推断/评价阶段:
训练阶段:
为每一个query都重新生成前文所有token的key和value向量。
「推断/评价」(inference / evaluation)阶段:
左边的向量是query,中间和右边的分别是key和value。key和value向量会被保存,之后的单词会计算前文的attention score所以会一直被复用,不会再被重新计算。
3.2. GPT-2 自注意力机制全过程
3.2.1. input = word embedding + positional embedding
假设模型正在处理单词「it」。对于下图中底部的模块来说,它对该词的输入则是「it」的嵌入向量+序列中第九个位置的位置编码:
3.2.2. self-attention层:
(1) create query,key,value vectors of 当前计算的词
自注意力机制将它的输入与权重矩阵相乘(并加上一个偏置向量,这里不作图示)。
(1.5) 分裂成注意力头(多头self-attention)
自注意力机制是在查询(Q)、键(K)、值(V)向量的不同部分多次进行的。「分裂」注意力头指的是,简单地将长向量重塑成矩阵形式。
在小型的 GPT-2 中,有 12 个注意力头,因此这是重塑矩阵中的第一维(行):
(2)计算注意力得分
图解一个注意力头score计算过程(其它注意力头都进行类似的操作,把结果concat起来):
将当前的query和存储的前文所有单词的key点乘后softmax,得到当前单词的attention score.
(3) 求和
将每个值向量乘上它的注意力得分,然后求和,得到的是第一个注意力头的自注意力结果:
(3.5) 合并多个注意力头的求和结果
先将它们连接成一个向量:
但是这个向量还不能被传递到下一个子层。我们需要将这个隐含状态的混合向量(concatenated hidden states)转变成同质的表示形式。
(4) 投影
我们将让模型学习如何最好地将连接好的自注意力结果(concatenated hidden states) 映射到一个前馈神经网络可以处理的向量。下面是我们的第二个大型权重矩阵,它将注意力头的结果投影到自注意力子层的输出向量中:
3.2.3. 全连神经网络 FNN
(1) 第一层
第一层的大小是模型的 4 倍(因为小型 GPT-2 的大小为 768 个单元,而这个网络将有 768*4=3072 个单元)。为什么是 4 倍呢?这只是原始 transformer 的运行大小(模型维度为 512 而模型的第一层为 2048)。这似乎给 transformer 模型足够的表征容量来处理目前面对的任务。
(2) 第二层 - 投影到模型的维度
第二层将第一层的结果投影回模型的维度大小(小型 GPT-2 的大小为 768)。这个乘法结果是该词经过 transformer 模块处理的结果。
你成功处理完单词「it」了!
3.2.4. 总结GPT-2所有权重矩阵,统计参数量
Transformer 中的每个模块都有自己的权重矩阵(parameters)
embedding层:
权重矩阵 1:token embedding matrix(wte)
权重矩阵 2:positional embedding matrix (wpe)
self-attention层:
权重矩阵 1:用于创建查询、键和值的权重矩阵
权重矩阵 2:将注意力头的结果投影到自注意力子层(self-attention layer)的输出向量中
fully-connected feed forward neural network层:
权重矩阵 1:layer 1
权重矩阵 2:layer 2
每个decoder模块有一个self-attention和一个FNN层。若有12个模块,那么有12个self-attention和12个FNN层。这个模型只有一个词嵌入矩阵和一个位置编码矩阵。
4. 应用
机器翻译
进行翻译时,模型不需要编码器。同样的任务可以通过一个只有解码器的 transformer 来解决:
自动摘要生成
这是第一个训练只包含解码器的 transformer 的任务。也就是说,该模型被训练来阅读维基百科的文章(没有目录前的开头部分),然后生成摘要。文章实际的开头部分被用作训练数据集的标签:
Reference:
机器之心:https://zhuanlan.zhihu.com/p/343925685