1. 程式人生 > 實用技巧 >Attention各個維度計算方法

Attention各個維度計算方法

在這裡插入圖片描述
這裡是對self-Attention具體的矩陣操作,包括怎麼separate head,如何進行的QK乘法等細節做了記錄,以便自己以後檢視。

dot-product Attention

在這裡插入圖片描述
其中的 X n , d m o d e l X^{n,d_{model}} Xn,dmodel一般是seq序列,n為序列的長度, d m o d e l d_{model} dmodel為序列的emedding維度。在self-attention中 d k d_k dk d v d_v dv是相等的。

multi-head Attention

其中的 X b s , l e n g t h , e m b X^{bs,length,emb}

Xbs,length,emb一般是輸入的序列,維度的意義如名字所示。

  1. 首先用三個矩陣 W Q W K W V W_QW_KW_V WQWKWV分別對QKV嵌入一個新的維度,emb2也就是projection_dim,當然也可以保持原有的維度不變。
  2. Q b s , l e n g t h , e m b 2 Q^{bs,length,emb2} Qbs,length,emb2舉例,需要將head分離出來,做法也就是對Q的最後一個維度reshape
  3. 對QK做矩陣乘法,這裡注意,Q和K的維度是四個維度( Q b s , h e a d , l e n g h t , e m b 2 / / h e a d Q^{bs,head,lenght,emb2//head}
    Qbs,head,lenght,emb2//head
    ),這裡的乘法是保持bs和head不變只在最後兩個維度做乘法,所以得到的Attention矩陣 A b s , h e a d , l e n g h t , l e n g t h A^{bs,head,lenght,length} Abs,head,lenght,length,這裡的意義就是使用者序列的每一個詞都對其餘的詞有一個attention值。
  4. A V T AV^T AVT得到 Y b s , h e a d , l e n g t h , e m b 2 / / h e a d Y^{bs,head,length,emb2//head} Y
    bs,head,length,emb2//head
    ,對Y進行reshape一下將head去掉恢復原來QKV的形狀 Y b s , l e n g t h , e m b 2 Y^{bs,length,emb2} Ybs,length,emb2
    在這裡插入圖片描述