一文讀懂Attention:Facebook曾拿CNN秒殺谷歌,現現在谷歌拿它秒殺全部人


不久前,Google基於Attention機制的機器翻譯研究「Attention is All You Need」賺足了眼球。它放棄了機器翻譯上經常使用的CNN、RNN架構,僅採用Attention機制就拿到了業界BLEU評分上的最佳成績,且訓練過程僅需3天半就能完成。固然,這是用了8顆P100 GPU的結果。html


因而,人們難免好奇,Attention究竟是個什麼鬼?它相對於傳統LSTM的技術優點在哪裏?它所注意的是什麼,究竟能解決CNN、RNN所解決不了的什麼難題?要知道,Facebook此前剛用CNN模型取得了9倍於Google過去的RNN模型的成績。git


一文看懂Attention機制,你想知道的都在這裏了。Enjoy!github


做者 | Jason Brownlee網絡

翻譯 | AI科技大本營架構

參與 | JeyZhang,波波性能


目前採用編碼器-解碼器 (Encode-Decode) 結構的模型很是熱門,是由於它在許多領域較其餘的傳統模型方法都取得了更好的結果。學習


這種結構的模型一般將輸入序列編碼成一個固定長度的向量表示,對於長度較短的輸入序列而言,該模型可以學習出對應合理的向量表示。然而,這種模型存在的問題在於:當輸入序列很是長時,模型難以學到合理的向量表示。ui


在這篇博文中,咱們將探索加入LSTM/RNN模型中的Attention機制是如何克服傳統編碼器-解碼器結構存在的問題的。編碼


閱讀本文,你將學到:翻譯


  • 傳統編碼器-解碼器結構存在的問題及如何將輸入序列編碼成固定的向量表示;

  • Attention機制是如何克服上述問題的,以及在模型輸出時是如何考慮輸出與輸入序列的每一項關係的;

  • 基於Attention機制的LSTM/RNN模型的5個應用領域:機器翻譯、圖片描述、語義蘊涵、語音識別和文本摘要。


讓咱們開始吧。



LSTM/RNN模型的Attention機制,圖片來自Jonas Schleske


長輸入序列帶來的問題


使用傳統編碼器-解碼器的RNN模型先用一些LSTM單元來對輸入序列進行學習,編碼爲固定長度的向量表示;而後再用一些LSTM單元來讀取這種向量表示並解碼爲輸出序列。


採用這種結構的模型在許多比較難的序列預測問題(如文本翻譯)上都取得了最好的結果,所以迅速成爲了目前的主流方法。


例如:

Sequence to Sequence Learning with Neural Networks, 2014

https://arxiv.org/abs/1409.3215

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014

https://arxiv.org/abs/1406.1078


這種結構在不少其餘的領域上也取得了不錯的結果。然而,它存在的一個問題在於:輸入序列不論長短都會被編碼成一個固定長度的向量表示,而解碼則受限於該固定長度的向量表示


這個問題限制了模型的性能,尤爲是當輸入序列比較長時,模型的性能會變得不好(在文本翻譯任務上表現爲待翻譯的原始文本長度過長時翻譯質量較差)。


「一個潛在的問題是,採用編碼器-解碼器結構的神經網絡模型須要將輸入序列中的必要信息表示爲一個固定長度的向量,而當輸入序列很長時則難以保留所有的必要信息(由於太多),尤爲是當輸入序列的長度比訓練數據集中的更長時。」

via:Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015 - https://arxiv.org/abs/1409.0473


序列中的Attention


Attention機制的基本思想是,打破了傳統編碼器-解碼器結構在編解碼時都依賴於內部一個固定長度向量的限制


Attention機制的實現是經過保留LSTM編碼器對輸入序列的中間輸出結果,而後訓練一個模型來對這些輸入進行選擇性的學習而且在模型輸出時將輸出序列與之進行關聯。


換一個角度而言,輸出序列中的每一項的生成機率取決於在輸入序列中選擇了哪些項。


「在文本翻譯任務上,使用Attention機制的模型每生成一個詞時都會在輸入序列中找出一個與之最相關的詞集合。以後模型根據當前的上下文向量 (context vectors) 和全部以前生成出的詞來預測下一個目標詞。

… 它將輸入序列轉化爲一堆向量的序列並自適應地從中選擇一個子集來解碼出目標翻譯文本。這感受上像是用於文本翻譯的神經網絡模型須要「壓縮」輸入文本中的全部信息爲一個固定長度的向量,不論輸入文本的長短。」

via:Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015


雖然模型使用Attention機制以後會增長計算量,可是性能水平可以獲得提高。


另外,使用Attention機制便於理解在模型輸出過程當中輸入序列中的信息是如何影響最後生成序列的。這有助於咱們更好地理解模型的內部運做機制以及對一些特定的輸入-輸出進行debug。


「論文提出的方法可以直觀地觀察到生成序列中的每一個詞與輸入序列中一些詞的對齊關係,這能夠經過對標註 (annotations) 權重參數可視化來實現…每一個圖中矩陣的每一行表示與標註相關聯的權重。由此咱們能夠看出在生成目標詞時,源句子中的位置信息會被認爲更重要。」

via:Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015


大型圖片帶來的問題


被普遍應用於計算機視覺領域的卷積神經網絡模型一樣存在相似的問題: 對於特別大的圖片輸入,模型學習起來比較困難。


由此,一種啓發式的方法是將在模型作預測以前先對大型圖片進行某種近似的表示。


「人類的感知有一個重要的特性是不會當即處理外界的所有輸入,相反的,人類會將Attention專一於所選擇的部分來獲得所須要的信息,而後結合不一樣時間段的局部信息來創建一個內部的場景表示,從而引導眼球的移動及作出決策。」

via: Recurrent Models of Visual Attention, 2014 - https://arxiv.org/abs/1406.6247


這種啓發式方法某種程度上也能夠認爲是考慮了Attention,但在這篇博文中,這種方法並非基於Attention機制的。


基於Attention機制的相關論文以下:

  • Recurrent Models of Visual Attention, 2014 - https://arxiv.org/abs/1406.6247

  • DRAW: A Recurrent Neural Network For Image Generation, 2014 - https://arxiv.org/abs/1502.04623

  • Multiple Object Recognition with Visual Attention, 2014 - https://arxiv.org/abs/1412.7755


Attention在序列預測中的5大應用


這部分將列舉幾個具體的應用實例,介紹Attention機制是如何用在LSTM/RNN模型來進行序列預測的。


1. Attention在文本翻譯任務上的應用


文本翻譯這個實例在前面已經提過了。


給定一個法語的句子做爲輸入序列,須要輸出翻譯爲英語的句子。Attention機制被用在輸出輸出序列中的每一個詞時會專一考慮輸入序列中的一些被認爲比較重要的詞。


咱們對原始的編碼器-解碼器模型進行了改進,使其有一個模型來對輸入內容進行搜索,也就是說在生成目標詞時會有一個編碼器來作這個事情。這打破了以前的模型是基於將整個輸入序列強行編碼爲一個固定長度向量的限制,同時也讓模型在生成下一個目標詞時重點考慮輸入中相關的信息。

via:Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015


Attention在文本翻譯任務(輸入爲法語文本序列,輸出爲英語文本序列)上的可視化


(圖片來自論文Dzmitry Bahdanau, et al., Neural machine translation by jointly learning to align and translate, 2015)


2. Attention在圖片描述上的應用


與以前啓發式方法不一樣的是,基於序列生成的Attention機制能夠應用在計算機視覺相關的任務上,幫助卷積神經網絡重點關注圖片的一些局部信息來生成相應的序列,典型的任務就是對一張圖片進行文本描述。


給定一張圖片做爲輸入,輸出對應的英文文本描述。Attention機制被用在輸出輸出序列的每一個詞時會專一考慮圖片中不一樣的局部信息。


咱們提出了一種基於Attention的方法,該方法在3個標準數據集上都取得了最佳的結果……同時展示了Attention機制可以更好地幫助咱們理解模型地生成過程,模型學習到的對齊關係與人類的直觀認知很是的接近(以下圖)。



Attention在圖片描述任務(輸入爲圖片,輸出爲描述的文本)上的可視化


(圖片來自論文Attend and Tell: Neural Image Caption Generation with Visual Attention, 2016)— Show, Attend and Tell: Neural Image Caption Generation with Visual Attention, 2016 - https://arxiv.org/abs/1502.03044


3. Attention在語義蘊涵 (Entailment) 中的應用


給定一個用英文描述的前提和假設做爲輸入,輸出假設與前提是否矛盾、是否相關或者是否成立。


舉個例子:


前提:在一個婚禮派對上拍照


假設:有人結婚了


該例子中的假設是成立的。


Attention機制被用於關聯假設和前提描述文本之間詞與詞的關係。


