深度学习(DL)(四) — 探析

自注意力

要将自注意力CNN一起使用,需要计算自注意力,即为输入句子中的每个单词创建基于注意力的表示。示例Jane, visite, l'Afrique, en, septembre,我们的目标是为每个单词计算一个基于注意力的表示。最终会得到五个,因为句子有五个单词。即。然后对句子中的各个单词进行计算。表示l'Afrique的一种方法是查找l'Afrique的词嵌入。根据对l'Afrique的理解,可以选择不同的方式来表示它()。它将查看周围的单词,试图弄清楚在这个句子中的含义,并找到最合适的表示。就实际计算而言,它与之前在RNN上下文中看到的注意力机制没有太大区别,只是并行计算句子中所有单词的表示。

RNN之上构建注意力时,使用了以下方程。使用Transformer自注意力机制,方程将如下所示。可以看到这些方程有一些相似之处。这里的内部项也涉及softmax。但主要的区别在于,比如l'Afrique,有三个值,称为Query、KeyValue。这些向量是计算每个单词的注意力值的关键输入。让我们逐步完成从单词l'Afrique到自注意力表示所需的计算。首先,将每个单词与三个值关联起来,如果l'Afrique单词嵌入,则计算是作为一个学习矩阵,键和值也是如此,。这些矩阵是此学习算法的参数。那么这些查询,键和值向量应该做什么呢?是要问的关于非洲的问题。可能代表这样的问题,例如,那里发生了什么?您可能想知道在计算时,发生了什么。计算之间的内积,答案为1时问题的答案有多好。,答案为1时问题的答案有多好,此操作的目的是提取信息,并计算出此处最有用的表示。如果表示这个词是一个人,因为Jane是一个人,而表示第二个词visite是一个 action,那么会发现的内积具有最大值,取这一行中的这五个值,并对它们计算softmax对应于单词visite具有最大值。将这些softmax值与相乘。最后,它们全部加起来。因此将所有这些值相加会得到。这种表示的主要优势在于l'Afrique这个词不是某种固定的词嵌入。相反,它让自注意力机制意识到l'Afrique是访问的目的地,从而为这个词计算出更丰富、更有用的表示。如果将这五个计算放在一起,文献中使用的表示法如下所示,其中是包含所有这些值的矩阵,这只是此处方程的压缩或矢量化表示。分母中的项只缩放点积,因此它不会爆炸。但这种注意力的另一个名称是缩放点积注意力。总结一下,与这五个单词中的每一个相关联,您最终会得到一个查询、一个键和一个值。查询可以让您提出有关该单词的问题,例如非洲发生了什么。关键是查看所有其他单词,并通过与查询的相似性,帮助您找出哪些单词给出了与该问题最相关的答案。

多头注意力

每次计算序列的自注意力时,称为头部。通过将每个输入项乘以这几个矩阵WQ,WKWV,获得了向量QKV。使用多头注意力,将同一组查询键和值向量作为输入。值并计算多个自注意力。其中第一个,将矩阵与权重矩阵相乘,。这三个值提供了一组新的查询键和值向量,用于第一个单词。对其他单词也做同样的操作。完成后,单词visite给出了最佳答案,表示l'Afrique的键与visite的查询之间的内积具有最高值。这就是获得l'Afrique的表示,对Jane、visite和其他单词en septembre做同样的操作。最终得到五个向量来表示序列中的五个单词。这是对多头注意力机制中的第一个头进行的计算。对l'Afrique和其他单词进行的完全相同的计算,并最终得到注意力值。现在执行不止一次,而是多次。到目前为止,用第一个头计算了注意力的数量。让我们用第二个头进行计算。有一组新的矩阵。,重复与第一个完全相同的计算,但使用这组新矩阵。在这种情况下,您最终得到的可能是september键和l'Afrique查询之间的内积最高。也许我们现在要问的第三个问题,由表示,当第三次进行计算时,也许Jane的键向量和l'Afrique查询向量之间的内积将最高。Jane的值将在此表示中具有最大的权重,将其堆叠在后面。在文献中,头部的数量通常用表示。你可以将每个头部视为不同的特征。当你将这些特征传递给新网络时,你可以计算出句子的表示。计算三个头部或八个头部,这三个值的串联用于计算多头注意力的输出。因此最终值是个头部的串联。最后乘以矩阵。实际上可以并行计算所有头,而不是按顺序计算。

