加粗样式通俗理解:你会注意什么?
对于一个模型而言(CNN,LSTM),模型本身很难决定什么重要什么不重要,因此注意力机制诞生了。
注意力机制:我们会把焦点聚焦在比较重要的事务上
怎么做注意力
对象:我(查询对象Q),这张图(被查询对象V)
面对一张图,人会判断哪些东西重要哪些东西不重要(计算Q和V中事物的重要度=相似度计算=Q和V中哪些东西更接近)
如何计算Q和K的相似度?→用点乘的方式,点乘其实就是内积cos
Q是查询对象, K = K 1 , K 2 , ⋯ , K n K=K_1,K_2,\cdots,K_n K=K1,K2,⋯,Kn是要查询的事物key
通过点乘的方法计算Q和K里的每一个事物的相似度,就可以拿到Q和 k 1 k_1 k1的相似值 s 1 s_1 s1,Q和 k 2 k_2 k2的相似值 s 2 s_2 s2,Q和 k n k_n kn的相似值 s n s_n sn
做一层 s o f t m a x ( s 1 , s 2 , ⋯ , s n ) softmax(s_1,s_2,\cdots,s_n) softmax(s1,s2,⋯,sn)就可以得到概率 ( a 1 , a 2 , ⋯ , a n ) (a_1,a_2,\cdots,a_n) (a1,a2,⋯,an)
因此就可以找到哪个对Q而言更重要
在上图中,Query表示查询对象,Key表示被查询对象,F(Q,K)表示Q和K进行内积,得到相似度值s,然后做softmax归一化,得到四个概率 a 1 a_1 a1, a 2 a_2 a2, a 3 a_3 a3, a 4 a_4 a4。
还要进行汇总,当使用Q查询结束后,Q已经失去了它的使用价值(在阶段3失去了使用价值),最终还是要拿到该图片的,只不过这张图片多了一些信息(多了一些对于我而言什么信息更重要,什么信息不重要),如下发的热力图,在红色部分是重要的信息。
怎么注意这些重要的部分?
( a 1 , a 2 , ⋯ , a n ) ∗ ( v 1 , v 2 , ⋯ , v n ) = ( a 1 ∗ v 1 , a 2 ∗ v 2 , ⋯ , a n ∗ v n ) = ( a 1 ∗ v 1 + a 2 ∗ v 2 + ⋯ + a n ∗ v n ) (a_1,a_2,\cdots,a_n)*(v_1,v_2,\cdots,v_n)=(a_1*v_1,a_2*v_2,\cdots,a_n*v_n)=(a_1*v_1+a_2*v_2+\cdots+a_n*v_n) (a1,a2,⋯,an)∗(v1,v2,⋯,vn)=(a1∗v1,a2∗v2,⋯,an∗vn)=(a1∗v1+a2∗v2+⋯+an∗vn)=V’得到一个新的V’,新的V中包含了哪些更重要,哪些不重要的信息在里面。
以前的V= ( v 1 , v 2 , ⋯ , v n ) (v_1,v_2,\cdots,v_n) (v1,v2,⋯,vn)
新的V’= ( a 1 ∗ v 1 , a 2 ∗ v 2 , ⋯ , a n ∗ v n ) (a_1*v_1,a_2*v_2,\cdots,a_n*v_n) (a1∗v1,a2∗v2,⋯,an∗vn)
然后用V’代替V
一般K=V,在transformer里。K!=V也是可以的,但是K和V一定存在某种联系,这样Q和K点乘才能指导V哪些重要,哪些不重要。
为什么在Attention公式中有一个除 d k \sqrt{d_k} dk
因为经过softmax得到的概率,如果输入之间的差额越大,得到的概率越离谱
如输入是51,49,得到的概率可能是0.51,0.49
如果输入是80,20,得到的概率可能是0.99999999,0.00000001
现在多一个除 d k \sqrt{d_k} dk,就可以把差额缩小
笔记来源于视频https://www.bilibili.com/video/BV1QW4y167iq/?spm_id_from=333.337.search-card.all.click&vd_source=4f67898e2b4507b9469b30d33789bb78