近年來座柱,深度學(xué)習(xí)的研究越來越深入渠啊,在各個領(lǐng)域也都獲得了不少突破性的進展逻卖。基于注意力(attention)機制的神經(jīng)網(wǎng)絡(luò)成為了最近神經(jīng)網(wǎng)絡(luò)研究的一個熱點昭抒。
1 Attention研究進展
Attention機制最早是在視覺圖像領(lǐng)域提出來的,應(yīng)該是在九幾年思想就提出來了炼杖,但是真正火起來應(yīng)該算是google mind團隊的這篇論文《Recurrent Models of Visual Attention》[14]灭返,他們在RNN模型上使用了attention機制來進行圖像分類。隨后坤邪,Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中熙含,使用類似attention的機制在機器翻譯任務(wù)上將翻譯和對齊同時進行,他們的工作算是是第一個提出attention機制應(yīng)用到NLP領(lǐng)域中艇纺。接著類似的基于attention機制的RNN模型擴展開始應(yīng)用到各種NLP任務(wù)中怎静。最近,如何在CNN中使用attention機制也成為了大家的研究熱點黔衡。
2 Recurrent Models of Visual Attention
在介紹NLP中的Attention之前蚓聘,我想大致說一下圖像中使用attention的思想。就具代表性的這篇論文《Recurrent Models of Visual Attention》 [14]盟劫,他們研究的動機其實也是受到人類注意力機制的啟發(fā)夜牡。人們在進行觀察圖像的時候,其實并不是一次就把整幅圖像的每個位置像素都看過侣签,大多是根據(jù)需求將注意力集中到圖像的特定部分塘装。而且人類會根據(jù)之前觀察的圖像學(xué)習(xí)到未來要觀察圖像注意力應(yīng)該集中的位置。下圖是這篇論文的核心模型示意圖影所。
該模型是在傳統(tǒng)的RNN上加入了attention機制(即紅圈圈出來的部分)蹦肴,通過attention去學(xué)習(xí)一幅圖像要處理的部分,每次當(dāng)前狀態(tài)猴娩,都會根據(jù)前一個狀態(tài)學(xué)習(xí)得到的要關(guān)注的位置l和當(dāng)前輸入的圖像阴幌,去處理注意力部分像素勺阐,而不是圖像的全部像素。這樣的好處就是更少的像素需要處理裂七,減少了任務(wù)的復(fù)雜度皆看。可以看到圖像中應(yīng)用attention和人類的注意力機制是很類似的背零,接下來我們看看在NLP中使用的attention腰吟。
3 Attention-based RNN in NLP
3.1 Neural Machine Translation by Jointly Learning to Align and Translate [1]
這篇論文算是在NLP中第一個使用attention機制的工作。他們把attention機制用到了神經(jīng)網(wǎng)絡(luò)機器翻譯(NMT)上徙瓶,NMT其實就是一個典型的sequence to sequence模型毛雇,也就是一個encoder to decoder模型,傳統(tǒng)的NMT使用兩個RNN侦镇,一個RNN對源語言進行編碼灵疮,將源語言編碼到一個固定維度的中間向量,然后在使用一個RNN進行解碼翻譯到目標(biāo)語言壳繁,傳統(tǒng)的模型如下圖:
這篇論文提出了基于attention機制的NMT震捣,模型大致如下圖:
圖中我并沒有把解碼器中的所有連線畫玩,只畫了前兩個詞闹炉,后面的詞其實都一樣蒿赢。可以看到基于attention的NMT在傳統(tǒng)的基礎(chǔ)上渣触,它把源語言端的每個詞學(xué)到的表達(傳統(tǒng)的只有最后一個詞后學(xué)到的表達)和當(dāng)前要預(yù)測翻譯的詞聯(lián)系了起來羡棵,這樣的聯(lián)系就是通過他們設(shè)計的attention進行的,在模型訓(xùn)練好后嗅钻,根據(jù)attention矩陣皂冰,我們就可以得到源語言和目標(biāo)語言的對齊矩陣了。具體論文的attention設(shè)計部分如下:
可以看到他們是使用一個感知機公式來將目標(biāo)語言和源語言的每個詞聯(lián)系了起來养篓,然后通過soft函數(shù)將其歸一化得到一個概率分布秃流,就是attention矩陣。
從結(jié)果來看相比傳統(tǒng)的NMT(RNNsearch是attention NMT柳弄,RNNenc是傳統(tǒng)NMT)效果提升了不少剔应,最大的特點還在于它可以可視化對齊,并且在長句的處理上更有優(yōu)勢语御。
3.2 Effective Approaches to Attention-based Neural Machine Translation [2]
這篇論文是繼上一篇論文后峻贮,一篇很具代表性的論文,他們的工作告訴了大家attention在RNN中可以如何進行擴展应闯,這篇論文對后續(xù)各種基于attention的模型在NLP應(yīng)用起到了很大的促進作用纤控。在論文中他們提出了兩種attention機制,一種是全局(global)機制碉纺,一種是局部(local)機制船万。
首先我們來看看global機制的attention刻撒,其實這和上一篇論文提出的attention的思路是一樣的,它都是對源語言對所有詞進行處理耿导,不同的是在計算attention矩陣值的時候声怔,他提出了幾種簡單的擴展版本。
在他們最后的實驗中g(shù)eneral的計算方法效果是最好的舱呻。
我們再來看一下他們提出的local版本醋火。主要思路是為了減少attention計算時的耗費,作者在計算attention時并不是去考慮源語言端的所有詞箱吕,而是根據(jù)一個預(yù)測函數(shù)芥驳,先預(yù)測當(dāng)前解碼時要對齊的源語言端的位置Pt,然后通過上下文窗口茬高,僅考慮窗口內(nèi)的詞兆旬。
里面給出了兩種預(yù)測方法,local-m和local-p怎栽,再計算最后的attention矩陣時丽猬,在原來的基礎(chǔ)上去乘了一個pt位置相關(guān)的高斯分布。作者的實驗結(jié)果是局部的比全局的attention效果好熏瞄。
這篇論文最大的貢獻我覺得是首先告訴了我們可以如何擴展attention的計算方式脚祟,還有就是局部的attention方法。
4 Attention-based CNN in NLP
隨后基于Attention的RNN模型開始在NLP中廣泛應(yīng)用巴刻,不僅僅是序列到序列模型,各種分類問題都可以使用這樣的模型蛉签。那么在深度學(xué)習(xí)中與RNN同樣流行的卷積神經(jīng)網(wǎng)絡(luò)CNN是否也可以使用attention機制呢胡陪?《ABCNN: Attention-Based Convolutional Neural Network for Modeling Sentence Pairs》 [13]這篇論文就提出了3中在CNN中使用attention的方法,是attention在CNN中較早的探索性工作
傳統(tǒng)的CNN在構(gòu)建句對模型時如上圖碍舍,通過每個單通道處理一個句子柠座,然后學(xué)習(xí)句子表達,最后一起輸入到分類器中片橡。這樣的模型在輸入分類器前句對間是沒有相互聯(lián)系的妈经,作者們就想通過設(shè)計attention機制將不同cnn通道的句對聯(lián)系起來。
第一種方法ABCNN0-1是在卷積前進行attention捧书,通過attention矩陣計算出相應(yīng)句對的attention feature map吹泡,然后連同原來的feature map一起輸入到卷積層。具體的計算方法如下经瓷。
第二種方法ABCNN-2是在池化時進行attention爆哑,通過attention對卷積后的表達重新加權(quán),然后再進行池化舆吮,原理如下圖揭朝。
第三種就是把前兩種方法一起用到CNN中队贱,如下圖
這篇論文提供了我們在CNN中使用attention的思路。現(xiàn)在也有不少使用基于attention的CNN工作潭袱,并取得了不錯的效果柱嫌。
5 總結(jié)
最后進行一下總結(jié)。Attention在NLP中其實我覺得可以看成是一種自動加權(quán)屯换,它可以把兩個你想要聯(lián)系起來的不同模塊编丘,通過加權(quán)的形式進行聯(lián)系。目前主流的計算公式有以下幾種:
通過設(shè)計一個函數(shù)將目標(biāo)模塊mt和源模塊ms聯(lián)系起來趟径,然后通過一個soft函數(shù)將其歸一化得到概率分布瘪吏。
目前Attention在NLP中已經(jīng)有廣泛的應(yīng)用。它有一個很大的優(yōu)點就是可以可視化attention矩陣來告訴大家神經(jīng)網(wǎng)絡(luò)在進行任務(wù)時關(guān)注了哪些部分蜗巧。
不過在NLP中的attention機制和人類的attention機制還是有所區(qū)別掌眠,它基本還是需要計算所有要處理的對象,并額外用一個矩陣去存儲其權(quán)重幕屹,其實增加了開銷蓝丙。而不是像人類一樣可以忽略不想關(guān)注的部分,只去處理關(guān)注的部分望拖。