> 文章列表 > Attention注意力机制

Attention注意力机制

Attention注意力机制

加粗样式通俗理解:你会注意什么?

对于一个模型而言(CNN,LSTM),模型本身很难决定什么重要什么不重要,因此注意力机制诞生了。

注意力机制:我们会把焦点聚焦在比较重要的事务上

怎么做注意力

对象:我(查询对象Q),这张图(被查询对象V)
面对一张图,人会判断哪些东西重要哪些东西不重要(计算Q和V中事物的重要度=相似度计算=Q和V中哪些东西更接近)

如何计算Q和K的相似度?→用点乘的方式,点乘其实就是内积cos

Q是查询对象,K=K1,K2,⋯,KnK=K_1,K_2,\\cdots,K_nK=K1,K2,,Kn是要查询的事物key

通过点乘的方法计算Q和K里的每一个事物的相似度,就可以拿到Q和k1k_1k1的相似值s1s_1s1,Q和k2k_2k2的相似值s2s_2s2,Q和knk_nkn的相似值sns_nsn

做一层softmax(s1,s2,⋯,sn)softmax(s_1,s_2,\\cdots,s_n)softmax(s1,s2,,sn)就可以得到概率(a1,a2,⋯,an)(a_1,a_2,\\cdots,a_n)(a1,a2,,an)

因此就可以找到哪个对Q而言更重要

Attention注意力机制
在上图中,Query表示查询对象,Key表示被查询对象,F(Q,K)表示Q和K进行内积,得到相似度值s,然后做softmax归一化,得到四个概率a1a_1a1,a2a_2a2,a3a_3a3,a4a_4a4
还要进行汇总,当使用Q查询结束后,Q已经失去了它的使用价值(在阶段3失去了使用价值),最终还是要拿到该图片的,只不过这张图片多了一些信息(多了一些对于我而言什么信息更重要,什么信息不重要),如下发的热力图,在红色部分是重要的信息。

怎么注意这些重要的部分?

(a1,a2,⋯,an)∗(v1,v2,⋯,vn)=(a1∗v1,a2∗v2,⋯,an∗vn)=(a1∗v1+a2∗v2+⋯+an∗vn)(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)=(a1v1,a2v2,,anvn)=(a1v1+a2v2++anvn)=V’得到一个新的V’,新的V中包含了哪些更重要,哪些不重要的信息在里面。
以前的V=(v1,v2,⋯,vn)(v_1,v_2,\\cdots,v_n)(v1,v2,,vn)
新的V’=(a1∗v1,a2∗v2,⋯,an∗vn)(a_1*v_1,a_2*v_2,\\cdots,a_n*v_n)(a1v1,a2v2,,anvn)

然后用V’代替V

一般K=V,在transformer里。K!=V也是可以的,但是K和V一定存在某种联系,这样Q和K点乘才能指导V哪些重要,哪些不重要。
Attention注意力机制
Attention注意力机制
为什么在Attention公式中有一个除dk\\sqrt{d_k}dk
因为经过softmax得到的概率,如果输入之间的差额越大,得到的概率越离谱
如输入是51,49,得到的概率可能是0.51,0.49
如果输入是80,20,得到的概率可能是0.99999999,0.00000001
现在多一个除dk\\sqrt{d_k}dk,就可以把差额缩小

笔记来源于视频https://www.bilibili.com/video/BV1QW4y167iq/?spm_id_from=333.337.search-card.all.click&vd_source=4f67898e2b4507b9469b30d33789bb78