03-注意力機(jī)制-attention機(jī)制(基于循環(huán)神經(jīng)網(wǎng)絡(luò)RNN)

作者:張俊林

鏈接:https://www.zhihu.com/question/68482809/answer/264632289

來(lái)源:知乎

通過(guò)學(xué)習(xí)知乎大神張俊林的文章,學(xué)習(xí)了解現(xiàn)在注意力機(jī)制主要的發(fā)展路徑及目前的主流方法。

注意力模型:對(duì)目標(biāo)數(shù)據(jù)進(jìn)行加權(quán)變化。人腦的注意力模型,說(shuō)到底是一種資源分配模型,在某個(gè)特定時(shí)刻,你的注意力總是集中在畫面中的某個(gè)焦點(diǎn)部分,而對(duì)其它部分視而不見(jiàn)。 ? ? ------(思考:為什么要集中在那個(gè)部分,是因?yàn)槟莻€(gè)部分能解決問(wèn)題嗎?)


引言

在機(jī)器翻譯(Machine Translation)或者自然語(yǔ)言處理(Natural Language Processing)領(lǐng)域,以前都是使用數(shù)理統(tǒng)計(jì)的方法來(lái)進(jìn)行分析和處理。近些年來(lái),隨著AlphaGo的興起,除了在游戲AI領(lǐng)域,深度學(xué)習(xí)在計(jì)算機(jī)視覺(jué)領(lǐng)域,機(jī)器翻譯和自然語(yǔ)言處理領(lǐng)域也有著巨大的用武之地。在2016年,隨著深度學(xué)習(xí)的進(jìn)一步發(fā)展,seq2seq的訓(xùn)練模式和翻譯模式已經(jīng)開(kāi)始進(jìn)入人們的視野。除此之外,在端到端的訓(xùn)練方法中,除了需要海量的業(yè)務(wù)數(shù)據(jù)之外,在網(wǎng)絡(luò)結(jié)構(gòu)中加入一些重要的模塊也是非常必要的。

注意力模型最近幾年在深度學(xué)習(xí)各個(gè)領(lǐng)域被廣泛使用,無(wú)論是圖像處理、語(yǔ)音識(shí)別還是自然語(yǔ)言處理的各種不同類型的任務(wù)中,都很容易遇到注意力模型的身影。所以,了解注意力機(jī)制的工作原理對(duì)于關(guān)注深度學(xué)習(xí)技術(shù)發(fā)展的技術(shù)人員來(lái)說(shuō)有很大的必要。

(思考:為什么要集中在那個(gè)部分,是因?yàn)槟莻€(gè)部分能解決問(wèn)題嗎?)


人類的視覺(jué)注意力

從注意力模型的命名方式看,很明顯其借鑒了人類的注意力機(jī)制,因此,我們首先簡(jiǎn)單介紹人類視覺(jué)的選擇性注意力機(jī)制。


圖1 人類的視覺(jué)注意力

視覺(jué)注意力機(jī)制是人類視覺(jué)所特有的大腦信號(hào)處理機(jī)制。人類視覺(jué)通過(guò)快速掃描全局圖像,獲得需要重點(diǎn)關(guān)注的目標(biāo)區(qū)域,也就是一般所說(shuō)的注意力焦點(diǎn),而后對(duì)這一區(qū)域投入更多注意力資源,以獲取更多所需要關(guān)注目標(biāo)的細(xì)節(jié)信息,而抑制其他無(wú)用信息。(思考:對(duì)于圖片,會(huì)有些特別顯眼的場(chǎng)景會(huì)率先吸引住注意力,那是因?yàn)槟X袋中對(duì)這類東西很敏感。對(duì)于文本,我們大都是帶目的性的去讀,順序查找,順序讀,但是在理解的過(guò)程中,我們是根據(jù)我們自帶的目的去理解,去關(guān)注的。 ?注意力模型應(yīng)該與具體的目的(或者任務(wù))相結(jié)合。)

這是人類利用有限的注意力資源從大量信息中快速篩選出高價(jià)值信息的手段,是人類在長(zhǎng)期進(jìn)化中形成的一種生存機(jī)制,人類視覺(jué)注意力機(jī)制極大地提高了視覺(jué)信息處理的效率與準(zhǔn)確性。

圖1形象化展示了人類在看到一副圖像時(shí)是如何高效分配有限的注意力資源的,其中紅色區(qū)域表明視覺(jué)系統(tǒng)更關(guān)注的目標(biāo),很明顯對(duì)于圖1所示的場(chǎng)景,人們會(huì)把注意力更多投入到人的臉部,文本的標(biāo)題以及文章首句等位置。

