完全图解GPT-2:看完这篇就够了(⼆)
(给机器学习算法与Python学习加星标,提升AI技能)
选⾃github.io
作者:Jay Alammar
本⽂授权转⾃“机器之⼼”(almosthuman2014)
在本系列⽂章的中,我们回顾了 Transformer 的基本⼯作原理,初步了解了 GPT-2 的内部结构。在本⽂中,我们将详细介绍 GPT-2 所使⽤的⾃注意机制,并分享只包含解码器的 transformer 模型的精彩应⽤。
最好看的电影排行榜第⼆部分:图解⾃注意⼒机制
在前⾯的⽂章中,我们⽤这张图来展⽰了⾃注意⼒机制在处理单词「it」的层中的应⽤:
在本节中,我们会详细介绍该过程是如何实现的。请注意,我们将会以试图弄清单个单词被如何处理的⾓度来看待这个问题。这也是我们会展⽰许多单个向量的原因。这实际上是通过将巨型矩阵相乘来实现的。但是我想直观地看看,在单词层⾯上发⽣了什么。
⾃注意⼒机制(不使⽤掩模)
⾸先,我们将介绍原始的⾃注意⼒机制,它是在编码器模块⾥计算的。先看⼀个简易的 transformer 模块,它⼀次只能处理 4 个词(token)。
李小璐和贾乃亮谁大⾃注意⼒机制通过以下三个主要步骤来实现:乃万真名
1. 为每个路径创建查询、键和值向量。
2. 对于每个输⼊的词,通过使⽤其查询向量与其它所有键向量相乘得到注意⼒得分
3. 将值向量与它们相应的注意⼒得分相乘后求和
1. 创建查询、键和值向量
我们重点关注第⼀条路径。我们⽤它的查询值与其它所有的键向量进⾏⽐较,这使得每个键向量都有⼀个对应的注意⼒得分。⾃注意⼒机制的第⼀步就是为每个词(token)路径(我们暂且忽略注意⼒头)计算三个向量:查询向量、键向量、值向量。
2. 注意⼒得分
计算出上述三个向量后,我们在第⼆步中只⽤查询向量和键向量。我们重点关注第⼀个词,将它的查询向量与其它所有的键向量相乘,得到四个词中的每个词的注意⼒得分。
钟铉申世京现在,我们可以将注意⼒得分与值向量相乘。在我们对其求和后,注意⼒得分较⾼的值将在结果向量中占很⼤的⽐重。
注意⼒得分越低,我们在图中显⽰的值向量就越透明。这是为了表明乘以⼀个⼩的数是如何削弱向量值的影响的。
如果我们在每⼀个路径都执⾏相同的操作,最终会得到⼀个表征每个词的向量,它包括了这个词的适当的上下⽂,然后将这些信息在
上海餐馆
transformer 模块中传递给下⼀个⼦层(前馈神经⽹络):
图解掩模⾃注意⼒机制
现在我们已经介绍了 transformer 模块中⾃注意⼒机制的步骤,接下来我们介绍掩模⾃注意⼒机制(masked self-attention)。在掩模⾃注意⼒机制中,除了第⼆步,其余部分与⾃注意⼒机制相同。假设模型输⼊只包含两个词,我们正在观察第⼆个词。在这种情况下,后两个词都被屏蔽了。因此模型
会⼲扰计算注意⼒得分的步骤。基本上,它总是为序列中后续的词赋予 0 分的注意⼒得分,因此模型不会在后续单词上得到最⾼的注意⼒得分:
我们通常使⽤注意⼒掩模矩阵来实现这种屏蔽操作。不妨想象⼀个由四个单词组成的序列(例如「robot must obey orders」(机器⼈必须服从命令))在语⾔建模场景中,这个序列被分成四步进⾏处理——每个单词⼀步(假设现在每个单词(word)都是⼀个词(token))。由于这些模型都是批量执⾏的,我们假设这个⼩型模型的批处理⼤⼩为 4,它将整个序列(包含 4 步)作为⼀个批处理。
在矩阵形式中,我们通过将查询矩阵和键矩阵相乘来计算注意⼒得分。该过程的可视化结果如下所⽰,下图使⽤的是与单元格中该单词相关联的查询(或键)向量,⽽不是单词本⾝:
在相乘之后,我们加上注意⼒掩模三⾓矩阵。它将我们想要屏蔽的单元格设置为负⽆穷或⾮常⼤的负数(例如,在 GPT2 中为 -10 亿):
然后,对每⼀⾏执⾏ softmax 操作,从⽽得到我们在⾃注意⼒机制中实际使⽤的注意⼒得分:
刺绣教程此分数表的含义如下:
当模型处理数据集中的第⼀个⽰例(第⼀⾏)时,这⾥只包含了⼀个单词(「robot」),所以 100% 的注意⼒都在该单词上。