此文大部分參考深度學(xué)習(xí)中的注意力機(jī)制(2017版)?張俊林的博客舟肉,不過添加了一些個(gè)人的思考與理解過程焰望。在github上找到一份基于keras框架實(shí)現(xiàn)的可運(yùn)行的注意模型代碼:Attention_Network_With_Keras?(對(duì)這個(gè)模型的詳細(xì)理解可參考:《注意力模型的一個(gè)實(shí)例代碼的實(shí)現(xiàn)與分析》)
注意力模型:對(duì)目標(biāo)數(shù)據(jù)進(jìn)行加權(quán)變化囤踩。人腦的注意力模型蔬捷,說到底是一種資源分配模型,在某個(gè)特定時(shí)刻价捧,你的注意力總是集中在畫面中的某個(gè)焦點(diǎn)部分领炫,而對(duì)其它部分視而不見串述。 ? ? ------(思考:為什么要集中在那個(gè)部分,是因?yàn)槟莻€(gè)部分能解決問題嗎鼎俘?)
1.什么是Attention機(jī)制哲身?
當(dāng)我們?nèi)嗽诳匆粯訓(xùn)|西的時(shí)候,我們當(dāng)前時(shí)刻關(guān)注的一定是我們當(dāng)前正在看的這樣?xùn)|西的某一地方贸伐,換句話說勘天,當(dāng)我們目光移到別處時(shí),注意力隨著目光的移動(dòng)也在轉(zhuǎn)移捉邢,這意味著脯丝,當(dāng)人們注意到某個(gè)目標(biāo)或某個(gè)場(chǎng)景時(shí),該目標(biāo)內(nèi)部以及該場(chǎng)景內(nèi)每一處空間位置上的注意力分布是不一樣的伏伐。---------(思考:對(duì)于圖片宠进,會(huì)有些特別顯眼的場(chǎng)景會(huì)率先吸引住注意力,那是因?yàn)槟X袋中對(duì)這類東西很敏感藐翎。對(duì)于文本材蹬,我們大都是帶目的性的去讀实幕,順序查找,順序讀堤器,但是在理解的過程中昆庇,我們是根據(jù)我們自帶的目的去理解,去關(guān)注的吼旧。 ?注意力模型應(yīng)該與具體的目的(或者任務(wù))相結(jié)合凰锡。)
從Attention的作用角度出發(fā),我們就可以從兩個(gè)角度來分類Attention種類:Spatial Attention空間注意力和Temporal Attention時(shí)間注意力圈暗。更具實(shí)際的應(yīng)用员串,也可以將Attention分為Soft Attention和Hard Attention。Soft?Attention是所有的數(shù)據(jù)都會(huì)注意寸齐,都會(huì)計(jì)算出相應(yīng)的注意力權(quán)值欲诺,不會(huì)設(shè)置篩選條件渺鹦。Hard?Attention會(huì)在生成注意力權(quán)重后篩選掉一部分不符合條件的注意力,讓它的注意力權(quán)值為0毅厚,即可以理解為不再注意這些不符合條件的部分塞颁。
2.先了解編碼-解碼框架:Encoder-Decoder框架
目前絕大多數(shù)文獻(xiàn)中出現(xiàn)的AM模型是附著在Encoder-Decoder框架下的,當(dāng)然祠锣,其實(shí)AM模型可以看作一種通用的思想咽安,本身并不依賴于Encoder-Decoder模型,這點(diǎn)需要注意澡腾。Encoder-Decoder框架可以看作是一種文本處理領(lǐng)域的研究模式糕珊,應(yīng)用場(chǎng)景異常廣泛放接,本身就值得細(xì)談。
Encoder-Decoder框架可以這么直觀地去理解:可以把它看作適合處理由一個(gè)句子(或篇章)生成另外一個(gè)句子(或篇章)的通用處理模型玛瘸。對(duì)于句子對(duì)<X,Y>糊渊。 ?--------(思考:<X,Y>對(duì)很通用,X是一個(gè)問句贺喝,Y是答案躏鱼;X是一個(gè)句子,Y是抽取的關(guān)系三元組染苛;X是漢語句子茶行,Y是漢語句子的英文翻譯登钥。等等)牧牢,我們的目標(biāo)是給定輸入句子X,期待通過Encoder-Decoder框架來生成目標(biāo)句子Y度陆。X和Y可以是同一種語言献幔,也可以是兩種不同的語言蜡感。而X和Y分別由各自的單詞序列構(gòu)成:
Encoder顧名思義就是對(duì)輸入句子X進(jìn)行編碼郑兴,將輸入句子通過非線性變換轉(zhuǎn)化為中間語義表示C:
對(duì)于解碼器Decoder來說情连,其任務(wù)是根據(jù)句子X的中間語義表示C和之前已經(jīng)生成的歷史信息y1,y2….yi-1來生成i時(shí)刻要生成的單詞yi :
每個(gè)yi都依次這么產(chǎn)生却舀,那么看起來就是整個(gè)系統(tǒng)根據(jù)輸入句子X生成了目標(biāo)句子Y。 ?------(思考:其實(shí)這里的Encoder-Decoder是一個(gè)序列到序列的模型seq2seq辆脸,這個(gè)模型是對(duì)順序有依賴的螃诅。)
Encoder-Decoder是個(gè)非常通用的計(jì)算框架术裸,至于Encoder和Decoder具體使用什么模型都是由研究者自己定的穗椅,常見的比如CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,這里的變化組合非常多门坷。 ? ? ------(思考:人的學(xué)習(xí)過程包括輸入袍镀、輸出苇羡、外界評(píng)價(jià)。Encoder模型類似于人的輸入學(xué)習(xí)過程锦茁,Decoder模型類似于人的輸出學(xué)習(xí)過程码俩,對(duì)輸出的內(nèi)容進(jìn)行評(píng)價(jià)就類似于損失函數(shù)歼捏。英語老師給我上了幾堂英語課瞳秽,我在不斷的輸入Encoder;突然有一個(gè)隨堂測(cè)試袖迎,我得做題輸出Decoder;最后英語老師改卷子浴韭,給我一個(gè)分?jǐn)?shù)念颈,不對(duì)的地方我得反思調(diào)整我對(duì)輸入數(shù)據(jù)的加工方式连霉。)-------(再思考:關(guān)于英語翻譯跺撼。課本上的單詞和課文是原始數(shù)據(jù)輸入,相當(dāng)于X柿祈;我在大腦里加工這些數(shù)據(jù)躏嚎,相當(dāng)于Encoder模型菩貌,我的腦子里有很多加工后的數(shù)據(jù)箭阶,相當(dāng)于C;現(xiàn)在要讓我翻譯一個(gè)英語句子嘹叫,這個(gè)任務(wù)相當(dāng)于Y罩扇,我不能翻課本抓谴,所以我只能借助我腦袋里加工的數(shù)據(jù)C去翻譯這個(gè)句子癌压,即我得動(dòng)腦子滩届,相當(dāng)于Decoder。 ? ? ? 學(xué)習(xí)的過程是什么都要學(xué)棠枉,要分類整理辈讶,要增加線索娄猫,并不知道未來的某天能用到什么媳溺,所以Encoder-Decoder是一個(gè)泛泛學(xué)習(xí)的框架)
3.Attention Model
以上介紹的Encoder-Decoder模型是沒有體現(xiàn)出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型扯躺。為什么說它注意力不集中呢录语?請(qǐng)觀察下目標(biāo)句子Y中每個(gè)單詞的生成過程如下:
其中f是decoder的非線性變換函數(shù)钦无。從這里可以看出盖袭,在生成目標(biāo)句子的單詞時(shí)鳄虱,不論生成哪個(gè)單詞拙已,是y1,y2也好,還是y3也好系宫,他們使用的句子X的語義編碼C都是一樣的扩借,沒有任何區(qū)別缤至。而語義編碼C是由句子X的每個(gè)單詞經(jīng)過Encoder 編碼產(chǎn)生的,這意味著不論是生成哪個(gè)單詞沃暗,y1,y2還是y3何恶,其實(shí)句子X中任意單詞對(duì)生成某個(gè)目標(biāo)單詞yi來說影響力都是相同的细层,沒有任何區(qū)別(其實(shí)如果Encoder是RNN的話今艺,理論上越是后輸入的單詞影響越大,并非等權(quán)的撵彻,估計(jì)這也是為何Google提出Sequence to Sequence模型時(shí)發(fā)現(xiàn)把輸入句子逆序輸入做翻譯效果會(huì)更好的小Trick的原因)陌僵。這就是為何說這個(gè)模型沒有體現(xiàn)出注意力的緣由碗短。
引入AM模型题涨,以翻譯一個(gè)英語句子舉例:輸入X:Tom chase Jerry纲堵。 ? 理想輸出:湯姆追逐杰瑞席函。
應(yīng)該在翻譯“杰瑞”的時(shí)候,體現(xiàn)出英文單詞對(duì)于翻譯當(dāng)前中文單詞不同的影響程度正蛙,比如給出類似下面一個(gè)概率分布值:
(Tom,0.3)(Chase,0.2)(Jerry,0.5)
每個(gè)英文單詞的概率代表了翻譯當(dāng)前單詞“杰瑞”時(shí)乒验,注意力分配模型分配給不同英文單詞的注意力大小溶推。這對(duì)于正確翻譯目標(biāo)語單詞肯定是有幫助的蒜危,因?yàn)橐肓诵碌男畔⒎蕖M硐煳繕?biāo)句子中的每個(gè)單詞都應(yīng)該學(xué)會(huì)其對(duì)應(yīng)的源語句子中單詞的注意力分配概率信息。這意味著在生成每個(gè)單詞Yi的時(shí)候夹囚,原先都是相同的中間語義表示C會(huì)替換成根據(jù)當(dāng)前生成單詞而不斷變化的Ci荸哟。理解AM模型的關(guān)鍵就是這里鞍历,即由固定的中間語義表示C換成了根據(jù)當(dāng)前輸出單詞來調(diào)整成加入注意力模型的變化的Ci肪虎。
即生成目標(biāo)句子單詞的過程成了下面的形式:
而每個(gè)Ci可能對(duì)應(yīng)著不同的源語句子單詞的注意力分配概率分布刑枝,比如對(duì)于上面的英漢翻譯來說迅腔,其對(duì)應(yīng)的信息可能如下:
其中洁灵,f2函數(shù)代表Encoder對(duì)輸入英文單詞的某種變換函數(shù)掺出,比如如果Encoder是用的RNN模型的話汤锨,這個(gè)f2函數(shù)的結(jié)果往往是某個(gè)時(shí)刻輸入xi后隱層節(jié)點(diǎn)的狀態(tài)值闲礼;g代表Encoder根據(jù)單詞的中間表示合成整個(gè)句子中間語義表示的變換函數(shù)铐维,一般的做法中嫁蛇,g函數(shù)就是對(duì)構(gòu)成元素加權(quán)求和睬棚,也就是常常在論文里看到的下列公式:
假設(shè)Ci中那個(gè)i就是上面的“湯姆”抑党,那么Tx就是3底靠,代表輸入句子的長(zhǎng)度特铝,h1=f(“Tom”)苟呐,h2=f(“Chase”),h3=f(“Jerry”)牵素,對(duì)應(yīng)的注意力模型權(quán)值分別是0.6,0.2,0.2,所以g函數(shù)就是個(gè)加權(quán)求和函數(shù)请琳。如果形象表示的話俄精,翻譯中文單詞“湯姆”的時(shí)候竖慧,數(shù)學(xué)公式對(duì)應(yīng)的中間語義表示Ci的形成過程類似下圖:
這里還有一個(gè)問題:生成目標(biāo)句子某個(gè)單詞圾旨,比如“湯姆”的時(shí)候砍的,你怎么知道AM模型所需要的輸入句子單詞注意力分配概率分布值呢廓鞠?就是說“湯姆”對(duì)應(yīng)的概率分布:
劃重點(diǎn)(注意力權(quán)重獲取的過程)(Tom,0.3)(Chase,0.2)(Jerry,0.5)是如何得到的呢?
為了便于說明滋早,我們假設(shè)對(duì)圖1的非AM模型的Encoder-Decoder框架進(jìn)行細(xì)化馆衔,Encoder采用RNN模型怨绣,Decoder也采用RNN模型篮撑,這是比較常見的一種模型配置赢笨,則圖1的圖轉(zhuǎn)換為下圖:
注意力分配概率分布值的通用計(jì)算過程:
對(duì)于采用RNN的Decoder來說,如果要生成yi單詞左冬,在時(shí)刻i拇砰,我們是可以知道在生成Yi之前的隱層節(jié)點(diǎn)i時(shí)刻的輸出值Hi的除破,而我們的目的是要計(jì)算生成Yi時(shí)的輸入句子單詞“Tom”瑰枫、“Chase”光坝、“Jerry”對(duì)Yi來說的注意力分配概率分布,那么可以用i時(shí)刻的隱層節(jié)點(diǎn)狀態(tài)Hi去一一和輸入句子中每個(gè)單詞對(duì)應(yīng)的RNN隱層節(jié)點(diǎn)狀態(tài)hj進(jìn)行對(duì)比逊谋,即通過函數(shù)F(hj,Hi)來獲得目標(biāo)單詞Yi和每個(gè)輸入單詞對(duì)應(yīng)的對(duì)齊可能性胶滋,這個(gè)F函數(shù)在不同論文里可能會(huì)采取不同的方法究恤,然后函數(shù)F的輸出經(jīng)過Softmax進(jìn)行歸一化就得到了符合概率分布取值區(qū)間的注意力分配概率分布數(shù)值(這就得到了注意力權(quán)重)部宿。圖5顯示的是當(dāng)輸出單詞為“湯姆”時(shí)刻對(duì)應(yīng)的輸入句子單詞的對(duì)齊概率理张。絕大多數(shù)AM模型都是采取上述的計(jì)算框架來計(jì)算注意力分配概率分布信息雾叭,區(qū)別只是在F的定義上可能有所不同。
上述內(nèi)容就是論文里面常常提到的Soft Attention Model(任何數(shù)據(jù)都會(huì)給一個(gè)權(quán)值暂幼,沒有篩選條件)的基本思想旺嬉,你能在文獻(xiàn)里面看到的大多數(shù)AM模型基本就是這個(gè)模型邪媳,區(qū)別很可能只是把這個(gè)模型用來解決不同的應(yīng)用問題揽咕。那么怎么理解AM模型的物理含義呢亲善?一般文獻(xiàn)里會(huì)把AM模型看作是單詞對(duì)齊模型蛹头,這是非常有道理的渣蜗。目標(biāo)句子生成的每個(gè)單詞對(duì)應(yīng)輸入句子單詞的概率分布可以理解為輸入句子單詞和這個(gè)目標(biāo)生成單詞的對(duì)齊概率耕拷,這在機(jī)器翻譯語境下是非常直觀的:傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯一般在做的過程中會(huì)專門有一個(gè)短語對(duì)齊的步驟讼昆,而注意力模型其實(shí)起的是相同的作用。在其他應(yīng)用里面把AM模型理解成輸入句子和目標(biāo)句子單詞之間的對(duì)齊概率也是很順暢的想法骚烧。
當(dāng)然浸赫,從概念上理解的話闰围,把AM模型理解成影響力模型也是合理的,就是說生成目標(biāo)單詞的時(shí)候既峡,輸入句子每個(gè)單詞對(duì)于生成這個(gè)單詞有多大的影響程度羡榴。這種想法也是比較好理解AM模型物理意義的一種思維方式。
圖6是論文“A Neural Attention Model for Sentence Summarization”中运敢,Rush用AM模型來做生成式摘要給出的一個(gè)AM的一個(gè)非常直觀的例子。
這個(gè)例子中传惠,Encoder-Decoder框架的輸入句子X是:“russian defense minister ivanov called sunday for the creation of a joint front for combating global terrorism”迄沫。對(duì)應(yīng)圖中縱坐標(biāo)的句子。系統(tǒng)生成的摘要句子Y是:“russia calls for joint front against terrorism”涉枫,對(duì)應(yīng)圖中橫坐標(biāo)的句子邢滑「可以看出模型已經(jīng)把句子主體部分正確地抽出來了愿汰。矩陣中每一列代表生成的目標(biāo)單詞對(duì)應(yīng)輸入句子每個(gè)單詞的AM分配概率,顏色越深代表分配到的概率越大乐纸。這個(gè)例子對(duì)于直觀理解AM是很有幫助作用衬廷。?
《A Neural Attention Model for Sentence Summarization》論文提供的實(shí)驗(yàn)數(shù)據(jù)集鏈接(開放可用):DUC 2004?
《A Neural Attention Model for Sentence Summarization》論文沒有提供源碼,但提到了一個(gè)可用工具:Torch?
參考文章:
【1】自然語言處理中的Attention Model:是什么及為什么? ? ?寫得非常好
【2】深度學(xué)習(xí)中的注意力機(jī)制(2017版)? ?寫得非常好