原文鏈接: https://zhuanlan.zhihu.com/p/72001554 [seq2seq模型+attention機制]
attention機制的原理
神經學中的注意力機制有兩種:
(1)自上而下的有意識的注意力,稱為聚焦式注意力(Focus Attention),聚焦式注意力是指有預定目的,依賴任務的,主動有意識地聚焦與某一對象的注意力。
(2)自下而上的無意識的注意力,稱為基於顯著性注意力(Saliency-Based Attention)。是由外界刺激驅動的注意,不需要主動去干預,和任務無關。如果一個對象的刺激信息不同於其周圍信息,一種無意識的“贏者通吃”(Winner-Take-All)或者門控(Gating)機制就可以把注意力轉向這個對象。
當你在聽你的朋友說話時,你專注於你朋友的說話而忽略了周圍其他的聲音,這就是聚焦式注意力,當你在其他周圍聲音中聽到了感興趣的詞時,你會馬上注意到,這是顯著性注意力。
給定N組信息輸入 ,每個向量
都表示一組輸入信息。注意力機制的計算分為兩步:一是在所有輸入信息上計算注意力分布,二是根據注意力分布來計算輸入信息的加權平均。
注意力分布:為了從N個輸入向量 中選擇出和某個特定任務相關的信息,需要引入一個和任務相關的表示稱為查詢向量(Query Vector),並通過一個打分函數score()計算每個輸入向量和查詢向量之間的相關性。
給定一個和任務相關的查詢向量q,用注意力變量 來表示被選擇信息的索引位置,即
表示選擇了第i個輸入向量。首先計算在給定q和X下,選擇第i個輸入向量的概率
(權重),
為注意力分布權重,
為注意力打分函數,打分函數有很多種方式比如:
- 加性模型:
- 點積模型:
- 縮放點積模型:
- 雙線性模型:
為可學習的參數,
為輸入向量的維度。
點積模型在實現上更好的利用了矩陣乘積,從而計算效率更高,但是當輸入向量的維度d比較高,點積模型的值通常有比較大的方差,從而導致softmax函數的梯度比較小,縮放點積模型可以較好的解決此問題。雙線性模型可以看作是一種泛化的點積模型,假設雙線性模型公式中 ,原式可寫為
,分別對x和q進行線性變換后計算點積,相比與點積模型,雙線性模型在計算相似度時引入了非對稱性。
加權平均:注意力分布 可以理解為在給定任務相關的查詢q時,第i個輸入向量受關注的程度。
硬性注意力
軟性注意力其選擇的信息是所有輸入信息在注意力分布下的期望。還有一種只關注到某一位置上的信息,叫做硬性注意力(Hard Attention)。
選擇最高概率的輸入信息: ,j為概率最大的輸入信息的下標,即
硬性注意力缺點是基於最大采樣或隨機采樣的方式來選擇信息。因此最終的損失函數與注意力分布之間的函數關系不可導,無法使用反向傳播算法進行訓練。為了使用反向傳播算法,一般使用軟性注意力來代替硬性注意力。
鍵值對注意力
可以用鍵值對(key-value pair)格式來表示輸入信息,其中“鍵”計算注意力分布 ,"值"用來計算聚合信息。
用 表示N個輸入信息,給定任務相關的查詢向量q時,注意力函數:
其中 為打分函數.當
時,鍵值對模式就等價於普通的注意力機制。