1. 程式人生 > >AAAI2018中的自註意力機制(Self-attention Mechanism)

AAAI2018中的自註意力機制(Self-attention Mechanism)

自己的 總結 for ali long 不同 簡單 net 階段

近年來,註意力(Attention)機制被廣泛應用到基於深度學習的自然語言處理(NLP)各個任務中。隨著註意力機制的深入研究,各式各樣的attention被研究者們提出,如單個、多個、交互式等等。去年6月,google機器翻譯團隊在arXiv上的《Attention is all you need》論文受到了大家廣泛關註,其中,他們提出的自註意力(self-attention)機制和多頭(multi-head)機制也開始成為神經網絡attention的研究熱點,在各個任務上也取得了不錯的效果。在AAAI2018的接收論文中,有30余篇都使用了attention機制,其中有3篇使用到了self-attention。本人就這篇論文中的self-attention以及一些相關工作進行了學習總結(其中也參考借鑒了張俊林博士的博客“深度學習中的註意力機制(2017版)”和蘇劍林的“《Attention is All You Need》淺讀(簡介+代碼)”),和大家一起分享。

一、引言

Attention機制由視覺圖像領域提出來,在2014年,Bahdanau在《Neural Machine Translation by Jointly Learning to Align and Translate》上將其應用到機器翻譯任務上,這是第一個應用到NLP領域的論文。之後,15、16、17乃至今年,都有各式各樣的attention機制結合深度學習網絡模型被用於處理各種NLP的任務。在2017年,google機器翻譯團隊發表的《Attention is all you need》中大量使用了自註意力機制(self-attention)來學習文本表示,脫離傳統的RNN/CNN,同時也使用了新穎的multi-head機制。自註意力機制也成為了大家近期研究的熱點,可以應用到各種NLP任務上。

對於傳統的機器翻譯,我們可以使用sequence to sequence(encoder-decoder)模型來進行翻譯,如下圖所示。

技術分享圖片

這裏,我們可以把上圖抽象出來得到下圖。輸入序列{x1, x2, x3, x4},傳入編碼器(encoder)中進行編碼,得到語義編碼c,然後通過解碼器(decoder)進行解碼,得到輸出序列{y1, y2, y3},輸入與輸出的個數可以不相等。

技術分享圖片

但是,這種方式會有一個問題:對於長句子的翻譯會造成一定的困難,而attention機制的引入可以解決這個問題。如下圖所示:

技術分享圖片

這裏,我們可以看到,decoder中有幾個輸出序列,對應的語義編碼c則有相同的數量,即一個語義編碼ci

對應一個輸出yi。而每個ci就是由attention機制得到,具體公式如下:

技術分享圖片

回顧了傳統的attention模型之後,我們看一下google翻譯團隊對attention模型的高度抽取概況。他們將其映射為一個query和一系列<key, value>,最終得到輸出attention value的過程。這裏的query相當於decoder中的si-1,key與value都來自於encoder的hj,區別在於前後狀態的hj。然後計算query與keyi的相似度,並與valuei進行相乘,然後求和。

技術分享圖片

上面提到的query與key之間計算相似度有許多方法,如dot、general、concat和MLP等方式,具體公式如下所示。而attention模型抽象為query、key和value之間的相似度計算,總共有3個階段。第一階段:query與keyi使用特定的相似度函數計算相似度,得到si;第二階段:對si進行softmax()歸一化得到ai;第三階段,將ai與valuei對應相乘再求和,得到最終的attention value。其實對比傳統的attention公式,我們可以看出,這兩套公式還是很像的。

技術分享圖片

二、自註意力機制

下面主要介紹《Attention is all you need》這篇論文,發表在NIPS2017上。這篇論文的創新性在於:(1)不同於以往基於RNN的seq2seq模型框架,該論文使用了attention機制代替了RNN搭建模型;(2)提出了多頭註意力機制(multi-head self-attention);(3)在WMT2014語料中,取得了先進結果,並且訓練速度要快很多。

該模型的架構如圖所示,依然符合seq2seq的架構,由encoder和decoder組成。在編碼器中由許多重復的網絡塊組成,一個網絡塊由一個多頭attention層和一個前向神經網絡組成(而非單獨使用attention模型),整個編碼器棧式搭建了N個塊。Decoder與encoder類似,除了編碼器到解碼器的學習外,還有解碼器到解碼器的學習。同時,為了能夠更深層次的搭建網絡結構,該模型使用了殘差結構(Add)和對層的規範化(Norm)。

技術分享圖片

本文對基本的attention模型進行了少許改進,提出了縮放點積attention(scaled dot-Product attention)。在使用點積運算進行相似度計算的基礎上,縮小了技術分享圖片倍(dk為詞向量的維度)。其目的在於調節的作用,使得內積不易過大。

技術分享圖片

