自然語言處理中的自注意力機制(Self-attention Mechanism)

轉發自https://www.cnblogs.com/robert-dlut/p/8638283.html

自然語言處理中的自注意力機制(Self-attention Mechanism)

近年來,注意力(Attention)機制被廣泛應用到基於深度學習的自然語言處理(NLP)各個任務中,之前我對早期注意力機制進行過一些學習總結(可見http://www.cnblogs.com/robert-dlut/p/5952032.html)。隨着注意力機制的深入研究,各式各樣的attention被研究者們提出。在2017年6月google機器翻譯團隊在arXiv上放出的《Attention is all you need》論文受到了大家廣泛關注,自注意力(self-attention)機制開始成爲神經網絡attention的研究熱點,在各個任務上也取得了不錯的效果。本人就這篇論文中的self-attention以及一些相關工作進行了學習總結(其中也參考借鑑了張俊林博士的博客"深度學習中的注意力機制(2017版)"和蘇劍林的"《Attention is All You Need》淺讀(簡介+代碼)"),和大家一起分享。

1 背景知識

Attention機制最早是在視覺圖像領域提出來的,應該是在九幾年思想就提出來了,但是真正火起來應該算是2014年google mind團隊的這篇論文《Recurrent Models of Visual Attention》,他們在RNN模型上使用了attention機制來進行圖像分類。隨後,Bahdanau等人在論文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用類似attention的機制在機器翻譯任務上將翻譯和對齊同時進行,他們的工作算是第一個將attention機制應用到NLP領域中。接着attention機制被廣泛應用在基於RNN/CNN等神經網絡模型的各種NLP任務中。2017年,google機器翻譯團隊發表的《Attention is all you need》中大量使用了自注意力(self-attention)機制來學習文本表示。自注意力機制也成爲了大家近期的研究熱點,並在各種NLP任務上進行探索。下圖爲attention研究進展的大概趨勢。

 

Attention機制的本質來自於人類視覺注意力機制。人們視覺在感知東西的時候一般不會是一個場景從到頭看到尾每次全部都看,而往往是根據需求觀察注意特定的一部分。而且當人們發現一個場景經常在某部分出現自己想觀察的東西時,人們會進行學習在將來再出現類似場景時把注意力放到該部分上。

下面我先介紹一下在NLP中常用attention的計算方法(裏面借鑑了張俊林博士"深度學習中的注意力機制(2017版)"裏的一些圖)。Attention函數的本質可以被描述爲一個查詢(query)到一系列(鍵key-值value)對的映射,如下圖。

在計算attention時主要分爲三步,第一步是將query和每個key進行相似度計算得到權重,常用的相似度函數有點積,拼接,感知機等;然後第二步一般是使用一個softmax函數對這些權重進行歸一化;最後將權重和相應的鍵值value進行加權求和得到最後的attention。目前在NLP研究中,key和value常常都是同一個,即key=value。

2 Attention is all you need[1]

接下來我將介紹《Attention is all you need》這篇論文。這篇論文是google機器翻譯團隊在2017年6月放在arXiv上,最後發表在2017年nips上,到目前爲止google學術顯示引用量爲119,可見也是受到了大家廣泛關注和應用。這篇論文主要亮點在於1)不同於以往主流機器翻譯使用基於RNN的seq2seq模型框架,該論文用attention機制代替了RNN搭建了整個模型框架。2)提出了多頭注意力(Multi-headed attention)機制方法,在編碼器和解碼器中大量的使用了多頭自注意力機制(Multi-headed self-attention)。3)在WMT2014語料中的英德和英法任務上取得了先進結果,並且訓練速度比主流模型更快。

該論文模型的整體結構如下圖,還是由編碼器和解碼器組成,在編碼器的一個網絡塊中,由一個多頭attention子層和一個前饋神經網絡子層組成,整個編碼器棧式搭建了N個塊。類似於編碼器,只是解碼器的一個網絡塊中多了一個多頭attention層。爲了更好的優化深度網絡,整個網絡使用了殘差連接和對層進行了規範化(Add&Norm)。