深度學(xué)習(xí)中的注意力機(jī)制從本質(zhì)上講和人類的選擇性視覺(jué)注意力機(jī)制類似,核心目標(biāo)也是從眾多信息中選擇出對(duì)當(dāng)前任務(wù)目標(biāo)更關(guān)鍵的信息。

從Attention的作用角度出發(fā),我們就可以從兩個(gè)角度來(lái)分類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,即可以理解為不再注意這些不符合條件的部分。

Encoder-Decoder框架

要了解深度學(xué)習(xí)中的注意力模型,就不得不先談Encoder-Decoder框架,因?yàn)槟壳?b>大多數(shù)注意力模型附著在Encoder-Decoder框架下,當(dāng)然,其實(shí)注意力模型可以看作一種通用的思想,本身并不依賴于特定框架,這點(diǎn)需要注意。

Encoder-Decoder框架可以看作是一種深度學(xué)習(xí)領(lǐng)域的研究模式,應(yīng)用場(chǎng)景異常廣泛。圖2是文本處理領(lǐng)域里常用的Encoder-Decoder框架最抽象的一種表示。

?? ? ? ? 圖2 抽象的文本處理領(lǐng)域的Encoder-Decoder框架??

文本處理領(lǐng)域的Encoder-Decoder框架可以這么直觀地去理解:可以把它看作適合處理由一個(gè)句子(或篇章)生成另外一個(gè)句子(或篇章)的通用處理模型。

對(duì)于句子對(duì)<Source,Target>,我們的目標(biāo)是給定輸入句子Source,期待通過(guò)Encoder-Decoder框架來(lái)生成目標(biāo)句子Target。Source和Target可以是同一種語(yǔ)言,也可以是兩種不同的語(yǔ)言。(思考:<X,Y>對(duì)很通用,X是一個(gè)問(wèn)句,Y是答案;X是一個(gè)句子,Y是抽取的關(guān)系三元組;X是漢語(yǔ)句子,Y是漢語(yǔ)句子的英文翻譯。等等)。而Source和Target分別由各自的單詞序列構(gòu)成

Encoder顧名思義就是對(duì)輸入句子Source進(jìn)行編碼,將輸入句子通過(guò)非線性變換轉(zhuǎn)化為中間語(yǔ)義表示C

對(duì)于解碼器Decoder來(lái)說(shuō),其任務(wù)是根據(jù)句子Source的中間語(yǔ)義表示C和之前已經(jīng)生成的歷史信息y1,y2….yi-1來(lái)生成i時(shí)刻要生成的單詞yi:

每個(gè)yi都依次這么產(chǎn)生,那么看起來(lái)就是整個(gè)系統(tǒng)根據(jù)輸入句子Source生成了目標(biāo)句子Target。(思考:其實(shí)這里的Encoder-Decoder是一個(gè)序列到序列的模型seq2seq,這個(gè)模型是對(duì)順序有依賴的。)

如果Source是中文句子,Target是英文句子,那么這就是解決機(jī)器翻譯問(wèn)題的Encoder-Decoder框架;

如果Source是一篇文章Target是概括性的幾句描述語(yǔ)句,那么這是文本摘要的Encoder-Decoder框架;

如果Source是一句問(wèn)句Target是一句回答,那么這是問(wèn)答系統(tǒng)或者對(duì)話機(jī)器人的Encoder-Decoder框架。由此可見(jiàn),在文本處理領(lǐng)域,Encoder-Decoder的應(yīng)用領(lǐng)域相當(dāng)廣泛。

Encoder-Decoder框架不僅僅在文本領(lǐng)域廣泛使用,在語(yǔ)音識(shí)別、圖像處理等領(lǐng)域也經(jīng)常使用。比如對(duì)于語(yǔ)音識(shí)別來(lái)說(shuō),圖2所示的框架完全適用,區(qū)別無(wú)非是Encoder部分的輸入是語(yǔ)音流,輸出是對(duì)應(yīng)的文本信息;而對(duì)于“圖像描述”任務(wù)來(lái)說(shuō),Encoder部分的輸入是一副圖片,Decoder的輸出是能夠描述圖片語(yǔ)義內(nèi)容的一句描述語(yǔ)。一般而言,文本處理和語(yǔ)音識(shí)別的Encoder部分通常采用RNN模型,圖像處理的Encoder部分一般采用CNN模型