多頭attention(Multi-head attention)的結構賀公式如圖所示。首先,需要對query、key和value進行一個線性變換;然後輸入到縮放點積attention機制,重復做h次,每次的輸入為線性變換後的原始輸入,這裏,多頭就是指做多次attention之後進行拼接,每一次算一個頭,每次Q、K和V的線性變換參數W是不一樣的;最後,將拼接後的模型做一次線性變換,得到的值為多頭attention的結果。可以看出,多頭attention與傳統的attention區別在於計算了h次,這樣可以從不同的維度和表示子空間裏學習到相關的信息,可通過attention可視化機制來驗證。

技術分享圖片

在整個模型中,從編碼器到解碼器的地方中使用了多頭attention進行連接,K、V和Q分別是編碼器的層輸出(這裏K=V)和解碼器中多頭attention的輸入,這其實跟主流的機器翻譯模型中的attention一樣,進行傳統的翻譯對齊任務。然後,在編碼器和解碼器中都使用了多頭自註意力self-attention來學習文本的表示,K=V=Q,即裏面的每個詞都要和該句子中的所有詞進行attention計算,其主要目的是學習句子內部的詞依賴關系,捕獲句子中的內部結構。

技術分享圖片

這裏,要著重說一下位置編碼。因為該模型沒有使用RNN等序列模型,不能考慮到時序信息,因此,這裏擬合了一個位置編碼函數,來模擬詞語的順序。實驗結果表明,這種方式是合理有效的。

技術分享圖片

三、AAAI2018中的self-attention

在新放出來的AAAI2018的論文中,共計有30余篇使用attention模型處理各種NLP任務,這裏,主要介紹使用self-attention機制的三篇論文。

1、DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding

這篇論文是悉尼科技大學UTS的張成奇教授發表的論文,發表在AAAI2018上。該論文旨在提出一種通用框架,在自然語言推理(natural language inference)、情感分析、語義關系(semantic relatedness)、句子分類(sentence classifications)等任務中均取得較好的效果。

創新點主要有兩點:第一,多維度:這裏的attention被用於計算每個特征上;第二,方向性:使用一個或多個位置mask對attention進行建模。

技術分享圖片

這裏,輸入序列為x = [x1, x2, ..., xn],詞向量維度為de

首先,對embedding層經過全連接層,得到hidden state:h = [h1, h2, ..., hn],公式如下:

技術分享圖片

然後,計算hi與hj之間的相似度函數f(hi, hj),公式如下所示。其中c=5。

技術分享圖片

公式裏的M為位置編碼mask。本文共提出三種位置mask方式,分別為前向(fw)、後向(bw)和對角(diag),公式如下:

技術分享圖片 技術分享圖片

然後,對得到的相似度函數f(hi, hj)進行softmax歸一化操作,得到(0, 1)之間的數P。接著,對應與輸入向量x進行相乘,求和,最終得到輸出向量s。

同時,本文引入門機制。對向量s和隱層狀態h進行線性變換後再求和,並進行sigmoid操作,得到F。用門F控制h和s的比例,得到最終的輸出向量u。

技術分享圖片

本文,在輸入向量上,分別使用前向自註意力機制和後向自註意力機制,將兩部分的結果進行拼接,並使用多維度的self-attention,最後輸出。實驗表明,該模型在很多任務中均取得了很好的結果。

技術分享圖片

2、Deep Semantic Role Labeling with Self-Attention

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

技術分享圖片

3、Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction

這篇論文是AndrewMcCallum團隊應用self-attention在生物醫學關系抽取任務上的一個工作,應該是已經被NAACL2018接收。這篇論文作者提出了一個文檔級別的生物關系抽取模型,裏面做了不少工作,感興趣的讀者可以更深入閱讀原文。我們這裏只簡單提一下他們self-attention的應用部分。論文模型的整體結構如下圖。

技術分享圖片

四、總結

Google提出的self-attention是attention模型的一種特殊形式,是自己學習自己的過程,Q=K=V;提出的multi-head attention是通過計算多次來捕獲不同維度不同子空間上的相關信息。Self-attention可以不考慮詞與詞之間的距離而直接計算依賴關系,能夠學習到一個句子的內部結構,能夠簡單並行的計算,可以脫離CNN和RNN,但是需要合理的考慮和設置位置函數。當然,從AAAI2018年的論文可以看出,self-attention也可以當作一個層,與RNN、CNN和FNN等配合使用,能夠更好的解決NLP領域的任務。

參考文獻:

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

[2] Shen, T.; Zhou, T.; Long, G.; Jiang, J.; Pan, S.; and Zhang, C. Disan: Directional self-attention network for rnn/cnn-free language understanding. AAAI 2018.

[3] Verga P, Strubell E, McCallum A. Simultaneously Self-Attending to All Mentions for Full-Abstract Biological Relation Extraction. AAAI 2018.

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

參考博客:

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

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

AAAI2018中的自註意力機制(Self-attention Mechanism)