文章目录
- 什么是注意力
- 如何实现注意
- 注意力的计算过程
- 总结
什么是注意力
在一张图像中,包含了各种信息,而我们会自动关注重要的信息。下图是注意力热力图,可以发现人们会注意兔子的脸这些重要信息。
而在深度学习中,输入数据包含了重要的数据与不重要的数据,但对于一个模型来说,它不知道哪些数据是重要的。
因此提出了注意力机制,如何在深度学习模型上使用注意力,让模型关注于重要的数据。
如何实现注意
- 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的相关性。