Encoder-Decoder是個(gè)非常通用的計(jì)算框架,至于Encoder和Decoder具體使用什么模型都是由研究者自己定的,常見(jiàn)的比如CNN/RNN/BiRNN/GRU/LSTM/Deep LSTM等,這里的變化組合非常多。 ? ? ------(思考:人的學(xué)習(xí)過(guò)程包括輸入、輸出、外界評(píng)價(jià)。Encoder模型類似于人的輸入學(xué)習(xí)過(guò)程,Decoder模型類似于人的輸出學(xué)習(xí)過(guò)程,對(duì)輸出的內(nèi)容進(jìn)行評(píng)價(jià)就類似于損失函數(shù)。英語(yǔ)老師給我上了幾堂英語(yǔ)課,我在不斷的輸入Encoder;突然有一個(gè)隨堂測(cè)試,我得做題輸出Decoder;最后英語(yǔ)老師改卷子,給我一個(gè)分?jǐn)?shù),不對(duì)的地方我得反思調(diào)整我對(duì)輸入數(shù)據(jù)的加工方式。)-------(再思考:關(guān)于英語(yǔ)翻譯。課本上的單詞和課文是原始數(shù)據(jù)輸入,相當(dāng)于X;我在大腦里加工這些數(shù)據(jù),相當(dāng)于Encoder模型,我的腦子里有很多加工后的數(shù)據(jù),相當(dāng)于C;現(xiàn)在要讓我翻譯一個(gè)英語(yǔ)句子,這個(gè)任務(wù)相當(dāng)于Y,我不能翻課本,所以我只能借助我腦袋里加工的數(shù)據(jù)C去翻譯這個(gè)句子,即我得動(dòng)腦子,相當(dāng)于Decoder。 ? ? ? 學(xué)習(xí)的過(guò)程是什么都要學(xué),要分類整理,要增加線索,并不知道未來(lái)的某天能用到什么,所以Encoder-Decoder是一個(gè)泛泛學(xué)習(xí)的框架)

Attention模型

本節(jié)先以機(jī)器翻譯作為例子講解最常見(jiàn)的Soft Attention模型的基本原理,之后拋離Encoder-Decoder框架抽象出了注意力機(jī)制的本質(zhì)思想,然后簡(jiǎn)單介紹最近廣為使用的Self Attention的基本思路。

Soft Attention模型

圖2中展示的Encoder-Decoder框架是沒(méi)有體現(xiàn)出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型。為什么說(shuō)它注意力不集中呢?請(qǐng)觀察下目標(biāo)句子Target中每個(gè)單詞的生成過(guò)程如下:

其中f是Decoder的非線性變換函數(shù)。從這里可以看出,在生成目標(biāo)句子的單詞時(shí),不論生成哪個(gè)單詞,它們使用的輸入句子Source的語(yǔ)義編碼C都是一樣的,沒(méi)有任何區(qū)別。

而語(yǔ)義編碼C是由句子Source的每個(gè)單詞經(jīng)過(guò)Encoder 編碼產(chǎn)生的,這意味著不論是生成哪個(gè)單詞,y1,y2還是y3,其實(shí)句子Source中任意單詞對(duì)生成某個(gè)目標(biāo)單詞yi來(lái)說(shuō)影響力都是相同的(其實(shí)如果Encoder是RNN的話,理論上越是后輸入的單詞影響越大,并非等權(quán)的,估計(jì)這也是為何Google提出Sequence to Sequence模型時(shí)發(fā)現(xiàn)把輸入句子逆序輸入做翻譯效果會(huì)更好的小Trick的原因)。這是為何說(shuō)這個(gè)模型沒(méi)有體現(xiàn)出注意力的緣由。這類似于人類看到眼前的畫面,但是眼中卻沒(méi)有注意焦點(diǎn)一樣。(注:就是沒(méi)有抓住重點(diǎn)?。?/p>

如果拿機(jī)器翻譯來(lái)解釋這個(gè)分心模型的Encoder-Decoder框架更好理解,比如輸入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文單詞:“湯姆”,“追逐”,“杰瑞”。

在翻譯“杰瑞”這個(gè)中文單詞的時(shí)候,分心模型里面的每個(gè)英文單詞對(duì)于翻譯目標(biāo)單詞“杰瑞”貢獻(xiàn)是相同的,很明顯這里不太合理,顯然“Jerry”對(duì)于翻譯成“杰瑞”更重要,但是分心模型是無(wú)法體現(xiàn)這一點(diǎn)的,這就是為何說(shuō)它沒(méi)有引入注意力的原因。

沒(méi)有引入注意力的模型在輸入句子比較短的時(shí)候問(wèn)題不大,但是如果輸入句子比較長(zhǎng),此時(shí)所有語(yǔ)義完全通過(guò)一個(gè)中間語(yǔ)義向量來(lái)表示,單詞自身的信息已經(jīng)消失,可想而知會(huì)丟失很多細(xì)節(jié)信息,這也是為何要引入注意力模型的重要原因。

上面的例子中,如果引入Attention模型的話,應(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ǔ)單詞肯定是有幫助的,因?yàn)橐肓诵碌男畔ⅰ?/p>