下面我們重點關注一下這篇論文中的attention。在介紹多頭attention之前,我們先看一下論文中提到的放縮點積attention(scaled dot-Product attention)。對比我在前面背景知識裏提到的attention的一般形式,其實scaled dot-Product attention就是我們常用的使用點積進行相似度計算的attention,只是多除了一個(爲K的維度)起到調節作用,使得內積不至於太大。

多頭attention(Multi-head attention)結構如下圖,Query,Key,Value首先進過一個線性變換,然後輸入到放縮點積attention,注意這裏要做h次,其實也就是所謂的多頭,每一次算一個頭。而且每次Q,K,V進行線性變換的參數W是不一樣的。然後將h次的放縮點積attention結果進行拼接,再進行一次線性變換得到的值作爲多頭attention的結果。可以看到,google提出來的多頭attention的不同之處在於進行了h次計算而不僅僅算一次,論文中說到這樣的好處是可以允許模型在不同的表示子空間裏學習到相關的信息,後面還會根據attention可視化來驗證。

那麼在整個模型中,是如何使用attention的呢?如下圖,首先在編碼器到解碼器的地方使用了多頭attention進行連接,K,V,Q分別是編碼器的層輸出(這裏K=V)和解碼器中多頭attention的輸入。其實就和主流的機器翻譯模型中的attention一樣,利用解碼器和編碼器attention來進行翻譯對齊。然後在編碼器和解碼器中都使用了多頭自注意力self-attention來學習文本的表示。Self-attention即K=V=Q,例如輸入一個句子,那麼裏面的每個詞都要和該句子中的所有詞進行attention計算。目的是學習句子內部的詞依賴關係,捕獲句子的內部結構。

 

對於使用自注意力機制的原因,論文中提到主要從三個方面考慮(每一層的複雜度,是否可以並行,長距離依賴學習),並給出了和RNN,CNN計算複雜度的比較。可以看到,如果輸入序列n小於表示維度d的話,每一層的時間複雜度self-attention是比較有優勢的。當n比較大時,作者也給出了一種解決方案self-attention(restricted)即每個詞不是和所有詞計算attention,而是隻與限制的r個詞去計算attention。在並行方面,多頭attention和CNN一樣不依賴於前一時刻的計算,可以很好的並行,優於RNN。在長距離依賴上,由於self-attention是每個詞和所有詞都要計算attention,所以不管他們中間有多長距離,最大的路徑長度也都只是1。可以捕獲長距離依賴關係。

最後我們看一下實驗結果,在WMT2014的英德和英法機器翻譯任務上,都取得了先進的結果,且訓練速度優於其他模型。

在模型的超參實驗中可以看到,多頭attention的超參h太小也不好,太大也會下降。整體更大的模型比小模型要好,使用dropout可以幫助過擬合。

作者還將這個模型應用到了句法分析任務上也取得了不錯的結果。

最後我們看一下attention可視化的效果(這裏不同顏色代表attention不同頭的結果,顏色越深attention值越大)。可以看到self-attention在這裏可以學習到句子內部長距離依賴"making…….more difficult"這個短語。在兩個頭和單頭的比較中,可以看到單頭"its"這個詞只能學習到"law"的依賴關係,而兩個頭"its"不僅學習到了"law"還學習到了"application"依賴關係。多頭能夠從不同的表示子空間裏學習相關信息。

3 Self-attention in NLP

3.1 Deep Semantic Role Labeling with Self-Attention[8]

這篇論文來自AAAI2018,廈門大學Tan等人的工作。他們將self-attention應用到了語義角色標註任務(SRL)上,並取得了先進的結果。這篇論文中,作者將SRL作爲一個序列標註問題,使用BIO標籤進行標註。然後提出使用深度注意力網絡(Deep Attentional Neural Network)進行標註,網絡結構如下。在每一個網絡塊中,有一個RNN/CNN/FNN子層和一個self-attention子層組成。最後直接利用softmax當成標籤分類進行序列標註。

該模型在CoNLL-2005和CoNll-2012的SRL數據集上都取得了先進結果。我們知道序列標註問題中,標籤之間是有依賴關係的,比如標籤I,應該是出現在標籤B之後,而不應該出現在O之後。目前主流的序列標註模型是BiLSTM-CRF模型,利用CRF進行全局標籤優化。在對比實驗中,He et al和Zhou and Xu的模型分別使用了CRF和constrained decoding來處理這個問題。可以看到本論文僅使用self-attention,作者認爲在模型的頂層的attention層能夠學習到標籤潛在的依賴信息。

3.2 Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction[7]

這篇論文是Andrew McCallum團隊應用self-attention在生物醫學關係抽取任務上的一個工作,應該是已經被NAACL2018接收。這篇論文作者提出了一個文檔級別的生物關係抽取模型,裏面做了不少工作,感興趣的讀者可以更深入閱讀原文。我們這裏只簡單提一下他們self-attention的應用部分。論文模型的整體結構如下圖,他們也是使用google提出包含self-attention的transformer來對輸入文本進行表示學習,和原始的transformer略有不同在於他們使用了窗口大小爲5的CNN代替了原始FNN。

我們關注一下attention這部分的實驗結果。他們在生物醫學藥物致病數據集上(Chemical Disease Relations,CDR)取得了先進結果。去掉self-attention這層以後可以看到結果大幅度下降,而且使用窗口大小爲5的CNN比原始的FNN在這個數據集上有更突出的表現。

4 總結

 

最後進行一下總結,self-attention可以是一般attention的一種特殊情況,在self-attention中,Q=K=V每個序列中的單元和該序列中所有單元進行attention計算。Google提出的多頭attention通過計算多次來捕獲不同子空間上的相關信息。self-attention的特點在於無視詞之間的距離直接計算依賴關係,能夠學習一個句子的內部結構,實現也較爲簡單並且可以並行計算。從一些論文中看到,self-attention可以當成一個層和RNN,CNN,FNN等配合使用,成功應用於其他NLP任務。

除了Google提出的自注意力機制,目前也有不少其他相關工作,感興趣的讀者可以繼續閱讀。

參考文獻

[1] Vaswani, Ashish, et al. Attention is all you need. Advances in Neural Information Processing Systems. 2017.

[2] Romain Paulus, Caiming Xiong, and Richard Socher. A deep reinforced model for abstractive summarization. arXiv preprint arXiv:1705.04304, 2017.

[3] Zhouhan Lin, Minwei Feng, Cicero Nogueira dos Santos, Mo Yu, Bing Xiang, Bowen Zhou, and Yoshua Bengio. A structured self-attentive sentence embedding. arXiv preprint arXiv:1703.03130, 2017.

[4] Jianpeng Cheng, Li Dong, and Mirella Lapata. Long short-term memory-networks for machine reading. arXiv preprint arXiv:1601.06733, 2016.

[5] Shen, T.; Zhou, T.; Long, G.; Jiang, J.; Pan, S.; and Zhang, C. Disan: Directional self-attention network for rnn/cnn-free language understanding. arXiv preprint arXiv:1709.04696, 2017.

[6] Im, Jinbae, and Sungzoon Cho. Distance-based Self-Attention Network for Natural Language InferencearXiv preprint arXiv:1712.02047, 2017.

[7] Verga P, Strubell E, McCallum A. Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction. arXiv preprint arXiv:1802.10569, 2018.

[8] Tan Z, Wang M, Xie J, et al. Deep Semantic Role Labeling with Self-Attention. AAAI 2018.

[9] Shaw, Peter, Jakob Uszkoreit, and Ashish Vaswani. Self-Attention with Relative Position RepresentationsarXiv preprint arXiv:1803.02155 ,2018.

參考博客

張俊林,深度學習中的注意力機制(2017版),https://blog.csdn.net/malefactor/article/details/78767781

蘇劍林,《Attention is All You Need》淺讀(簡介+代碼),https://kexue.fm/archives/4765

發佈了4 篇原創文章 · 獲贊 1 · 訪問量 2625
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章