点积关注背后的直觉是什么?
让我们从一些符号和一些重要的说明开始。
指查询向量矩阵,是与单个输入词相关联的单个查询向量。
指值向量矩阵,是与单个输入词相关联的单个值向量。
指键向量矩阵,是与单个输入词相关联的单个关键向量。
这些矩阵从何而来?在很多教程中没有足够强调的是,这些矩阵是输入嵌入和 3 个训练权重矩阵之间的矩阵乘积的结果: ,,.
在训练期间学习这三个矩阵的事实解释了为什么尽管嵌入的输入序列相同,但查询、值和键向量最终会有所不同。它还解释了为什么谈论多头注意力是有意义的。对同一个句子执行多个注意步骤会产生不同的结果,因为对于每个注意“头”,新的,,是随机初始化的。
另一个没有足够强调的重要方面是,对于编码器和解码器的第一注意层,所有三个矩阵都来自前一层(输入或前一个注意层),但对于编码器/解码器注意层,矩阵来自前一个解码器层,而和矩阵来自编码器。这是解释编码器中两种语言的表示如何混合在一起的关键步骤。
一旦计算了这三个矩阵,转换器就会继续计算查询向量和键向量之间的点积。点积用于计算查询和关键向量之间的一种相似度分数。事实上,作者使用名称query、key和value来表明他们提出的内容与信息检索中所做的类似。例如,在问答中,通常给定一个查询,您希望在所有可能的答案中检索意义最接近的句子,这是通过计算句子之间的相似性(问题与可能的答案)来完成的。
当然,在这里,情况并不完全相同,但是制作您链接的视频的人在解释注意力计算过程中发生的事情方面做得很好(您编写的两个方程在向量和矩阵表示法中完全相同,并且代表这些段落):
- 更接近的查询和关键向量将具有更高的点积。
- 应用 softmax 会将点积分数标准化在 0 和 1 之间。
- 将 softmax 结果与值向量相乘会将查询和关键向量之间的点积分数较低的单词的所有值向量下推至接近零。
在论文中,作者解释了注意力机制,目的是确定转换器应该关注句子中的哪些单词。我个人更喜欢将注意力视为一种共指解决步骤。我这么认为的原因是下面的图片(取自原作者的这个演示文稿)。
这张图基本上显示了注意力计算的结果(在他们没有提到的特定层)。连接单词的线越大意味着单词查询和关键向量之间的点积中的值越大,这基本上意味着只有那些单词值向量才会传递给下一个注意力层进行进一步处理。但是,请注意,有些词实际上是相关的,即使根本不相似,例如,“Law”和“The”并不相似,它们只是在这些特定的句子中相互关联(这就是我喜欢思考的原因注意作为共同参考决议)。计算嵌入之间的相似性永远不会在句子中提供有关这种关系的信息,transformer 学习这些关系的唯一原因是训练矩阵的存在,,(加上位置嵌入的存在)。