文章目录
- 什么是注意力
- 如何实现注意
- 注意力的计算过程
- 总结
什么是注意力
在一张图像中,包含了各种信息,而我们会自动关注重要的信息。下图是注意力热力图,可以发现人们会注意兔子的脸这些重要信息。
而在深度学习中,输入数据包含了重要的数据与不重要的数据,但对于一个模型来说,它不知道哪些数据是重要的。
因此提出了注意力机制,如何在深度学习模型上使用注意力,让模型关注于重要的数据。
如何实现注意
- Query(查询):查询的范围,可以理解为要查询什么特征。自主提示,即主观意识的特征向量
- Key(键):被对比的项,也就是被查询物体的特征。非自主提示,即被查询物体的突出特征信息向量
- Value(值):被查询的物体本身,也就是原图上的各个物体。代表被查询的物体本身的特征向量,通常和Key成对出现
要实现注意力机制,也就是要得到Q与V的相似度,哪些V对Q更加重要。
注意力的计算过程
① 计算Q与K的相似度
一般是使用点乘(内积)来计算Q与K中的每个事物的相似度,得到Q与 k 1 k_1 k1的相似度 s 1 s_1 s1,Q与 k 2 k_2 k2的相似度 s 2 s_2 s2等等。
然后对得到的相似度执行softmax归一化操作: s o f t m a x ( s 1 , s 2 , . . . , s n ) softmax(s_1,s_2,...,s_n) softmax(s1,s2,...,sn)得到n个概率 ( a 1 , a 2 , a n ) (a_1,a_2,a_n) (a1,a2,an),也就是各个K对Q的重要性。
② 汇总各个物体的相似度
通过前面的计算,我们得到了各个K与Q的相似度,相当于我们得到了各个V与Q的相似度,也就是各个V的权重,此时Q已经失去作用。然后我们需要将这些相似度进行汇总,得到一张图像,这张图像上包含了哪些信息重要与不重要。
计算方法: a i a_i ai与 v i v_i vi相乘,再相加,得到新的 V ′ V' V′
V ′ = a 1 ∗ v 1 + a 2 ∗ v 2 + . . . + a n ∗ v n V' = a_1*v_1+a_2*v_2+...+a_n*v_n V′=a1∗v1+a2∗v2+...+an∗vn
这样的话,就得到了一个新的 V’,这个新的 V’ 就包含了哪些更重要与更不重要的信息在里面,然后用 V’ 代替 V。
一般来说K=V,但在Transformer中,K可以!=V,但K与V必须存在某种联系,只有这样才能通过QK的点乘来指导V哪些重要与不重要。
③ 计算过程的问题与解决方法
在计算出QK后并进行softmax操作时,若各个概率值相差大则会导致softmax输出的值很极端。
因此需要对QK点乘的值进行缩放操作(scale),公式如图所示,其中 d k d_k dk是K的通道数。
通过缩放就可以避免softmax操作的输出极端,注意力机制的结构变为这样。
总结
本质上来说,注意力机制就是网络根据提供的信息Q,得到各个V的一个权重,这个权重代表着Q与V的相关性。