Transformer

再次从句子“Jane visite L'Afrique en septembre”及其对应的嵌入开始。如何将句子从法语翻译成英语。这里添加了句子开头和句子结尾的标记。为了简单起见,只讨论了句子中单词的嵌入,但在许多序列到序列的翻译任务中,添加句子开头(SOS)和句子结尾(EOS)标记会很有用,Transformer的第一步是,这些嵌入被输入到具有多头注意力层编码器块中。根据嵌入权重矩阵计算出的值。这一层生成一个矩阵,该矩阵可以传递到前馈神经网络中,从而帮助确定句子中有哪些有趣的特征。在Transformer论文中,这个编码块重复了n次,n的默认值是6。大约经过六次这个块之后,将编码器的输出输入到解码器块中。接下来开始构建解码器块解码器块的工作是输出英文翻译。第一个输出将是句子开头的标记。在每一步,解码器块都会输入前几个单词,无论生成了什么翻译。刚开始时,唯一知道以句子开头的标记开始。句子开头标记被输入到这个多头注意力块中,仅使用这个标记(SOS)来计算多头注意力块。第一个块的输出用于生成下一个多头注意力块的矩阵,编码器的输出用于生成。第二个多头注意力块,其输入与之前一样。然后从中提取上下文,然后决定要生成的序列中的下一个单词是什么。多头注意力块输出输入到前馈神经网络的值。这个解码器块也重复次,可能是6次,将输出反馈给输入,并让它重复。神经网络的工作是预测句子中单词。希望确定英语翻译中的第一个单词是Jane。然后还要将Jane提供给输入。下一个查询来自SOSJane,给定Jane,最合适的下一个单词是什么?找到正确的键和值,然后生成最合适的下一个单词,希望会生成visite。然后再次运行这个神经网络生成Africa。然后我们将Africa反馈给输入。希望它生成in然后是September,有了这个输入,希望它能生成句子结尾的标记,然后就完成了。输入的位置编码。没有任何东西可以指示单词的位置。这个词是句子中的第一个词,还是句子中的中间词,还是句子中的最后一个词?句子中的位置对于翻译来说非常重要。对输入中元素位置进行编码的方式是使用正弦余弦方程的组合。例如,假设您的词嵌入是一个具有四个值的向量。在这种情况下,词嵌入的维度,在这个例子中,创建一个相同维度的位置嵌入向量,也是四维的。把这个位置嵌入称为,假设是第一个单词 Jane的位置嵌入。在下面的等式中,位置(pos)表示单词的数字位置。对于单词Jane,这里的是编码的不同维度。第一个元素对应于。其中pos是单词的位置,,是这个向量的维度。位置编码对正弦和余弦所做的就是创建一个唯一的位置编码向量。每个单词都是唯一的,即对第三个单词l'Afrique的位置进行编码的向量,这些值将不同于第一个单词Jane的代码位置中使用的四个值。将具有这样的正弦曲线将以较低频率的正弦曲线,而提供了余弦曲线编码块的输出包含上下文语义嵌入位置编码信息。嵌入层的输出是,除了将这些位置编码添加到嵌入之外,还会残差连接的网络传递。在这种情况下,它们的目的是将位置信息传递到整个架构中。除了位置编码之外,Transformer网络还使用与批量规范非常相似的层。它们的目的是将位置信息传递到位置编码中。Transformer还使用了一个批量规范层。最后,对于解码器块的输出,实际上还有一个线性层和一个softmax层,用于一次一个单词地预测下一个单词。您可能还会听到一种称为掩码多头注意力掩码多头注意力仅在训练过程中很重要,在该过程中,您将使用正确的法语到英语翻译的数据集来训练Transformer