「NLP」 聊聊NLP中的attention機制

2019-07-23     有三AI

本篇介紹在NLP中各項任務及模型中引入相當廣泛的Attention機制。在Transformer中,最重要的特點也是Attention。首先詳細介紹其由來,然後具體介紹了其編解碼結構的引入和原理,最後總結了Attention機制的本質。

作者&編輯 | 小Dream哥


1 注意力機制的由來

在深度學習領域,注意力機制模仿的是人類認知的過程。當人看到如下「美女傷心流淚」圖時,細細想一下,人在做出圖片中美女是在傷心流淚的過程,應該是先整體掃描該圖片;然後將視覺注意力集中到美女的臉部;集中到臉部之後,再進一步將視覺注意力集中到眼睛部位。最後發現了眼淚,得出美女是在傷心流淚的結論。

人類在對信息進行處理的過程中,注意力不是平均分散的,而是有重點的分布。受此啟發,做計算機視覺的朋友,開始在視覺處理過程中加入注意力機制(Attention)。隨後,做自然語言處理的朋友們,也開始引入這個機制。在NLP的很多任務中,加入注意力機制後,都取得了非常好的效果。

那麼,在NLP中,Attention機制是什麼呢?從直覺上來說,與人類的注意力分配過程類似,就是在信息處理過程中,對不同的內容分配不同的注意力權重。下面我們詳細看看,在自然語言處理中,注意力機制是怎麼實現的。

2 seq2seq結構及其中的Attention

如上圖所示,是標準的編解碼(seq2seq)機制的結構圖,在機器翻譯、生成式聊天機器人、文本摘要等任務中均有應用。其處理流程是通過編碼器對輸入序列進行編碼,生成一個中間的語義編碼向量C,然後在解碼器中,對語義編碼向量C進行解碼,得到想要的輸出。例如,在中英文翻譯的任務中,編碼器的輸入是中文序列,解碼器的輸出就是翻譯出來的英文序列。

可以看出,這個結構很"乾淨",對於解碼器來說,在解碼出y1,y2,y3時,語義編碼向量均是固定的。我們來分析下這樣是否合理。

假設輸入的是"小明/喜歡/小紅",則翻譯結果應該是"XiaoMing likes XiaoHong"。根據上述架構,在解碼得到"XiaoMing","likes"," XiaoHong"時,引入的語義編碼向量是相同的,也就是"小明","喜歡","小紅"在翻譯時對得到"XiaoMing","likes"," XiaoHong"的作用是相同的。這顯然不合理,在解碼得到"XiaoMing"時,"小明"的作用應該最大才對。

鑒於此,機智的NLP研究者們,認為應該在編解碼器之間加入一種對齊機制,也就是在解碼"XiaoMing"時應該對齊到"小明"。在《Neural Machine Translation By Jointly Learning To Align And Translate》中首次將這種對齊機制引入到機器翻譯中。我們來看看,這是怎樣的一種對齊機制。

我們先回顧一下剛才的編解碼結構,其語義編碼向量和解碼器狀態,通過如下的公式得到:

通常在解碼時語義編碼向量是固定的。若要實現對齊機制,在解碼時語義編碼向量應該隨著輸入動態的變化。鑒於此,《Neural Machine Translation By Jointly Learning To Align And Translate》提出來一種對齊機制,也就是Attention機制。

如上圖示,論文中採用雙向RNN來進行語義的編碼,這不是重點,我們先不關注。其對齊機制整體思想是:編碼時,記下來每一個時刻的RNN編碼輸出(h1,h2,h3,..hn);解碼時,根據前一時刻的解碼狀態,即yi-1,計算出來一組權重(a1,a2,..an),這組權重決定了在當前的解碼時刻,(h1,h2,h3,..hn)分別對解碼的貢獻。這樣就實現了,編解碼的對齊。

下面我們用數學語言描述一下上面的過程。

首先,進行編碼計算(h1,h2,..hn),i時刻的編碼狀態計算公式如下:

然後,開始解碼,加入此時在解碼的i時刻,則需要計算i時刻的編碼向量Ci,通過如下的公式計算:

aij是對不同時刻的編碼狀態取的權重值。由此可見,i時刻的語義編碼向量由不同時刻的編碼狀態加權求和得到。

下面看看,如何取得權重向量a

權重向量ai通過加入解碼器前一個時刻的狀態進行計算得到。eij表示,在計算Ci時,hj的絕對權重。通過對其使用softmax函數,得到aij。aij就是在計算Ci時,hj編碼狀態的權重值。

得到權重向量ai及語義編碼向量Ci後,就可以計算當前時刻的解碼狀態了:

這就是編解碼機制中注意力機制的基本內容了,本質上就是為了實現編解碼之間的對齊,在解碼時根據前一時刻的解碼狀態,獲取不同時刻編碼狀態的權重值並加權求和,進而獲得該時刻語義編碼向量。

那麼,抽離編解碼機制,Attention機制的本質是什麼呢?我們下面來看看。

3 Attention機制的本質

我們回想一下,引入Attention機制的本意,是為了在信息處理的時候,恰當的分配好」注意力「資源。那麼,要分配好注意力資源,就需要給每個資源以不同的權重,Attention機制就是計算權重的過程。

如下圖所示,

如上圖所示,我們由資源Value,需要根據當前系統的其他狀態Key和Querry來計算權重用以分配資源Value。

也就是,可以用如下的數學公式來描述Attention機制:

F函數可以有很多,在transformer中用的是點積。

總結

Transformer中最重要的特點就是引入了Attention,其對於Transformer性能的重要性我們下一篇介紹。總的來說,Adttention機制是一種對齊機制,它通過對系統當前的某些狀態進行評估,來對系統資源進行權重分配,實現對齊,具體可以看機器翻譯的例子。

下期預告:當前最強大的特徵抽取器transformer

文章來源: https://twgreatdaily.com/zh-tw/GPVeImwBmyVoG_1ZEGcy.html