什么是Attention機制
Attention機制通俗的講就是把注意力集中放在重要的點上,而忽略其他不重要的因素星立。其中重要程度的判斷取決于應(yīng)用場景萄喳,拿個現(xiàn)實生活中的例子,比如1000個人眼中有1000個哈姆雷特蟆淀。根據(jù)應(yīng)用場景的不同,Attention分為空間注意力和時間注意力澡匪,前者用于圖像處理熔任,后者用于自然語言處理。本文主要介紹Attention機制在Seq2seq中的應(yīng)用唁情。
為什么要用Attention機制
我們知道在Seq2seq模型中疑苔,原始編解碼模型的encode過程會生成一個中間向量C,用于保存原序列的語義信息甸鸟。但是這個向量長度是固定的惦费,當輸入原序列的長度比較長時兵迅,向量C無法保存全部的語義信息,上下文語義信息受到了限制薪贫,這也限制了模型的理解能力恍箭。所以使用Attention機制來打破這種原始編解碼模型對固定向量的限制。
Attention原理
Attention的原理就是計算當前輸入序列與輸出向量的匹配程度后雷,匹配度高也就是注意力集中點其相對的得分越高季惯。其中Attention計算得到的匹配度權(quán)重吠各,只限于當前序列對臀突,不是像網(wǎng)絡(luò)模型權(quán)重這樣的整體權(quán)重。
算法過程:
1)encode對輸入序列編碼得到最后一個時間步的狀態(tài)c贾漏,和每個時間步的輸出h候学,其中c又作為decode的初始狀態(tài)z0。
2)對于每個時間步的輸出h與z0做匹配也就是match操作纵散,得到每個時間步的匹配向量α01梳码,如圖1。
3)對所有時間步的輸出h與z0的匹配度α0伍掀,使用softmax做歸一化處理掰茶,得到各個時間步對于z0的匹配分數(shù)。
4)求各個時間步的輸出h與匹配分數(shù)的加權(quán)求和得到c0蜜笤,作為decode的下一個時間步的輸入濒蒋,如圖2。
5)計算各個時間步的輸出h與z1的匹配度得到c1作為decode下一個時間步的輸入把兔,如此一步一步重復(fù)下去沪伙,如圖3。
這樣就可以把每個時間步重要的信息傳給decode中县好,以上就是Attention機制的處理過程围橡。其中match操作一般是求兩個向量的相似度,通常有如下方法:
1)余弦相似度
2)一個簡單的 神經(jīng)網(wǎng)絡(luò)缕贡,輸入為hh和ww翁授,輸出為α
3)或者矩陣變換α=hTWzα=hTWz?(Multiplicative attention,Luong et al., 2015)?
在tensorflow1.0版本以后的api seq2seq庫中晾咪,包含了兩種Attention算法收擦,他們的區(qū)別就是match操作的不同,因此也有人稱他們?yōu)榧臃ˋttention和乘法Attention禀酱,具體內(nèi)容下:
1)BahdanauAttention:論文https://arxiv.org/abs/1409.0473中的實現(xiàn):
2)LuongAttention:論文https://arxiv.org/abs/1508.04025中的實現(xiàn) :
由于圖片來自不同地方炬守,所以符號有些不同,圖4和圖5中的h是上文所說的每個時間步的輸出向量剂跟,d是decode中每個時間步的狀態(tài)减途,也就是上文中的z酣藻,c是match后計算的權(quán)值加和后的向量用于decode中每個時間步的輸入,a就是match操作中經(jīng)過softmax后的匹配權(quán)重鳍置,v是一個向量辽剧,相當于w一樣的權(quán)重需要去學(xué)習(xí)。有上面兩個公式可以看出税产,BahdanauAttention和LuongAttention的區(qū)別就是在match過程中的計算方式不同怕轿,一個是將decode的狀態(tài)與encode的輸出求和,一個是求乘辟拷,所以才有了加法Attention和乘法Attention的叫法撞羽。
------------------------------------------------------------------更新---------------------------------------------------------------------
最近一段時間的學(xué)習(xí),發(fā)現(xiàn)Attention的各種形式與用法,但是歸根結(jié)底,都是同一種形式---Google的一般化Attention.
其中Q是query,K和V是一一對應(yīng)的,相當于Key-Value的關(guān)系.一般情況下都會說求誰對誰的Attention,比如上面提到的Seq2seq中,decoder的隱狀態(tài)z對encoder輸出h的attention,那么隱狀態(tài)z就相當于該式中的query,encoder的輸出h就是key和value(這里key和value相等,也有不等的情況).所以如果說A對B的attention,那么A就是query,B就是key-value(key-value怎么分配看實際情況).這樣,上文提到的內(nèi)容就可以很容易的代入到一般會Attention中.先用query(decoder隱藏狀態(tài)z)和key(encoder輸出h)做點乘然后歸一化,使用softmax計算權(quán)重得分,再與value(encoder輸出h)相乘得到最后的向量.(attention的機制像極了key-value記憶網(wǎng)絡(luò)的原理, 或者更準確的說是key-value記憶網(wǎng)絡(luò)像極了attention的機制,使用query與key做匹配運算,求得相關(guān)度得分,然后使用該得分與value運算,得到最后的向量).
特別注意的是,如果Q,K,V的值都是一個的話,那么就稱為Self Attention.
參考: