目录
- 一、注意力中的QKV
- 二、注意力中的位置嵌入
- 三、注意力中的多头
- 四、注意力和自注意力
- 五、注意力中的encode和decoder
一、注意力中的QKV
简单来说:
Q: 要查询的信息
K: 一个索引,要查询的向量
V: 我们查询得到的值
复杂一点的解释:
Query:Query(查询)是一个特征向量,描述我们在序列中寻找什么,即我们可能想要注意什么。Keys:每个输入元素有一个键,它也是一个特征向量。该特征向量粗略地描述了该元素“提供”什么,或者它何时可能很重要。键的设计应该使得我们可以根据Query来识别我们想要关注的元素。Values:每个输入元素,我们还有一个值向量。这个向量就是我们想要平均的向量。Score function:评分函数,为了对想要关注的元素进行评分,我们需要指定一个评分函数f该函数将查询和键作为输入,并输出查询-键对的得分/注意力权重。它通常通过简单的相似性度量来实现,例如点积或MLP。
二、注意力中的位置嵌入
此时假设序列数是5,模型维度是12,就会生成一个5x12的位置嵌入矩阵
三、注意力中的多头
多头就是从多个子空间关注不同方面的信息,也就是使用多组QKV进行运算。
如图所示,我们使用三组QKV,计算得到三个特征矩阵,z1、z2、z3,接下来把得到的三个特征矩阵拼接起来得到一个大特征矩阵,再和矩阵W0相乘。
图片来自bilibili博主狗中赤兔
图片来自bilibili博主狗中赤兔
四、注意力和自注意力
注意力机制:
通常涉及查询(Query)、键(Key)和值(Value)三个向量。在Seq2Seq模型中,查询通常来自解码器,而键和值则来自编码器。
通过计算查询与键之间的相似度(如点积、加性等),得到注意力分数,并据此对值进行加权求和。
自注意力机制:
同样涉及查询、键和值三个向量,但在这里它们都是来自同一序列的不同元素。
通过Query-Key-Value分解、注意力分数计算、注意力权重分配和加权求和等步骤,实现对序列内部信息的全面捕捉和处理。
注意力机制主要关注输入序列与输出序列之间的依赖关系,而自注意力机制则关注同一序列内部不同元素之间的依赖关系。
Transformer 架构内部应用的注意力称为自注意力(self-attention)。在自注意力中,每个序列元素提供一个键、值和query。对于每个元素,根据其query作用一个注意力神经层,检查所有序列元素键的相似性,并为每个元素返回一个不同的平均值向量。
自注意力机制能够有效捕捉序列信息中长距离依赖关系,相比于以往的RNNs,它在处理长序列时的表现更好。
五、注意力中的encode和decoder
图片来自bilibili博主狗中赤兔
图片来自知乎卜寒兮
这片知乎文章写的不错:
https://www.zhihu.com/question/445556653/answer/3254012065