咱們提出了一種基於LSTM的神經網絡模型,和把每一個輸入文本都獨立編碼爲一個語義向量的模型不一樣的是,該模型同時讀取前提和假設兩個描述的文本序列並判斷假設是否成立。咱們在模型中加入了Attention機制來找出假設和前提文本中詞/短語之間的對齊關係。……加入Attention機制可以使模型在實驗結果上有2.6個點的提高,這是目前數據集上取得的最好結果…

via:Reasoning about Entailment with Neural Attention, 2016 - https://arxiv.org/abs/1509.06664


Attention在語義蘊涵任務(輸入是前提文本,輸出是假設文本)上的可視化(圖片來自論文Reasoning about Entailment with Neural Attention, 2016)


4. Attention在語音識別上的應用


給定一個英文的語音片斷做爲輸入,輸出對應的音素序列。


Attention機制被用於對輸出序列的每一個音素和輸入語音序列中一些特定幀進行關聯。


一種基於Attention機制的端到端可訓練的語音識別模型,可以結合文本內容和位置信息來選擇輸入序列中下一個進行編碼的位置。該模型有一個優勢是可以識別長度比訓練數據長得多的語音輸入。

via:Attention-Based Models for Speech Recognition, 2015. - https://arxiv.org/abs/1506.07503




Attention在語音識別任務(輸入是音幀,輸出是音素的位置)上的可視化(圖片來自論文Attention-Based Models for Speech Recognition, 2015)


5. Attention在文本摘要上的應用


給定一篇英文文章做爲輸入序列,輸出一個對應的摘要序列。


Attention機制被用於關聯輸出摘要中的每一個詞和輸入中的一些特定詞。


在最近神經網絡翻譯模型的發展基礎之上,提出了一個用於生成摘要任務的基於Attention的神經網絡模型。經過將這個機率模型與一個生成式方法相結合來生成出準確的摘要。

via:A Neural Attention Model for Abstractive Sentence Summarization, 2015 - https://arxiv.org/abs/1509.00685



Attention在文本摘要任務(輸入爲文章,輸出爲文本摘要)上的可視化(圖片來自論文A Neural Attention Model for Abstractive Sentence Summarization, 2015)


進一步閱讀


若是你想進一步地學習如何在LSTM/RNN模型中加入Attention機制,可閱讀如下論文:


Attention and memory in deep learning and NLP

http://www.wildml.com/2016/01/attention-and-memory-in-deep-learning-and-nlp/

Attention Mechanism

https://blog.heuritech.com/2016/01/20/attention-mechanism/

Survey on Attention-based Models Applied in NLP

http://yanran.li/peppypapers/2015/10/07/survey-attention-model-1.html

What is exactly the attention mechanism introduced to RNN

https://www.quora.com/What-is-exactly-the-attention-mechanism-introduced-to-RNN-recurrent-neural-network-It-would-be-nice-if-you-could-make-it-easy-to-understand(Quora問答)

What is Attention Mechanism in Neural Networks?

https://www.quora.com/What-is-Attention-Mechanism-in-Neural-Networks


目前Keras官方尚未單獨將Attention模型的代碼開源,下面有一些第三方的實現:


Deep Language Modeling for Question Answering using Keras

http://ben.bolte.cc/blog/2016/language.html

Attention Model Available!

https://github.com/fchollet/keras/issues/2067

Keras Attention Mechanism

https://github.com/philipperemy/keras-attention-mechanism

Attention and Augmented Recurrent Neural Networks

http://distill.pub/2016/augmented-rnns/

How to add Attention on top of a Recurrent Layer (Text Classification)

https://github.com/fchollet/keras/issues/4962

Attention Mechanism Implementation Issue https://github.com/fchollet/keras/issues/1472

Implementing simple neural attention model (for padded inputs)https://github.com/fchollet/keras/issues/2612

Attention layer requires another PR

https://github.com/fchollet/keras/issues/1094

seq2seq library

https://github.com/farizrahman4u/seq2seq


總結


經過這篇博文,你應該學習到了Attention機制是如何應用在LSTM/RNN模型中來解決序列預測存在的問題。


具體來講,是這三個問題:

  1. 採用傳統編碼器-解碼器結構的LSTM/RNN模型存在一個問題,不論輸入長短都將其編碼成一個固定長度的向量表示,這使模型對於長輸入序列的學習效果不好(解碼效果不好)。

  2. 而Attention機制則克服了上述問題,原理是在模型輸出時會選擇性地專一考慮輸入中的對應相關的信息。

  3. 使用Attention機制的方法被普遍應用在各類序列預測任務上,包括文本翻譯、語音識別等。


原文地址

http://machinelearningmastery.com/attention-long-short-term-memory-recurrent-neural-networks/

相關文章
相關標籤/搜索