Transformer学习(2):自注意力机制
自注意力机制是规定了数据自身来作为查询对象与被查询对象。
回顾
注意力机制

自注意力机制

自注意力机制中同样包含QKV,但它们是同源(Q≈K≈V),也就是来自相同的输入数据X,X可以分为(x1,x2,..,xn)(x_1,x_2,..,x_n)(x1,x2,..,xn)。
而通过输入嵌入层(input embedding),(x1,x2,..,xn)(x_1,x_2,..,x_n)(x1,x2,..,xn)变为(a1,a2,..,an)(a_1,a_2,..,a_n)(a1,a2,..,an)这些向量,通过X来寻找X中的关键点。
而对于每个aia_iai都会有对应qi,ki,viq_i,k_i,v_iqi,ki,vi,Q不再是共用的。
Q={q1,q2,...,qn};K={k1,k2,...,kn};V={v1,v2,...,vn}Q = \{q_1,q_2,...,q_n\};K = \{k_1,k_2,...,k_n\};V = \{v_1,v_2,...,v_n\}Q={q1,q2,...,qn};K={k1,k2,...,kn};V={v1,v2,...,vn}
在自注意力机制中,以输入数据X自身中的xix_ixi作为查询对象(注意力机制中的Q),自身的其他xxx作为被查询对象V。也就是自己作为查询与被查询对象。
计算过程
① 计算QKV:
要得到QKV,则需要使用三个参数WQ,WK,WVW_Q,W_K,W_VWQ,WK,WV,这三个参数都是可训练的,而且所有aaa共享。
公式:
qi=ai∗WQq_i = a_i*W_Qqi=ai∗WQ
ki=ai∗WKk_i = a_i*W_Kki=ai∗WK
vi=ai∗WVv_i = a_i*W_Vvi=ai∗WV

而这个计算过程可以写为矩阵乘法,实现并行计算。
② 计算Q与K相似度(概率):
每个qiq_iqi都有一次作为查询对象,所有的kkk计算与其的相似度(与它相同的概率)。
计算相似度的方法与注意力机制是相同,都是q与k进行点乘与scale得到相似度,其中dkd_kdk为k的尺寸,也就是向量kkk包含多少个数据。
计算过程如图所示,每个qiq_iqi都计算与所有kkk的相似度,相当于得到了每个个体都得到自己与其他个体的相似度。
由于相乘得到的值处于正负无穷之间,因此对结果使用Softmax来转换为概率,以此作为权重,代表对应的V在求和中的比重,代表其重要性。
计算过程也可以表示为矩阵运算
③ 汇总权重,得到包含注意力信息的结果
计算出Q与K的相似度,也就是得到了对于qiq_iqi,各个viv_ivi的权重。
得到与每个个体的相似度后,就可以根据相似度融合所有个体的信息,来得到新的个体特征,也就是新的V。
因此,最后将得到的权重a^\widehat{a}a
与每个viv_ivi进行点乘运算再将结果相加,就可以得到包含了对于qiq_iqil来说哪些重要与不重要的数据bib_ibi,然后用bib_ibi来代替aia_iai
计算过程也可以转换为矩阵运算
与注意力机制的不同
注意力机制是一个很宽泛(宏大)的一个概念,QKV 相乘就是注意力,但是他没有规定 QKV是怎么来的,他只规定 QKV 怎么做。
Q 可以是任何一个东西,V 也是任何一个东西, K往往是等同于 V 的(同源),K和 V 不同源不相等可不可以。
而自注意力机制,特别狭隘,属于注意力机制的,注意力机制包括自注意力机制的,他不仅规定了 QKV 同源,而且固定了 QKV 的做法,规定了QKV是如何得到的。
总结
自注意力机制是规定了数据自身来作为查询对象与被查询对象。
更多推荐
所有评论(0)