一. Self-Attention
1.1. Self-Attention
概念及作用
通過對一句話中的不同單詞分配不同的權重來幫助模型理解輸入語句的其他位置信息, 達到更好的編碼效果.
如在 Attention Is All You Need 中所提到的一個例子:
“The animal didn’t cross the street because it was too tired”
- 如何判別句子中的 “it” 對於機器來說指的是 “animal” 還是 “street” ?
而使用 Self-Attention 處理後能發現, it指的是 “animal”:
1.2. Self-Attention
實現原理
- 第一步: 輸入的是句子中第i個單詞
embedding
處理後的詞向量 - 第二步: 將上一步驟得到的一個詞向量經過一定處理得到下述三個向量:
- Query Vector, 查詢向量
- Key Vector, 鍵向量
- Value Vector, 值向量
- 第三步: 將該單詞得到的Query Vector分別乘上輸入語句的每個單詞對應得到的Key Vector得到該單詞對句子每個單詞的得分Score, 該Score決定了對其他單詞的關注度
- 第四步, 根據上一步驟得到的一系列得分除以Key Vector的維度的平方根()得到新分數以確保更穩定的梯度
- 第五步, 根據上一步驟得到的一系列分數進行
Softmax
處理得到一系列概率值 - 第六步, 將上一步驟得到的一系列概率值乘上第二步得到的Value Vector一系列特徵向量
- 第七步, 將上一步驟得到的一系列特徵向量進行求和處理得到句子第i個單詞經過
self-attention
處理後的新向量
1.3. 三個向量獲得方法
Query Vector, Key Vector, Value Vector
在原論文中, 輸入的經過embedding
處理的詞向量的維度是, 通過設定三個超參數: , , , 分別將這三個超參數乘上詞向量, 分別得到這三個維度爲向量.
值得注意的是, 之所以得到的這三個新向量的維度都小於原詞向量, 是因爲這是一種架構選擇, 可使multi-headed attention計算(大多數)不變.
二. Multi-Headed Attention
2.1. Multi-Headed Attention
概念及作用
大致處理流程類似於Self-Attention
, 但可以使模型關注不同的位置, 更有效的提高Attention層的處理性能.
雖然在Self-Attention
中, 最終步驟得到的向量包含了一些其他位置的編碼,但仍然是當前位置的單詞佔主要作用,
而Multi-Headed Attention
正好提供了多個子空間, 更加關注其他位置信息.
2.2. Multi-Headed Attention
基本原理
- 使用多個headed, 使用不同的權重組合得到和 heads 數量一樣多的不同值的 Query / Key / Value 向量組
- 將上述得到的多個 Query / Key / Value 向量組 分別得到對應的相當於每個單詞做了多次self-attention計算的新特徵向量
- 將上述一系列進行連接成一個矩陣
- 將上一步驟得到的一個矩陣乘上一個額外權重矩陣得到經過
Multi-Headed Attention
處理的 最終向量