1.視頻1:self-Attention|自注意力機制 |位置編碼 | 理論 + 代碼
注意:
q-查詢; k-商品標簽; v-值(具體商品)
* 不是指乘法,類似概念
a1:相似度; b1:總分
?
若想了解 I? ?這個詞? 與其他詞的相似度,則用q1分別乘以 k2,k3,k4
若想了解 dog? ?這個詞? 與其他詞的相似度,則用q4分別乘以 k1,k2,k3
注意:
(1,4,2)? 1 表示一個batch size, 4表示一個token, 2表示每個token的長度
位置編碼
因為self-attention的輸出沒有位置信息, 將a4放在最后一個輸出的b4,? 與? 將a4 放在第一個輸出的b4,? ?兩個b4完全相同,沒有包含位置對其的影響(沒有包含位置信息)
?
一共有j個token, 每個token都有i個維度,
對于奇數維度的位置編碼,使用cos 生成
對于偶數維度的位置編碼,使用sin?生成
2. 視頻2:Multi-Head Attention | 算法 + 代碼
?
上一節課講的是 single head
這節課將multi-head,? ?其中 h表示head的個數
講了 幾種q,k,v的計算方法
方法1:見上個圖片,w1 2x6? 分成三份(每份 2x2),分別與ai相乘,分別生成三份q,每個q 1x2
方法2:先使用統一的權重, 生成q,k,v, 然后再將q,k,v, 分別切分多個 ,如q切分為q1,q2,q3,q4,q5。
形成多個head
對于每個head,向上一節課那樣,分別生成b1,b2...bm
?將得到的b先按列concat,? 再按行concat,? 得到一個mxd 的矩陣
m表示token的個數;d表示每一個token的維度
代碼實現
首先定義一個x,? ?(1,4,2)
1表示batch size
4表示token個數
2表示token?
?
?
實例化一個類,傳入三個參數
第一個參數:dim_in表示輸入中每個token的維度(即輸入x的最后一個維度)
第二個參數:d_model表示如果使用single self-attention? 時,qkv總的向量長度
第三個參數:num_heads表示指定head的個數
指定qkv的總向量長度為6;指定一共有3個head;
所以每個head的維度等于 6/3=2,
定義三個全連接層,分別從輸入x中提取qkv
表示每個head的維度 dk
從三個全連接層分別提取q,k,v
提取的qkv的維度等于d_model? ?即6,? (1,4,6)
將其reshape, 將6拆分為3x2
(1,4,3,2)
3表示3個head
將3進行移動,得到
(1,3,4,2)
4,2表示每個head的qkv的維度,
此時即可以對每個head進行并行處理
第一行表示:
q乘以k的轉置,再除以根號下dk,? 得到相似度分數
(個人:這里感覺自已聽得有問題,沒有完全理解)
對dist的最后一個維度做softmax,? 然后乘以v? 得到b
將b的維度調整為(1,4,3,2)
4表示4個token
3表示3個head
2表示每個b的維度
再將(1,4,3,2)reshape成 (1,4,6)
b最后維度為6
再將b經過全連接層,得到最終結果? ,最終結果的維度也是(1,4,6)
個人:
聽得比較迷糊
本來是想聽聽這個,看看能否理解YOLO11里面的PSA, 還是沒有搞懂
?
參考資料:
1.self-Attention|自注意力機制 |位置編碼 | 理論 + 代碼_嗶哩嗶哩_bilibili
2.Multi-Head Attention | 算法 + 代碼_嗶哩嗶哩_bilibili