同理,目標(biāo)句子中的每個(gè)單詞都應(yīng)該學(xué)會(huì)其對(duì)應(yīng)的源語(yǔ)句子中單詞的注意力分配概率信息。這意味著在生成每個(gè)單詞yi的時(shí)候,原先都是相同的中間語(yǔ)義表示C會(huì)被替換成根據(jù)當(dāng)前生成單詞而不斷變化的Ci。理解Attention模型的關(guān)鍵就是這里,即由固定的中間語(yǔ)義表示C換成了根據(jù)當(dāng)前輸出單詞來(lái)調(diào)整成加入注意力模型的變化的Ci。增加了注意力模型的Encoder-Decoder框架理解起來(lái)如圖3所示。


? ? 圖3 引入注意力模型的Encoder-Decoder框架??

即生成目標(biāo)句子單詞的過(guò)程成了下面的形式:

每個(gè)Ci可能對(duì)應(yīng)著不同的源語(yǔ)句子單詞的注意力分配概率分布,比如對(duì)于上面的英漢翻譯來(lái)說(shuō),其對(duì)應(yīng)的信息可能如下:

其中,f2函數(shù)代表Encoder對(duì)輸入英文單詞的某種變換函數(shù),比如如果Encoder是用的RNN模型的話,這個(gè)f2函數(shù)的結(jié)果往往是某個(gè)時(shí)刻輸入xi后隱層節(jié)點(diǎn)的狀態(tài)值;g函數(shù)代表Encoder根據(jù)單詞的中間表示合成整個(gè)句子中間語(yǔ)義表示的變換函數(shù),一般的做法中,g函數(shù)就是對(duì)構(gòu)成元素加權(quán)求和,即下列公式:

其中,Lx代表輸入句子Source的長(zhǎng)度;

aij代表在Target輸出句子中第i個(gè)單詞時(shí)Source輸入句子中第j個(gè)單詞注意力分配系數(shù);

hj則是Source輸入句子中第j個(gè)單詞的語(yǔ)義編碼。

假設(shè)下標(biāo)i就是上面例子所說(shuō)的“ 湯姆” ,那么Lx就是3,h1=f(“Tom”),h2=f(“Chase”),h3=f(“Jerry”)分別是輸入句子每個(gè)單詞的語(yǔ)義編碼,對(duì)應(yīng)的注意力模型權(quán)值則分別是0.6,0.2,0.2,所以g函數(shù)本質(zhì)上就是個(gè)加權(quán)求和函數(shù)。如果形象表示的話,翻譯中文單詞“湯姆”的時(shí)候,數(shù)學(xué)公式對(duì)應(yīng)的中間語(yǔ)義表示Ci的形成過(guò)程類似圖4。


圖4 Attention的形成過(guò)程??

這里還有一個(gè)問(wèn)題:Target生成目標(biāo)句子某個(gè)單詞,比如“湯姆”的時(shí)候,如何知道Attention模型所需要的輸入句子單詞注意力分配概率分布值呢?就是說(shuō)“湯姆”對(duì)應(yīng)的輸入句子Source中各個(gè)單詞的概率分布:

(Tom,0.6)(Chase,0.2) (Jerry,0.2) 是如何得到的呢?

為了便于說(shuō)明,我們假設(shè)對(duì)圖2的非Attention模型的Encoder-Decoder框架進(jìn)行細(xì)化,Encoder采用RNN模型,Decoder也采用RNN模型,這是比較常見(jiàn)的一種模型配置,則圖2的框架轉(zhuǎn)換為圖5。


? ? 圖5 RNN作為具體模型的Encoder-Decoder框架??

那么用圖6可以較為便捷地說(shuō)明注意力分配概率分布值的通用計(jì)算過(guò)程。


圖5 AM注意力分配概率計(jì)算

①對(duì)于采用RNN的Decoder來(lái)說(shuō),在時(shí)刻i,如果要生成yi單詞,我們是可以知道Target在生成Yi之前的時(shí)刻i-1時(shí),隱層節(jié)點(diǎn)i-1時(shí)刻的輸出值Hi-1的;

②而我們的目的是要計(jì)算生成Yi時(shí)輸入句子中的單詞“Tom”、“Chase”、“Jerry”對(duì)Yi來(lái)說(shuō)的注意力分配概率分布aij,那么可以用Target輸出句子i-1時(shí)刻隱層節(jié)點(diǎn)狀態(tài)Hi-1去一一和輸入句子Source中每個(gè)單詞對(duì)應(yīng)的RNN隱層節(jié)點(diǎn)狀態(tài)hj進(jìn)行對(duì)比,即通過(guò)函數(shù)F(hj,Hi-1)來(lái)獲得目標(biāo)單詞yi每個(gè)輸入單詞“對(duì)應(yīng)的”對(duì)齊可能性

③這個(gè)F函數(shù)在不同論文里可能會(huì)采取不同的方法,然后函數(shù)F的輸出(對(duì)齊可能性)經(jīng)過(guò)Softmax進(jìn)行歸一化就得到了符合概率分布取值區(qū)間的注意力分配概率分布數(shù)值。(這就得到了注意力權(quán)重

絕大多數(shù)Attention模型都是采取上述的計(jì)算框架來(lái)計(jì)算注意力分配概率分布信息,區(qū)別只是在F的定義上可能有所不同

圖7可視化地展示了在英語(yǔ)-德語(yǔ)翻譯系統(tǒng)中加入Attention機(jī)制后,Source和Target兩個(gè)句子每個(gè)單詞對(duì)應(yīng)的注意力分配概率分布。

? 圖7 英語(yǔ)-德語(yǔ)翻譯的注意力概率分布

上述內(nèi)容就是經(jīng)典的Soft Attention模型的基本思想,那么怎么理解Attention模型的物理含義呢?一般在自然語(yǔ)言處理應(yīng)用里會(huì)把Attention模型看作是輸出Target句子中某個(gè)單詞和輸入Source句子每個(gè)單詞的對(duì)齊模型,這是非常有道理的。用簡(jiǎn)短的話來(lái)說(shuō)就是對(duì)Encoder層狀態(tài)的加權(quán),從而掌握輸入語(yǔ)句中的所有細(xì)節(jié)信息。

目標(biāo)句子生成的每個(gè)單詞←對(duì)應(yīng)→輸入句子單詞的概率分布可以理解為輸入句子單詞和這個(gè)目標(biāo)生成單詞的對(duì)齊概率,這在機(jī)器翻譯語(yǔ)境下是非常直觀的:傳統(tǒng)的統(tǒng)計(jì)機(jī)器翻譯一般在做的過(guò)程中會(huì)專門有一個(gè)短語(yǔ)對(duì)齊的步驟,而注意力模型其實(shí)起的是相同的作用。

圖8 Google 神經(jīng)網(wǎng)絡(luò)機(jī)器翻譯系統(tǒng)結(jié)構(gòu)圖??

圖8所示即為Google于2016年部署到線上的基于神經(jīng)網(wǎng)絡(luò)的機(jī)器翻譯系統(tǒng),相對(duì)傳統(tǒng)模型翻譯效果有大幅提升,翻譯錯(cuò)誤率降低了60%,其架構(gòu)就是上文所述的加上Attention機(jī)制的Encoder-Decoder框架,主要區(qū)別無(wú)非是其Encoder和Decoder使用了8層疊加的LSTM模型。

Attention機(jī)制的本質(zhì)思想

如果把Attention機(jī)制從上文講述例子中的Encoder-Decoder框架中剝離,并進(jìn)一步做抽象,可以更容易看懂Attention機(jī)制的本質(zhì)思想。


圖9 Attention機(jī)制的本質(zhì)思想

我們可以這樣來(lái)看待Attention機(jī)制(參考圖9):

①將Source(輸入)中的構(gòu)成元素想象成是由一系列的<Key,Value>數(shù)據(jù)對(duì)構(gòu)成;

②此時(shí)給定Target中的某個(gè)元素Query,通過(guò)計(jì)算Query和各個(gè)Key的相似性或者相關(guān)性,得到每個(gè)Key對(duì)應(yīng)Value的權(quán)重系數(shù);

③然后對(duì)Value權(quán)重系數(shù)進(jìn)行加權(quán)求和,即得到了最終的Attention數(shù)值。

所以本質(zhì)上Attention機(jī)制是對(duì)Source中元素的Value值進(jìn)行加權(quán)求和,而Query和Key用來(lái)計(jì)算對(duì)應(yīng)Value的權(quán)重系數(shù)。即可以將其本質(zhì)思想改寫為如下公式:

其中,Lx=||Source||代表Source的長(zhǎng)度,公式含義即如上所述。上文所舉的機(jī)器翻譯的例子里,因?yàn)樵谟?jì)算Attention的過(guò)程中,Source中的Key和Value合二為一,指向的是同一個(gè)東西,也即輸入句子中每個(gè)單詞對(duì)應(yīng)的語(yǔ)義編碼,所以可能不容易看出這種能夠體現(xiàn)本質(zhì)思想的結(jié)構(gòu)。

當(dāng)然,從概念上理解,把Attention仍然理解為從大量信息中有選擇地篩選出少量重要信息并聚焦到這些重要信息上,忽略大多不重要的信息,這種思路仍然成立。聚焦的過(guò)程體現(xiàn)在權(quán)重系數(shù)的計(jì)算上,權(quán)重越大越聚焦于其對(duì)應(yīng)的Value值上,即權(quán)重代表了信息的重要性,而Value是其對(duì)應(yīng)的信息。

從圖9可以引出另外一種理解,也可以將Attention機(jī)制看作一種軟尋址(Soft Addressing):Source可以看作存儲(chǔ)器內(nèi)存儲(chǔ)的內(nèi)容,元素由地址Key和值Value組成,當(dāng)前有個(gè)Key=Query的查詢,目的是取出存儲(chǔ)器中對(duì)應(yīng)的Value值,即Attention數(shù)值。通過(guò)Query和存儲(chǔ)器內(nèi)元素Key的地址進(jìn)行相似性比較來(lái)尋址,之所以說(shuō)是軟尋址,指的不像一般尋址只從存儲(chǔ)內(nèi)容里面找出一條內(nèi)容,而是可能從每個(gè)Key地址都會(huì)取出內(nèi)容,取出內(nèi)容的重要性根據(jù)Query和Key的相似性來(lái)決定,之后對(duì)Value進(jìn)行加權(quán)求和,這樣就可以取出最終的Value值,也即Attention值。所以不少研究人員將Attention機(jī)制看作軟尋址的一種特例,這也是非常有道理的。

至于Attention機(jī)制的具體計(jì)算過(guò)程,如果對(duì)目前大多數(shù)方法進(jìn)行抽象的話,可以將其歸納為兩個(gè)過(guò)程:

第一個(gè)過(guò)程是根據(jù)Query和Key計(jì)算權(quán)重系數(shù);而第一個(gè)過(guò)程又可以細(xì)分為兩個(gè)階段:

? ? ? ? ? ? · 第一個(gè)階段根據(jù)Query和Key計(jì)算兩者的相似性或者相關(guān)性;

????????????· 第二個(gè)階段對(duì)第一階段的原始分值進(jìn)行歸一化處理;

第二個(gè)過(guò)程根據(jù)權(quán)重系數(shù)對(duì)Value進(jìn)行加權(quán)求和。

Attention的計(jì)算過(guò)程

這樣,可以將Attention的計(jì)算過(guò)程抽象為如圖10展示的三個(gè)階段。


? 圖10 三階段計(jì)算Attention過(guò)程??

第一階段

在第一個(gè)階段,可以引入不同的函數(shù)和計(jì)算機(jī)制,根據(jù)Query和某個(gè)Key_i,計(jì)算兩者的相似性或者相關(guān)性,最常見(jiàn)的方法包括:

①求兩者的向量點(diǎn)積;

①求兩者的向量Cosine(Cos)相似性;

①或者通過(guò)再引入額外的神經(jīng)網(wǎng)絡(luò)來(lái)求值。即如下方式:

第一階段產(chǎn)生的分值根據(jù)具體產(chǎn)生的方法不同其數(shù)值取值范圍也不一樣。

第二階段

第二階段引入類似SoftMax的計(jì)算方式對(duì)第一階段的得分進(jìn)行數(shù)值轉(zhuǎn)換:

①一方面可以進(jìn)行歸一化,將原始計(jì)算分值整理成所有元素權(quán)重之和為1的概率分布;

②另一方面也可以通過(guò)SoftMax的內(nèi)在機(jī)制更加突出重要元素的權(quán)重。即一般采用如下公式計(jì)算:

第三階段

第二階段的計(jì)算結(jié)果a_i即為value_i對(duì)應(yīng)的權(quán)重系數(shù),然后進(jìn)行加權(quán)求和即可得到Attention數(shù)值:


通過(guò)如上三個(gè)階段的計(jì)算,即可求出針對(duì)Query的Attention數(shù)值,目前絕大多數(shù)具體的注意力機(jī)制計(jì)算方法都符合上述的三階段抽象計(jì)算過(guò)程。

Self Attention模型

通過(guò)上述對(duì)Attention本質(zhì)思想的梳理,我們可以更容易理解本節(jié)介紹的Self Attention模型。Self Attention也經(jīng)常被稱為intra Attention(內(nèi)部Attention),最近一年也獲得了比較廣泛的使用,比如Google最新的機(jī)器翻譯模型內(nèi)部大量采用了Self Attention模型。

在一般任務(wù)的Encoder-Decoder框架中,輸入Source和輸出Target內(nèi)容是不一樣的,比如對(duì)于英-中機(jī)器翻譯來(lái)說(shuō),Source是英文句子,Target是對(duì)應(yīng)的翻譯出的中文句子,Attention機(jī)制發(fā)生在Target的元素Query和Source中的所有元素之間。

而Self Attention顧名思義,指的不是Target和Source之間的Attention機(jī)制,而是Source內(nèi)部元素之間或者Target內(nèi)部元素之間發(fā)生的Attention機(jī)制,也可以理解為Target=Source這種特殊情況下的注意力計(jì)算機(jī)制。其具體計(jì)算過(guò)程是一樣的,只是計(jì)算對(duì)象發(fā)生了變化而已,所以此處不再贅述其計(jì)算過(guò)程細(xì)節(jié)。(即將Source與Target之間設(shè)置的attention改為它們內(nèi)部自己設(shè)置attention)

如果是常規(guī)的Target不等于Source情形下的注意力計(jì)算,其物理含義正如上文所講,比如對(duì)于機(jī)器翻譯來(lái)說(shuō),本質(zhì)上是目標(biāo)語(yǔ)單詞和源語(yǔ)單詞之間的一種單詞對(duì)齊機(jī)制。那么如果是Self Attention機(jī)制,一個(gè)很自然的問(wèn)題是:通過(guò)Self Attention到底學(xué)到了哪些規(guī)律或者抽取出了哪些特征呢?或者說(shuō)引入Self Attention有什么增益或者好處呢?我們?nèi)匀灰詸C(jī)器翻譯中的Self Attention來(lái)說(shuō)明,圖11和圖12是可視化地表示Self Attention在同一個(gè)英語(yǔ)句子內(nèi)單詞間產(chǎn)生的聯(lián)系。


? 圖11 可視化Self Attention實(shí)例



圖12 可視化Self Attention實(shí)例??

從兩張圖(圖11、圖12)可以看出,Self Attention可以捕獲同一個(gè)句子中單詞之間的一些句法特征(比如圖11展示的有一定距離的短語(yǔ)結(jié)構(gòu))或者語(yǔ)義特征(比如圖12展示的its的指代對(duì)象Law)。

很明顯,引入Self Attention后會(huì)更容易捕獲句子中長(zhǎng)距離的相互依賴的特征,因?yàn)槿绻荝NN或者LSTM,需要依次序序列計(jì)算,對(duì)于遠(yuǎn)距離的相互依賴的特征,要經(jīng)過(guò)若干時(shí)間步步驟的信息累積才能將兩者聯(lián)系起來(lái),而距離越遠(yuǎn),有效捕獲的可能性越小。

但是Self Attention在計(jì)算過(guò)程中會(huì)直接將句子中任意兩個(gè)單詞的聯(lián)系通過(guò)一個(gè)計(jì)算步驟直接聯(lián)系起來(lái),所以遠(yuǎn)距離依賴特征之間的距離被極大縮短,有利于有效地利用這些特征。除此外,Self Attention對(duì)于增加計(jì)算的并行性也有直接幫助作用。這是為何Self Attention逐漸被廣泛使用的主要原因。

Attention機(jī)制的應(yīng)用

前文有述,Attention機(jī)制在深度學(xué)習(xí)的各種應(yīng)用領(lǐng)域都有廣泛的使用場(chǎng)景。上文在介紹過(guò)程中我們主要以自然語(yǔ)言處理中的機(jī)器翻譯任務(wù)作為例子,下面分別再?gòu)膱D像處理領(lǐng)域和語(yǔ)音識(shí)別選擇典型應(yīng)用實(shí)例來(lái)對(duì)其應(yīng)用做簡(jiǎn)單說(shuō)明。


?? 圖13 圖片-描述任務(wù)的Encoder-Decoder框架??

圖片描述(Image-Caption)是一種典型的圖文結(jié)合的深度學(xué)習(xí)應(yīng)用,輸入一張圖片,人工智能系統(tǒng)輸出一句描述句子,語(yǔ)義等價(jià)地描述圖片所示內(nèi)容。很明顯這種應(yīng)用場(chǎng)景也可以使用Encoder-Decoder框架來(lái)解決任務(wù)目標(biāo),此時(shí)Encoder輸入部分是一張圖片,一般會(huì)用CNN來(lái)對(duì)圖片進(jìn)行特征抽取,Decoder部分使用RNN或者LSTM來(lái)輸出自然語(yǔ)言句子(參考圖13)。

此時(shí)如果加入Attention機(jī)制能夠明顯改善系統(tǒng)輸出效果,Attention模型在這里起到了類似人類視覺(jué)選擇性注意的機(jī)制,在輸出某個(gè)實(shí)體單詞的時(shí)候會(huì)將注意力焦點(diǎn)聚焦在圖片中相應(yīng)的區(qū)域上。圖14給出了根據(jù)給定圖片生成句子“A person is standing on a beach with a surfboard.”過(guò)程時(shí)每個(gè)單詞對(duì)應(yīng)圖片中的注意力聚焦區(qū)域。


?? 圖14 圖片生成句子中每個(gè)單詞時(shí)的注意力聚焦區(qū)域??

圖15給出了另外四個(gè)例子形象地展示了這種過(guò)程,每個(gè)例子上方左側(cè)是輸入的原圖,下方句子是人工智能系統(tǒng)自動(dòng)產(chǎn)生的描述語(yǔ)句,上方右側(cè)圖展示了當(dāng)AI系統(tǒng)產(chǎn)生語(yǔ)句中劃?rùn)M線單詞的時(shí)候,對(duì)應(yīng)圖片中聚焦的位置區(qū)域。比如當(dāng)輸出單詞dog的時(shí)候,AI系統(tǒng)會(huì)將注意力更多地分配給圖片中小狗對(duì)應(yīng)的位置。


?圖15 圖像描述任務(wù)中Attention機(jī)制的聚焦作用



?圖16 語(yǔ)音識(shí)別中音頻序列和輸出字符之間的Attention??

語(yǔ)音識(shí)別的任務(wù)目標(biāo)是將語(yǔ)音流信號(hào)轉(zhuǎn)換成文字,所以也是Encoder-Decoder的典型應(yīng)用場(chǎng)景。Encoder部分的Source輸入是語(yǔ)音流信號(hào),Decoder部分輸出語(yǔ)音對(duì)應(yīng)的字符串流。

圖16可視化地展示了在Encoder-Decoder框架中加入Attention機(jī)制后,當(dāng)用戶用語(yǔ)音說(shuō)句子 how much would a woodchuck chuck 時(shí),輸入部分的聲音特征信號(hào)和輸出字符之間的注意力分配概率分布情況,顏色越深代表分配到的注意力概率越高。從圖中可以看出,在這個(gè)場(chǎng)景下,Attention機(jī)制起到了將輸出字符和輸入語(yǔ)音信號(hào)進(jìn)行對(duì)齊的功能。

上述內(nèi)容僅僅選取了不同AI領(lǐng)域的幾個(gè)典型Attention機(jī)制應(yīng)用實(shí)例,Encoder-Decoder加Attention架構(gòu)由于其卓越的實(shí)際效果,目前在深度學(xué)習(xí)領(lǐng)域里得到了廣泛的使用,了解并熟練使用這一架構(gòu)對(duì)于解決實(shí)際問(wèn)題會(huì)有極大幫助。


Attention機(jī)制的變種

與普通的Attention機(jī)制相比,Attention機(jī)制有哪些變種呢?

變種1-硬性注意力:之前提到的注意力是軟性注意力,其選擇的信息是所有輸入信息在注意力 分布下的期望。還有一種注意力是只關(guān)注到某一個(gè)位置上的信息,叫做硬性注意力(hard attention)。硬性注意力有兩種實(shí)現(xiàn)方式:(1)一種是選取最高概率的輸入信息;(2)另一種硬性注意力可以通過(guò)在注意力分布式上隨機(jī)采樣的方式實(shí)現(xiàn)。硬性注意力模型的缺點(diǎn):

硬性注意力的一個(gè)缺點(diǎn)是基于最大采樣或隨機(jī)采樣的方式來(lái)選擇信息。因此最終的損失函數(shù)與注意力分布之間的函數(shù)關(guān)系不可導(dǎo),因此無(wú)法使用在反向傳播算法進(jìn)行訓(xùn)練。為了使用反向傳播算法,一般使用軟性注意力來(lái)代替硬性注意力。硬性注意力需要通過(guò)強(qiáng)化學(xué)習(xí)來(lái)進(jìn)行訓(xùn)練。——《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》

變種2-鍵值對(duì)注意力:即上圖右邊的鍵值對(duì)模式,此時(shí)Key!=Value,注意力函數(shù)變?yōu)椋?/p>

變種3-多頭注意力:多頭注意力(multi-head attention)是利用多個(gè)查詢Q = [q1, · · · , qM],來(lái)平行地計(jì)算從輸入信息中選取多個(gè)信息。每個(gè)注意力關(guān)注輸入信息的不同部分,然后再進(jìn)行拼接:



此外,關(guān)于Attention注意力機(jī)制還可以參考知乎的另一篇文章:

nlp中的Attention注意力機(jī)制+Transformer詳解https://zhuanlan.zhihu.com/p/53682800

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容