1. 程式人生 > >Attention

Attention

aaa str bubuko 圖片 註意 cnn 來看 展開 self

摘自https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247486960&idx=1&sn=1b4b9d7ec7a9f40fa8a9df6b6f53bbfb&chksm=96e9d270a19e5b668875392da1d1aaa28ffd0af17d44f7ee81c2754c78cc35edf2e35be2c6a1&scene=21#wechat_redirect

一、Attention定義:

Attention 也是一個編碼序列的方案,因此我們也可以認為它跟 RNN、CNN 一樣,都是一個序列編碼的層。下圖是attention一般化的框架形式的描述。

技術分享圖片

公式定義:

技術分享圖片

技術分享圖片

如果忽略激活函數 softmax 的話,那麽事實上它就是三個 n×dk,dk×m,m×dv 的矩陣相乘,最後的結果就是一個 n×dv 的矩陣。softmax作用是歸一化。

於是我們可以認為:這是一個 Attention 層,將 n×dk 的序列 Q 編碼成了一個新的 n×dv 的序列

更具體一點:(即展開上面式子,逐個向量來看)

技術分享圖片

其中 Z 是歸一化因子。事實上 q,k,v 分別是 query,key,value 的簡寫,K,V 是一一對應的,它們就像是 key-value 的關系,那麽上式的意思就是通過 qt 這個 query,通過與各個 ks 內積的並 softmax 的方式,來得到 qt 與各個 vs 的相似度,然後加權求和,得到一個 dv 維的向量。

其中因子根號dk起到調節作用,使得內積不至於太大(太大的話 softmax 後就非 0 即 1 了,不夠“soft”了)。

二、自註意力:

所謂 Self Attention,其實就是 Attention(X,X,X),X 就是前面說的輸入序列。也就是說,在序列內部做 Attention,尋找序列內部的聯系。

Attention