理解注意力机制好文
注意力(Attention)機(jī)制,是神經(jīng)機(jī)器翻譯模型中非常重要的一環(huán),直接影響了翻譯的準(zhǔn)確度與否。
可以這么說,沒有注意力機(jī)制,機(jī)器翻譯的水平只有60-70分。有了注意力機(jī)制,翻譯的水平就能夠達(dá)到80-90分了。
它是如何發(fā)揮作用的呢?很多人一解釋起來,就是鋪天蓋地的數(shù)學(xué)公式,讓人還沒來得及看,就直接懵逼了。
最近,有一篇文章用圖解的方式,完整地介紹了“注意力機(jī)制”的原理邏輯,并以谷歌神經(jīng)翻譯為例,解釋了它的運(yùn)作機(jī)制。
作者說,寫這篇文章的目的,是為了讓大家在不去看數(shù)學(xué)公式的情況下,掌握注意力的概念。他也會(huì)以人類譯者為例,將相關(guān)的概念形象化。
神經(jīng)機(jī)器翻譯為何需要注意力機(jī)制?
神經(jīng)機(jī)器翻譯方法誕生于2013年。那一年,牛津大學(xué)的研究團(tuán)隊(duì)發(fā)表了一篇題為Recurrent Continuous Translation Models的論文,提出了一個(gè)用于機(jī)器翻譯的新模型。
這個(gè)新模型使用的是端到端的編碼器-解碼器結(jié)構(gòu)。
在處理翻譯工作的時(shí)候,先用卷積神經(jīng)網(wǎng)絡(luò)(CNN),將原始文本編碼成連續(xù)的向量,然后使用循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)將連續(xù)向量轉(zhuǎn)換成目標(biāo)語言。
但由于梯度爆炸/消失的存在,但使用這種方法很難獲取更長句子背后的信息,導(dǎo)致翻譯性能大幅下降。
在2014年,當(dāng)時(shí)在谷歌工作的Ilya Sutskever等人提出了序列到序列(seq2seq)學(xué)習(xí)的方法,將RNN同時(shí)用于編碼器和解碼器。
也把RNN的典型變體長短時(shí)記憶(LSTM)引入到了神經(jīng)機(jī)器翻譯中。這樣以來,梯度爆炸/消失就得到了控制,長距離重新排序的問題得到了緩解。
正所謂是摁下葫蘆起來瓢,新的問題又出現(xiàn)了。seq2seq方法中,解碼器從編碼器中接收的唯一信息, 是最后編碼器的隱藏狀態(tài),這是一個(gè)向量表征,是輸入序列文本的數(shù)字概要。
具體如下圖中的兩個(gè)紅色節(jié)點(diǎn)所示。
對(duì)于像下圖這樣很長的輸入文本來說,我們特別希望這個(gè)隱藏狀態(tài),能夠充分概括輸入序列,解碼器就能夠根據(jù)這一個(gè)向量表征來很好的完成轉(zhuǎn)換了。
但這很難,災(zāi)難性的遺忘出現(xiàn)了。比如上面說的這兩個(gè)段落的字,在看到這的時(shí)候,你還能記得多少?能把它們翻譯成英語嗎?
除此之外,還有一個(gè)問題。在基于RNN的模型中,不管原始文本的句子有多長,都會(huì)被壓縮成一個(gè)固定長度的向量。
在解碼的時(shí)候,會(huì)有各種麻煩事,也沒辦法確定準(zhǔn)確的信息。特別是句子很長的時(shí)候,更麻煩。
怎么辦?“注意力機(jī)制”登場(chǎng)
2014年,DeepMind團(tuán)隊(duì)發(fā)表Recurrent Models of Visual Attention,提出了注意力機(jī)制,并將其用于圖像分類的任務(wù)中。
與CNN相比,使用注意力機(jī)制的RNN取得了非常好的效果,直接帶起了一波研究注意力機(jī)制的熱潮。
很快,注意力就出現(xiàn)在了神經(jīng)機(jī)器翻譯中。
在ICLR 2015上,蒙特利爾大學(xué)的Yoshua Bengio團(tuán)隊(duì)發(fā)表了一篇論文,在神經(jīng)機(jī)器翻譯中引入了注意力機(jī)制。(這篇論文在2014年9月,就已經(jīng)提交到了arXiv上)
注意力,是編碼器和解碼器之間的接口。有了它,解碼器接收到的,就不僅僅是一個(gè)統(tǒng)一的向量表征了,還有來自編碼器每個(gè)時(shí)間步的向量表征,比如下圖中的綠色節(jié)點(diǎn)。
通過注意力機(jī)制,模型就能夠有選擇地關(guān)注輸入序列中有用的部分,從而在解碼器和編碼器之間對(duì)齊。
之后,神經(jīng)機(jī)器翻譯所面臨的問題,基本上也都有了解決方案。
2016年,谷歌推出了首個(gè)基于神經(jīng)機(jī)器翻譯的翻譯系統(tǒng)。
現(xiàn)在,神經(jīng)機(jī)器翻譯已經(jīng)成為了主流翻譯工具的核心方法。
在這段發(fā)展歷程中,RNN和LSTM,已經(jīng)有了大量的介紹。注意力機(jī)制到底是怎么運(yùn)作的呢?它到底有何魔力?
接下來請(qǐng)你收看——
圖解注意力運(yùn)作機(jī)制
注意力一共分類兩種。一種是全局注意力,使用所有編碼器隱藏狀態(tài)。另一種是局部注意力,使用的是編碼器隱藏狀態(tài)的子集。在這篇文章中,提到的注意力,都是全局注意力。
在開始之前,需要看換一下僅基于seq2seq方法的模型是如何翻譯的。
以一個(gè)將文本從德語翻譯成英語的翻譯員為例。
使用“seq2seq”方法的話,他會(huì)從頭開始逐字逐句閱讀德語文本,然后逐字逐句將文本翻譯成英語。如果句子特別長的話,他在翻譯的時(shí)候,可能就已經(jīng)忘了之前文本上的內(nèi)容了。
如果使用seq2seq+注意力的方法,他在逐字逐句閱讀德語文本的時(shí)候,會(huì)寫下關(guān)鍵詞。然后,利用這些關(guān)鍵詞,將文本翻譯成英語。
在模型中,注意力會(huì)為每個(gè)單詞打一個(gè)分,將焦點(diǎn)放在不同的單詞上。然后,基于softmax得分,使用編碼器隱藏狀態(tài)的加權(quán)和,來聚合編碼器隱藏狀態(tài),以獲得語境向量。
注意力層的實(shí)現(xiàn)可以分為6個(gè)步驟。
第一步:準(zhǔn)備隱藏狀態(tài)
首先,準(zhǔn)備第一個(gè)解碼器的隱藏狀態(tài)(紅色)和所有可用的編碼器的隱藏狀態(tài)(綠色)。在我們的例子中,有4個(gè)編碼器的隱藏狀態(tài)和當(dāng)前解碼器的隱藏狀態(tài)。
第二步:獲取每個(gè)編碼器隱藏狀態(tài)的分?jǐn)?shù)
通過評(píng)分函數(shù)來獲取每個(gè)編碼器隱藏狀態(tài)的分?jǐn)?shù)(標(biāo)量)。在這個(gè)例子中,評(píng)分函數(shù)是解碼器和編碼器隱藏狀態(tài)之間的點(diǎn)積。
decoder_hidden = [?10,?5,?10]
encoder_hidden score
---------------------
[?0, 1, 1]?15(=?10×?0+?5×?1+?10×?1, the dot product)
[?5, 0, 1]?60
[?1, 1, 0]?15
[?0, 5, 1]?35
在上面的例子中,編碼器隱藏狀態(tài)[5,0,1]的注意力分?jǐn)?shù)為60,很高。這意味著要翻譯的下一個(gè)詞將受到這個(gè)編碼器隱藏狀態(tài)的嚴(yán)重影響。
第三步:通過softmax層運(yùn)行所有得分
我們將得分放到softmax函數(shù)層,使softmax得分(標(biāo)量)之和為1。這些得分代表注意力的分布。
encoder_hidden score score^
-----------------------------
[?0, 1, 1]?150
[?5, 0, 1]?601
[?1, 1, 0]?150
[?0, 5, 1]?350
需要注意的是,基于softmaxed得分的score^。注意力僅按預(yù)期分布在[5,0,1]上。實(shí)際上,這些數(shù)字不是二進(jìn)制數(shù),而是0到1之間的浮點(diǎn)數(shù)。
第四步:將每個(gè)編碼器的隱藏狀態(tài)乘以其softmax得分
將每個(gè)編碼器的隱藏狀態(tài)與其softmaxed得分(標(biāo)量)相乘,就能獲得對(duì)齊向量。這就是發(fā)生對(duì)齊機(jī)制的地方。
encoder_hiddenscorescore^?alignment
----------------------------------------
[0, 1, 1]15 0?[0, 0, 0]
[5, 0, 1]60 1?[5, 0, 1]
[1, 1, 0]15 0?[0, 0, 0]
[0, 5, 1]35 0?[0, 0, 0]
由于注意力分?jǐn)?shù)很低,除了[5,0,1]之外的所有編碼器隱藏狀態(tài)的對(duì)齊都減少到了0。這意味著,我們可以預(yù)期,第一個(gè)被翻譯的單詞,應(yīng)該與帶有[5,0,1]嵌入的輸入單詞匹配起來。
第五步:將對(duì)齊向量聚合起來
將對(duì)齊向量聚合起來,得到語境向量。
encoder_hidden score score^ alignment
----------------------------------------
[?0, 1, 1]?150[?0,?0,?0]
[?5, 0, 1]?601[?5,?0,?1]
[?1, 1, 0]?150[?0,?0,?0]
[?0, 5, 1]?350[?0,?0,?0]
context = [?0+?5+?0+?0,?0+?0+?0+?0,?0+?1+?0+?0] = [?5,?0,?1]
第六步:將語境向量輸入到解碼器中
這一步怎么做,取決于模型的架構(gòu)設(shè)計(jì)。在接下來的示例中,會(huì)看到在模型架構(gòu)中,解碼器如何利用語境向量。
整體的運(yùn)行機(jī)制,如下圖所示:
那么,注意力機(jī)制是如何發(fā)揮作用的呢?
反向傳播。反向傳播將盡一切努力確保輸出接近實(shí)際情況。這是通過改變RNN中的權(quán)重和評(píng)分函數(shù)(如果有的話)來完成的。
這些權(quán)重將影響編碼器的隱藏狀態(tài)和解碼器的隱藏狀態(tài),進(jìn)而影響注意力得分。
谷歌神經(jīng)機(jī)器翻譯如何應(yīng)用注意力機(jī)制?
在介紹谷歌神經(jīng)機(jī)器翻譯模型之前,還需要補(bǔ)補(bǔ)課,看一下另外兩個(gè)模型。
Bengio團(tuán)隊(duì)的研究
這是一個(gè)具有雙向編碼器的seq2seq+注意力模型,以下是模型架構(gòu)的注意事項(xiàng):
1、編碼器是一個(gè)雙向(正向+反向)門控循環(huán)單元(BiGRU)。解碼器是一個(gè)GRU,它的初始隱藏狀態(tài),是從反向編碼器GRU的最后隱藏狀態(tài)修改得來的向量。
2、注意力層中的評(píng)分函數(shù)使用的是additive/concat。
3、到下一個(gè)解碼器時(shí)間步的輸入是來自前一個(gè)解碼器時(shí)間步(粉紅色)的輸出和來自當(dāng)前時(shí)間步(深綠色)語境向量之間的串聯(lián)。
這個(gè)模型架構(gòu),在WMT’14英語-法語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是26.75。
(論文鏈接在文末)
相當(dāng)于在將德語文本翻譯成英語的時(shí)候,用了兩個(gè)翻譯員。
翻譯員A,在逐字逐句閱讀德語文本的時(shí)候,會(huì)寫下關(guān)鍵詞。翻譯員B,在倒著逐字逐句閱讀德語文本的時(shí)候,寫下關(guān)鍵詞。
這兩個(gè)翻譯員,會(huì)定期討論他們?cè)谟懻撝伴喿x的每一個(gè)單詞。
讀完德語文本之后,翻譯員B會(huì)根據(jù)他們兩個(gè)之間的討論,以及選擇的關(guān)鍵詞,將文本翻譯成英語。
在這里,翻譯員A,是正向RNN,翻譯員B,是反向RNN。
斯坦福大學(xué)團(tuán)隊(duì)的研究
與Bengio等人的模型相比,斯坦福大學(xué)團(tuán)隊(duì)提出的模型架構(gòu),更具有概括性,也更加簡(jiǎn)單。要點(diǎn)如下:
1、編碼器是一個(gè)雙層的LSTM網(wǎng)絡(luò)。解碼器也具有相同的架構(gòu),它初始隱藏狀態(tài)是最后的編碼器隱藏狀態(tài)。
2、他們模型的評(píng)分函數(shù)有四種,分別是:additive/concat、dot product、location-based和’general’。
3、當(dāng)前解碼器時(shí)間步的輸出與來自當(dāng)前時(shí)間步的語境向量之間的串聯(lián),會(huì)輸入到前饋神經(jīng)網(wǎng)絡(luò)中,來得出當(dāng)前解碼器時(shí)間步的最終輸出(粉紅色)。
(論文鏈接在文末)
這個(gè)模型架構(gòu),在WMT’15英語-德語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是25.9。
簡(jiǎn)單來說,這是一個(gè)采用雙層堆疊編碼器的seq2seq+注意力模型。
在將德語文本翻譯到英語時(shí),翻譯員A一樣在閱讀德語文本的時(shí)候,寫下關(guān)鍵詞。在這里,翻譯員B比翻譯員A要更專業(yè),他也會(huì)閱讀同樣的德語文本,并寫下關(guān)鍵詞。
主要注意的是,翻譯員A閱讀的每個(gè)單詞,都要向翻譯員B報(bào)告。完成閱讀后,他們會(huì)根據(jù)他們選擇的關(guān)鍵詞,將文本翻譯成英語。
谷歌的神經(jīng)機(jī)器翻譯模型
谷歌神經(jīng)機(jī)器翻譯,集兩者之大成,但受Bengio等人的模型影響多一點(diǎn)。要點(diǎn)是:
1、編碼器由8個(gè)LSTM組成,其中第一個(gè)是雙向的(輸出是連接的),連續(xù)層的輸出之間有殘差連接(從第3層開始)。解碼器是8個(gè)單向LSTM的獨(dú)立堆棧。
2、評(píng)分函數(shù)使用的是additive/concat。
3、解碼器下一個(gè)時(shí)間步的輸入是前一個(gè)時(shí)間步(粉紅色)的輸出與當(dāng)前時(shí)間步(深綠色)的語境向量之間的串聯(lián)。
這個(gè)模型架構(gòu),在WMT’14英語-法語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是38.95。在WMT’14英語-德語數(shù)據(jù)集上的BLEU分?jǐn)?shù)是24.17。
(論文鏈接在文末)
這是一個(gè)具有8個(gè)堆疊編碼器的seq2seq(+雙向+殘差連接)+注意力的模型。
相當(dāng)于在將德語文本翻譯成英語的時(shí)候,用了八個(gè)翻譯員,分別是翻譯員A、B、C…H。每一位翻譯員都閱讀相同的德語文本。
對(duì)于文本中的每一個(gè)單詞,翻譯員A都會(huì)給翻譯員B分享他的發(fā)現(xiàn),翻譯員B會(huì)改進(jìn)這些發(fā)現(xiàn),然后與翻譯員C分享,一直重復(fù)這個(gè)過程,直到翻譯員H結(jié)束。
此外,在閱讀德語文本的時(shí)候,翻譯員H會(huì)基于他知道的和收到的信息寫下關(guān)鍵詞。
每個(gè)人都讀完了這個(gè)英語文本后,翻譯員A就會(huì)被告知翻譯第一個(gè)單詞。
首先,他試圖回憶文本內(nèi)容,給出翻譯,然后與翻譯員B分享他的答案,翻譯員B改進(jìn)答案并與翻譯員C分享,一直重復(fù)這個(gè)過程,直到翻譯員H結(jié)束。
然后,翻譯員H會(huì)根據(jù)他寫下的關(guān)鍵詞給出第一個(gè)詞的翻譯。然后重復(fù)這個(gè)過程,直到翻譯結(jié)束。
Yoshua Bengio等人研究的論文
Neural Machine Translation by Jointly Learning to Align and Translate
https://arxiv.org/abs/1409.0473
斯坦福大學(xué)團(tuán)隊(duì)的論文
Effective Approaches to Attention-based Neural Machine Translation
https://arxiv.org/abs/1508.04025
谷歌神經(jīng)機(jī)器翻譯模型的論文
Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation
https://arxiv.org/abs/1609.08144
Recurrent Models of Visual Attention
https://papers.nips.cc/paper/5542-recurrent-models-of-visual-attention.pdf
Recurrent Continuous Translation Models
https://www.aclweb.org/anthology/D13-1176
Attention Is All You Need
https://arxiv.org/abs/1706.03762
Sequence to Sequence Learning with Neural Networks
https://arxiv.org/abs/1409.3215
教程資源:
TensorFlow’s seq2seq Tutorial with Attention (Tutorial on seq2seq+attention)
https://github.com/tensorflow/nmt
入門博客文章:
Lilian Weng’s Blog on Attention (Great start to attention)
https://lilianweng.github.io/lil-log/2018/06/24/attention-attention.html#a-family-of-attention-mechanisms
Jay Alammar’s Blog on Seq2Seq with Attention (Great illustrations and worked example on seq2seq+attention)
https://jalammar.github.io/visualizing-neural-machine-translation-mechanics-of-seq2seq-models-with-attention/
寫這篇文章的,是一位名叫Raimi Bin Karim新加坡人,現(xiàn)在是AI Singapore中的一名AI學(xué)徒。AI Singapore,是一家為新加坡培育人工智能產(chǎn)業(yè)與人才的機(jī)構(gòu)。
原文鏈接:
https://towardsdatascience.com/attn-illustrated-attention-5ec4ad276ee3
總結(jié)
- 上一篇: python 项目中的requireme
- 下一篇: 注意力机制并不是关注输入的位置