注意力機制
有一個字典(Python中稱為字典,也叫鍵值對)。我們記為(key, value)。
比方說我們有下列腰圍體重資料,我們又有一個樣本,他的腰圍是57,那麼我們預測他的體重值是多少呢?或者說我們怎麼預測他的體重值呢?
由於57到56和58的距離一樣,那麼我們可以預測他的體重值為它們對應體重的平均值,即(43 + 48) / 2 = 0.5 * 43 + 0.5 * 48 = 45.5
,注意此處,由於56和58離57非常接近,所以我們自然會非常"注意"它們,所以我們分給它們的注意力權重各為0.5。但是這裡有一個問題,我們沒有用上其他的鍵值對
我們好像要調整一下注意力權重,那麼我們該怎麼計算權重呢?
簡單理解,體重預測值f(q)就是預測值的key與每個已知值的key所計算出來的權重再乘以與已知值相對應的value再進行求和。
而其中的權重就是α(q, ki)
我們將上面的q稱為請求(query),k叫做鍵(key),v叫做值(value)。
q,k,v在多維的情況下也是類似的。
假設q是二維的,由於q1和k1都是二維向量,注意力分數可以使以下幾種,如圖所示:
以點積模型為例:
為了方便,我們使用矩陣來表示:
為了緩解梯度消失問題,我們還會除以一個特徵維度,我們將其稱為“縮放點積注意力模型”
如果Q、K、V是同一個矩陣會發生什麼?那就是自注意力,
我麼用X來表示這個矩陣,那麼有:
三個可以訓練的矩陣:
寫在最後
以上截圖和文字均來自於嗶哩嗶哩:
【注意力機制的本質|Self-Attention|Transformer|QKV矩陣-嗶哩嗶哩】 https://b23.tv/W4FwAY4