小trick:注意力中最主要的是有q,k,v三个概念;并且对于普通的自注意力来说要求的就是Wq,Wk,Wv三个可学习参数,对于多头注意力就是有多组这种参数。
q相当于自己,k相当于别人,v相当于知道与别人关系的自己;结果是权重矩阵
关于提特征:输入向量和对应的权重矩阵进行点积,类似于卷积操作中,矩阵和卷积核进行点积,因此,相类似,是一种提取特征的过程。
对于自注意力来说,其输入是一个token,是一维向量,一维向量和权重矩阵进行点积;即使是彩色图像(3维),其对应的也是一个token(vector);
在注意力机制中,输入可以是一维向量,也可以是多维特征图。对于输入特征图,注意力机制通常会先将其压缩成一维向量,再进行权重计算,最终将权重应用到输入特征图上。因此,可以说在注意力机制中输入可以是一维向量,也可以是多维特征图,而输出通常是权重矩阵,用于加权输入特征图的不同通道或空间位置的特征。
注意力机制的权重计算是通过输入的特征图(可以是一维向量或多维特征图)中每个通道或空间位置的信息来计算的,因此可以说是向量内各个元素之间的关系。在计算注意力权重时,通常需要先对输入特征图中的每个通道或空间位置进行一定的变换(如全连接层或卷积层),得到一个向量表示该通道或位置的信息。然后,这些向量通过一定的计算方式(如点积、加权和等)生成注意力权重,用于加权输入特征图的不同通道或空间位置的特征。因此,可以说注意力机制的权重计算是基于向量内各个元素之间的关系。
在注意力机制的运算中,通常不会显式地改变特征图的大小或维度。注意力机制通常是在原始特征图上计算权重,然后将这些权重应用于特征图中的每个位置或通道。这些权重本质上是一个与特征图大小和维度相同的张量,所以它们不会改变特征图的大小或维度。
在某些情况下,注意力机制可能会使用类似于卷积操作的方法来计算权重,这种操作可能会改变特征图的大小或维度。例如,Self-Attention机制就可以通过矩阵乘法来计算注意力权重,这可能会将一个维度较高的特征图转化为另一个维度较高的特征图。然而,这种情况并不常见,因为通常在应用注意力机制时,我们只是在原始特征图上计算注意力权重,并将它们应用于相同大小和维度的特征图上。
- 对于当前的输入向量,我们称之为 query,它对应有 Wq 这个权重矩阵,query 的值为权重矩阵乘以输入向量,也就是 qi=Wq·ai 。
- 而 query 外的其他的输入向量,则被被成为 key,其对应有 Wk 这个权重向量,key 的值为权重矩阵乘以这个其它输入向量,也就是 ki=Wk·aj(j可能等于i)
权重
采用点积(Dot-product)的方式,比如说 query1 和 key2 的关联度,就为二者的点积:α1,2=q1·k2
点积结果越大,两者关系越密切。
得出所有的 αi,j 之后,这些数需要通过激活函数比如 Soft-max 函数,输出激活后的 α',也就是我们需要的注意力权重。这里的激活函数使用的是 Soft-max,目的是做 Normalization。至于为什么使用 soft-max 并没有定论,也可以使用别的激活函数,比如 ReLU。
vi ,它的计算方式也和 query 或 key 的计算很相似,它也有属于自己的权重矩阵 Wv ,所以计算方式为: vi=Wv·ai
b1 是加全求和,每也就是个注意力权重 α1,j′ 乘以对应的 vi ,计算公式为:
b1=∑iα1,i′vi=α1,1′v1+α1,2′v2+...+α1,4′v4
关于关系的计算是可以并行处理的