什么是Attention機制
Attention機制通俗的講就是把注意力集中放在重要的點上,而忽略其他不重要的因素。其中重要程度的判斷取決於應用場景,拿個現實生活中的例子,比如1000個人眼中有1000個哈姆雷特。根據應用場景的不同,Attention分為空間注意力和時間注意力,前者用於圖像處理,后者用於自然語言處理。本文主要介紹Attention機制在Seq2seq中的應用。
為什么要用Attention機制
我們知道在Seq2seq模型中,原始編解碼模型的encode過程會生成一個中間向量C,用於保存原序列的語義信息。但是這個向量長度是固定的,當輸入原序列的長度比較長時,向量C無法保存全部的語義信息,上下文語義信息受到了限制,這也限制了模型的理解能力。所以使用Attention機制來打破這種原始編解碼模型對固定向量的限制。
Attention原理
Attention的原理就是計算當前輸入序列與輸出向量的匹配程度,匹配度高也就是注意力集中點其相對的得分越高,其中Attention計算得到的匹配度權重,只限於當前序列對,不是像網絡模型權重這樣的整體權重。
算法過程:
1)encode對輸入序列編碼得到最后一個時間步的狀態c,和每個時間步的輸出h,其中c又作為decode的初始狀態z0。
2)對於每個時間步的輸出h與z0做匹配也就是match操作,得到每個時間步的匹配向量α01,如圖1。

3)對所有時間步的輸出h與z0的匹配度α0,使用softmax做歸一化處理,得到各個時間步對於z0的匹配分數。
4)求各個時間步的輸出h與匹配分數的加權求和得到c0,作為decode的下一個時間步的輸入,如圖2。

5)計算各個時間步的輸出h與z1的匹配度得到c1作為decode下一個時間步的輸入,如此一步一步重復下去,如圖3。

這樣就可以把每個時間步重要的信息傳給decode中,以上就是Attention機制的處理過程。其中match操作一般是求兩個向量的相似度,通常有如下方法:
1)余弦相似度
2)一個簡單的 神經網絡,輸入為hh和ww,輸出為α
3)或者矩陣變換α=hTWzα=hTWz (Multiplicative attention,Luong et al., 2015)
在tensorflow1.0版本以后的api seq2seq庫中,包含了兩種Attention算法,他們的區別就是match操作的不同,因此也有人稱他們為加法Attention和乘法Attention,具體內容下:
1)BahdanauAttention:論文https://arxiv.org/abs/1409.0473中的實現:

2)LuongAttention:論文https://arxiv.org/abs/1508.04025中的實現 :

由於圖片來自不同地方,所以符號有些不同,圖4和圖5中的h是上文所說的每個時間步的輸出向量,d是decode中每個時間步的狀態,也就是上文中的z,c是match后計算的權值加和后的向量用於decode中每個時間步的輸入,a就是match操作中經過softmax后的匹配權重,v是一個向量,相當於w一樣的權重需要去學習。有上面兩個公式可以看出,BahdanauAttention和LuongAttention的區別就是在match過程中的計算方式不同,一個是將decode的狀態與encode的輸出求和,一個是求乘,所以才有了加法Attention和乘法Attention的叫法。
待更新。。
參考: