self-attention中的QKV机制
之前有写过attention和transformer的理解,但是对于self attention中的qkv一直理解的不够透彻,直到今天看了李宏毅的视频才理解,所以记录一下。所谓QKV也就是Q(Query),K(Key),V(Value)首先回顾一下self-attention做的是什么:所谓自注意力,也就是说我们有一个序列X,然后我们想要算出X对X自己的注意力,也即X中的每个时间点与其余时...
·
之前有写过attention和transformer的理解,但是对于self attention中的qkv一直理解的不够透彻,直到今天看了李宏毅的视频才理解,所以记录一下。
所谓QKV也就是Q(Query),K(Key),V(Value)
首先回顾一下self-attention做的是什么:
- 所谓自注意力,也就是说我们有一个序列X,然后我们想要算出X对X自己的注意力,也即X中的每个时间点与其余时间点的相关性(在注意力机制中表现为相似性),从而得到一个注意力矩阵。
- 算出注意力矩阵后再将之用在序列X上来得到各个时间点的加权和,也即将其余各个时间点的信息都融合到了各个时间点中。
所以怎么办到这一点呢?这就是QKV的用处所在:
- 所谓的QKV本质上是代表了三个独立的矩阵,他们都是我们原本的序列X做了不同的线性变换之后的结果,都可以作为X的代表。
- 然后为了得到注意力矩阵,我们肯定是先需要两个X的代表矩阵,因为计算相似度至少要有两个向量才可以计算,因此Q和K就是用于这个工作的。计算相似度有很多方式,可以直接做点乘,也可以用个MLP来计算。然后再将结果经过一个softmax来保证输出的是attention weight,也即保证和为1,否则用这个attention matrix的时候数据的scale会不断的变化。
- 得到了attention matrix之后要做的就是将这个weight用在X上,也即我们剩下的那个vector V身上。做法就是将attention matrix和V相乘求和即可得到最终结果。
参考链接:B站-李宏毅2020深度学习
推荐阅读:知乎-超详细图解Self-Attention
更多推荐
已为社区贡献1条内容
所有评论(0)