記錄一下自己所理解的 Attention 機制:首先先從 Encoder-Decoder 框架來宏觀角度的看 Attention 機制,再從微觀角度來看。
一、Encoder-Decoder 框架
由此可見嗦篱,生成 i 時刻要生成的單詞:
二、Soft Attention 模型(對比于 Hard 模型:one-hot 編碼的固定區(qū)域)
上圖展示的 Encoder-Decoder 框架沒有體現(xiàn)出“注意力模型”幌缝,因為在目標句子 Target 中每個單詞的生成過程如下:
其中 f 是 Decoder 的非線性變換函數(shù)灸促,可以看出,在生成目標句子的單詞時,不論生成哪個單詞腿宰,它們使用的輸入句子 Source 的語義編碼 C 都是一樣的呕诉,沒有任何區(qū)別。而語義編碼 C 是由句子 Source 的每個單詞經(jīng)過 Encoder 編碼產(chǎn)生的吃度,這意味著不論是生成哪個單詞甩挫,y1,y2還是y3,其實句子 Source 中任意單詞對生成某個目標單詞 yi 來說影響力都是相同的椿每,這是為何說這個模型沒有體現(xiàn)出注意力的緣由伊者。
真正體現(xiàn)注意力機制的框架如下:
即生成目標句子單詞的過程成了下面的形式:
而每個 Ci 可能對應著不同的源語句子單詞的注意力分配概率分布,比如對于上面的英漢翻譯來說间护,其對應的信息可能如下:
其中亦渗,f2 代表 Encoder 對輸入英文單詞的某種變換函數(shù),比如 Encoder 是 RNN 模型的話汁尺,f2 函數(shù)結(jié)果是某個時刻輸入 xi 后隱層節(jié)點的狀態(tài)值法精;g 函數(shù)一般是對構(gòu)成的元素加權(quán)求和。所以痴突,Attention 形成過程如下圖:
問題:分配的概率分布值(0.6搂蜓,0.2,0.2)如何生成的呢辽装?
以 Encoder 采用 RNN帮碰,Decoder 也采用 RNN 模型為例,則 Encoder-Decoder 框架轉(zhuǎn)換成下圖:
那么下圖很通用的表示了注意力分配概率分布值的計算過程:
物理意義:一般在自然語言處理應用里會把 Attention 模型看作是輸出 Target 句子中某個單詞和輸入 Source 句子每個單詞的對齊模型拾积。
三殉挽、Attention 機制的本質(zhì)思想
在第一個階段,可以引入不同的函數(shù)和計算機制拓巧,根據(jù)Query和某個Key_i斯碌,計算兩者的相似性或者相關性,最常見的方法包括:求兩者的向量點積玲销、求兩者的向量Cosine相似性或者通過再引入額外的神經(jīng)網(wǎng)絡來求值输拇,即如下方式:
Query, Key, Value 的定義
對于一個 Attention 機制而言,定義好 Query贤斜, Key策吠, Value 是至關重要的,這一點我個人認為是一個經(jīng)驗工程瘩绒,看的多了猴抹,自然就懂了。 我這里簡單舉閱讀理解與機器翻譯的例子:
- 對于機器翻譯而言锁荔,常見的是: Query 就是上一時刻 Decoder 的輸出Si-1 蟀给, 而Key,Value 是一樣的,指的是 Encoder 中每個單詞的上下文表示跋理。
- 對于英語高考閱讀理解而言择克, Query 可以是問題的表示,也可以是問題+選項的表示前普,而對于Key肚邢,Value而言,往往也都是一樣的拭卿,都指的是文章骡湖。而此時Attention的目的就是找出文章中與問題或問題+選項的相關片段,以此來判斷我們的問題是否為正確的選項峻厚。
由此我們可以看出响蕴, Attention 中 Query, Key惠桃, Value 的定義都是很靈活的浦夷,不同的定義可能產(chǎn)生不一樣的化學效果
四、Self-Attention
在 self-attention 中刽射,我們可以認為source = target军拟。 self-attention可以捕捉到句子里面的長依賴關系。 self-attention 是針對句子中所有詞兩兩計算誓禁,不存在距離長短這一說。
下面介紹 self-attention 的具體計算:
上圖是分別得到 查詢向量肾档、鍵向量摹恰、值向量。下圖就是全部的流程:
分以下步驟實現(xiàn):
- 獲得查詢向量怒见、鍵向量俗慈、值向量。
- 計算得分遣耍。這些分數(shù)是通過打分單詞(所有輸入句子的單詞)的鍵向量與“Thinking”的查詢向量相點積來計算的闺阱。所以如果我們是處理位置最靠前的詞的自注意力的話,第一個分數(shù)是q1和k1的點積舵变,第二個分數(shù)是q1和k2的點積酣溃。
- 第三步和第四步是將分數(shù)除以8(8是論文中使用的鍵向量的維數(shù)64的平方根,這會讓梯度更穩(wěn)定纪隙。這里也可以使用其它值赊豌,8只是默認值),然后通過softmax傳遞結(jié)果绵咱。softmax的作用是使所有單詞的分數(shù)歸一化碘饼,得到的分數(shù)都是正值且和為1。
- 將每個值向量乘以softmax分數(shù)(這是為了準備之后將它們求和)。這里的直覺是希望關注語義上相關的單詞艾恼,并弱化不相關的單詞(例如住涉,讓它們乘以0.001這樣的小數(shù))。
- 對加權(quán)值向量求和(譯注:自注意力的另一種解釋就是在編碼某個單詞時钠绍,就是將所有單詞的表示(值向量)進行加權(quán)求和秆吵,而權(quán)重是通過該詞的表示(鍵向量)與被編碼詞表示(查詢向量)的點積并通過softmax得到。)五慈,然后即得到自注意力層在該位置的輸出(在我們的例子中是對于第一個單詞)纳寂。
注意:self-attention 是針對句子內(nèi)部,所以并不是輸出整個句子的 Attention 結(jié)果泻拦,而是每個單詞的 Attention 結(jié)果毙芜,與上面介紹的 Encoder-Decoder 機制有點不一樣。簡單的說:Attention 機制發(fā)生在 Target 的元素 Query 和 Source 中的所有元素之間争拐。而 Self Attention 顧名思義腋粥,指的不是 Target 和 Source 之間的 Attention 機制,而是 Source 內(nèi)部元素之間或者 Target 內(nèi)部元素之間發(fā)生的 Attention 機制架曹,也可以理解為 Target=Source 這種特殊情況下的注意力計算機制隘冲。
五、Global attention 與 Local attention
在 soft attention陣營中绑雄,很快又劃分為兩大陣營: Glocal attention 與 Local attention展辞, 二者的區(qū)別在于關注的范圍大小不同, 其中万牺,Global attention 關注全部的文字序列罗珍,而 Local attention 關注的是固定的窗口中的所有文字序列。
比較二者脚粟, Global attention 的計算量要比 Local Attention 要大覆旱,尤其是對于長句子而言,效率變得很低核无; 而 Local Attention 只與窗口內(nèi)的文字相關扣唱,因此窗口的大小就顯得至關重要了,且在 local attention 中多了一個預測中心詞 pt团南,這有可能會忽略一些重要的詞噪沙。因此基本不考慮 Local Attention。