也就是这里的wq、wk、wv,为啥要接三个矩阵啊???? 关于这里这三个projection层(论文里这么叫的)的作用:1、https://ai.stackexchange.com/questions/23332/what-is-the-weight-matrix-in-self-attention针对于多头机制,如果不使用这三个映射层,则每一个多头的输入部分完全一样,通过使用这三个映射层,多头中的每一个头对应的wq、wk、wv矩阵不同,对于模型的本身的特征抽取的多样性具有一定的帮助;2、https://jalammar.github.io/illustrated-transformer/来自于这篇神文,计算自我注意力的第一步是从每个编码器的输入向量(在这种情况下,是每个单词的嵌入)创建三个向量。因此,对于每个单词,我们创建一个查询向量,一个键向量和一个值向量。通过将嵌入乘以我们在训练过程中训练的三个矩阵,可以创建这些向量。 请注意,这些新向量的维数小于嵌入向量的维数。它们的维数为64,而嵌入和编码器输入/输出矢量的维数为512。它们不必较小,这是使多头注意力(大部分)计算保持恒定的体系结构选择。通过dense层的映射可以灵活的控制q、v、k的大小,可以起到一定的维度降低的作用(比如这里把512的embeding转化为了64维的q、v、k)3、http://peterbloem.nl/blog/transformersEvery input vector i is used in three different ways in the self attention operation:
It is compared to every other vector to establish the weights for its own output i
It is compared to every other vector to establish the weights for the output of the j-th vector j
It is used as part of the weighted sum to compute each output vector once the weights have been established.
在self attention中,以三种不同方式使用每个输入向量:1、将其与其它所有向量进行比较,以为其自身的输出 i建立权重,即对应的query2、将其与其他所有向量进行比较,以建立第j个向量 j的权重,即对应key3、一旦权重确定,它就用作加权总和的一部分,以计算每个输出向量,即对应valueThese roles are often called the query, the key and the value (we'll explain where these names come from later). In the basic self-attention we've seen so far, each input vector must play all three roles. We make its life a little easier by deriving new vectors for each role, by applying a linear transformation to the original input vector. In other words, we add three k×k weight matrices q, k, v and compute three linear transformations of each xi, for the three different parts of the self attention这些角色通常称为query,key和value。到目前为止,在基本的self attention中,每个输入向量必须扮演所有三个角色,通过对原始输入向量进行线性变换,我们为每一个输入创建了三个新向量对应3个角色。换句话说,对于self attention的三个不同部分,我们添加了三个权重矩阵 q, k, v并计算每个xi的三个线性变换:
This gives the self-attention layer some controllable parameters, and allows it to modify the incoming vectors to suit the three roles they must play. 这为自注意力层提供了一些可控制的参数,并允许其修改传入的向量以适合它们必须扮演的三个角色。4、https://medium.com/lsc-psd/introduction-of-self-attention-layer-in-transformer-fc7bff63f3bcFor every inputx, the words inxare embed into vectoraas Self-Attention input.这部分也咨询了一下诸神们,得到的感觉比较合理的回答:一个词在做query和key和value的时候应该是不同表示,如果不用q、v、k的话 一个词在做query和key的时候就是完全相同的,也是不符合直觉的,原始embedding空间体现的是语义关系,语义相近的靠近,自身和自身就重合了,经过qvk这样的转换,转换到新的空间中在做点积,这个新的空间就更加专注于注意力的学习,非要在原始embedding空间做点积也可以,但这样就默认了语义相近的注意力更高,原本自身的embedding会跟自身的embedding有很强的注意力计算结果,那其他位置上有关系的注意力相关性就会被弱化很多,但如果转换到新的空间的话,语义相近的就不一定注意力很高了;(在embedding空间中,体现的是语义相似性,自己点积自己肯定相似性最高,设置qvk的目的应该是开一个新的空间,专门用于学习注意力机制,在这个空间里点积高表示注意力高,但不代语义相似度高,这样就强化了其它上下文的注意力机制的计算结果)5、原文,原文对这里的q、v、k没有做详细的解释,就是告诉你他们这么做了,取得了很好的效果。。。就是这么不讲道理哈哈哈