additive attention 和 dot-product attention 是最常用的兩種attention函數(shù),都是用于在attention中計(jì)算兩個(gè)向量之間的相關(guān)度,下面對(duì)這兩個(gè)function進(jìn)行簡單的比較整理。
計(jì)算原理
additive attention 使用了一個(gè)有一個(gè)隱層的前饋神經(jīng)網(wǎng)絡(luò),輸入層是兩個(gè)向量的橫向拼接,輸出層的激活函數(shù)是sigmoid表示二者的相關(guān)度,對(duì)每一對(duì)向量都需要進(jìn)行一次計(jì)算,得到的結(jié)果再計(jì)算softmax得到attention相關(guān)度權(quán)重。
舉個(gè)栗子
計(jì)算向量Q與向量K1,K2,... ,Kn的attention權(quán)重,先拼接Q-K1計(jì)算,再拼接Q-K2計(jì)算,...,直到所有的都計(jì)算出一個(gè)結(jié)果再套softmax。
dot-product attention 一般用矩陣運(yùn)算,Q K V 分別是三個(gè)矩陣,均表示一組向量,dot-product attention想做的是如何用V中的向量表示Q,Q一般指的是要表示的目標(biāo),K要和Q建立聯(lián)系,計(jì)算相關(guān)性,以計(jì)算出的相關(guān)性為權(quán)重,加權(quán)疊加矩陣V中的向量。下圖是Transformer中用的dot-product attention,根號(hào)dk作用是縮放,一般的dot-product attention可以不用縮放。
這里Q和K的都是由維度為dk的向量組成的,V的維度為dv,最終生成的Q‘也是由維度為dv的向量組成的。
用同一個(gè)栗子,這里的矩陣Q 就是 1 × dk,K是 n × dk,V是 n × dv。
優(yōu)缺點(diǎn)
dot-product attention可以利用矩陣運(yùn)算,計(jì)算速度更快,并且更節(jié)省空間,但是要求 Q 和 K向量維度相同,如果不同需要進(jìn)行一定的映射變換
在dk較小時(shí)二者表現(xiàn)相似,但是dk較大時(shí),dot-product attention表現(xiàn)不如additive attention,因?yàn)閐k較大時(shí)點(diǎn)積之后的結(jié)果較大,求softmax之后,梯度會(huì)很小,不利于計(jì)算,需要做一定的縮放。