之前有写过attention和transformer的理解,但是对于self attention中的qkv一直理解的不够透彻,直到今天看了李宏毅的视频才理解,所以记录一下。
所谓QKV也就是Q(Query),K(Key),V(Value)

首先回顾一下self-attention做的是什么:

  1. 所谓自注意力,也就是说我们有一个序列X,然后我们想要算出X对X自己的注意力,也即X中的每个时间点与其余时间点的相关性(在注意力机制中表现为相似性),从而得到一个注意力矩阵。
  2. 算出注意力矩阵后再将之用在序列X上来得到各个时间点的加权和,也即将其余各个时间点的信息都融合到了各个时间点中。

所以怎么办到这一点呢?这就是QKV的用处所在:

  1. 所谓的QKV本质上是代表了三个独立的矩阵,他们都是我们原本的序列X做了不同的线性变换之后的结果,都可以作为X的代表。
  2. 然后为了得到注意力矩阵,我们肯定是先需要两个X的代表矩阵,因为计算相似度至少要有两个向量才可以计算,因此Q和K就是用于这个工作的。计算相似度有很多方式,可以直接做点乘,也可以用个MLP来计算。然后再将结果经过一个softmax来保证输出的是attention weight,也即保证和为1,否则用这个attention matrix的时候数据的scale会不断的变化。
  3. 得到了attention matrix之后要做的就是将这个weight用在X上,也即我们剩下的那个vector V身上。做法就是将attention matrix和V相乘求和即可得到最终结果。

参考链接:B站-李宏毅2020深度学习
推荐阅读:知乎-超详细图解Self-Attention

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