“自注意力机制中有三个重要的输入矩阵:查询矩阵Q(query)、键矩阵K(key)和值矩阵V(value)。这三个矩阵都是由输入序列经过不同的线性变换得到的。然后,查询矩阵Q与键矩阵K的乘积经过一个softmax函数,得到一个与输入序列长度相同的概率分布,该分布表示每个元素对于查询矩阵Q的重要性。最后,将这个概率分布乘以值矩阵V得到自注意力向量,表示将每个元素的值加权平均后的结果。”
这相当于在说:我要比较每一个向量(可能代表了某一个单词)和其他向量的相似度(和自己或者重复的向量相似度自然高),最后的结果就是一个加权和(自己和与自己类似的向量乘上相似度的和)显然要是有一个向量重复的多或者与它类似的多的话,他最后的结果就大,更重要,而且也体现了有哪些词和他有关
当然要记得给输入向量加上位置信息,毕竟注意力机制对输入顺序不敏感,但我们的结果是敏感的。
(中间的Scale只是一个除法,防止向量不一样大)
transformer的多头注意力机制是怎么做的?就是对最开始输入的矩阵做不同的线性变化,做出很多套降维的q,k,v来,并行的计算,出来之后会得到很多套乘过权重的输入数据,把大家连接起来就好
这样一来注意力机制中还可以有可学习参数,可以识别更多模式。
总结:注意力机制就是在输入数据上做文章,让重要的数据获得更大的权重。主要的方式是比较向量与其他的之间的相似度,也可以在比较之前加上线形层来有一些学习的空间。
交叉注意力与自注意力机制类似,Q,K来自一个输入序列,V来自另一个。
因果注意力就是加mask,给后面的乘上一个绝对值很大的复数,softmax之后