理解LSTM/RNN中的Attention機制

轉自:http://www.jeyzhang.com/understand-attention-in-rnn.html,感謝分享!

導讀

目前采用編碼器-解碼器 (Encode-Decode) 結構的模型非常熱門,是因為它在許多領域較其他的傳統模型方法都取得了更好的結果。這種結構的模型通常將輸入序列編碼成一個固定長度的向量表示,對于長度較短的輸入序列而言,該模型能夠學習出對應合理的向量表示。然而,這種模型存在的問題在于:當輸入序列非常長時,模型難以學到合理的向量表示

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

通過閱讀這篇博文,你將會學習到:

  • 傳統編碼器-解碼器結構存在的問題及如何將輸入序列編碼成固定的向量表示;
  • Attention機制是如何克服上述問題的,以及在模型輸出時是如何考慮輸出與輸入序列的每一項關系的;
  • 基于attention機制的LSTM/RNN模型的5個應用領域:機器翻譯、圖片描述、語義蘊涵、語音識別和文本摘要。

讓我們開始學習吧。

長輸入序列帶來的問題

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

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

例如:

  • Sequence to Sequence Learning with Neural Networks, 2014
  • Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, 2014

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

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

“一個潛在的問題是,采用編碼器-解碼器結構的神經網絡模型需要將輸入序列中的必要信息表示為一個固定長度的向量,而當輸入序列很長時則難以保留全部的必要信息(因為太多),尤其是當輸入序列的長度比訓練數據集中的更長時。”

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

使用attention機制

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

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

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

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

… 它將輸入序列轉化為一堆向量的序列并自適應地從中選擇一個子集來解碼出目標翻譯文本。這感覺上像是用于文本翻譯的神經網絡模型需要“壓縮”輸入文本中的所有信息為一個固定長度的向量,不論輸入文本的長短。”

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

雖然模型使用attention機制之后會增加計算量,但是性能水平能夠得到提升。另外,使用attention機制便于理解在模型輸出過程中輸入序列中的信息是如何影響最后生成序列的。這有助于我們更好地理解模型的內部運作機制以及對一些特定的輸入-輸出進行debug。

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

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

大型圖片帶來的問題

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

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

“人類的感知有一個重要的特性是不會立即處理外界的全部輸入,相反的,人類會將注意力專注于所選擇的部分來得到所需要的信息,然后結合不同時間段的局部信息來建立一個內部的場景表示,從而引導眼球的移動及做出決策。”

—?Recurrent Models of Visual Attention, 2014

這種啟發式方法某種程度上也可以認為是考慮了attention,但在這篇博文中,這種方法并不認為是基于attention機制的。

基于attention機制的相關論文如下:

  • Recurrent Models of Visual Attention, 2014
  • DRAW: A Recurrent Neural Network For Image Generation, 2014
  • Multiple Object Recognition with Visual Attention, 2014

基于attention模型的應用實例

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

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

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

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

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

— 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機制能夠更好地幫助我們理解模型地生成過程,模型學習到的對齊關系與人類的直觀認知非常的接近(如下圖)。

—?Show, Attend and Tell: Neural Image Caption Generation with Visual Attention, 2016

Attention在圖片描述任務(輸入為圖片,輸出為描述的文本)上的可視化(圖片來源于Attend and Tell: Neural Image Caption Generation with Visual Attention, 2016)

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

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

舉個例子:

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

假設:有人結婚了

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

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

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

—?Reasoning about Entailment with Neural Attention, 2016

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

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

給定一個英文的語音片段作為輸入,輸出對應的音素序列。

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

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

—?Attention-Based Models for Speech Recognition, 2015.

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

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

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

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

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

—?A Neural Attention Model for Abstractive Sentence Summarization, 2015

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

進一步的閱讀

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

  • Attention and memory in deep learning and NLP
  • Attention Mechanism
  • Survey on Attention-based Models Applied in NLP
  • What is exactly the attention mechanism introduced to RNN??(來自Quora)
  • What is Attention Mechanism in Neural Networks?

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

  • Deep Language Modeling for Question Answering using Keras
  • Attention Model Available!
  • Keras Attention Mechanism
  • Attention and Augmented Recurrent Neural Networks
  • How to add Attention on top of a Recurrent Layer (Text Classification)
  • Attention Mechanism Implementation Issue
  • Implementing simple neural attention model (for padded inputs)
  • Attention layer requires another PR
  • seq2seq library

總結

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

具體而言,采用傳統編碼器-解碼器結構的LSTM/RNN模型存在一個問題:不論輸入長短都將其編碼成一個固定長度的向量表示,這使模型對于長輸入序列的學習效果很差(解碼效果很差)。而attention機制則克服了上述問題,原理是在模型輸出時會選擇性地專注考慮輸入中的對應相關的信息。使用attention機制的方法被廣泛應用在各種序列預測任務上,包括文本翻譯、語音識別等。


本文結束,感謝欣賞。

感謝原作者Jason Brownlee。原文鏈接見:Attention in Long Short-Term Memory Recurrent Neural Networks

?

轉載于:https://www.cnblogs.com/baiting/p/8824925.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254900.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux下基于jrtplib庫的實時傳送實現

linux 下基于jrtplib庫的實時傳送實現一、RTP 是進行實時流媒體傳輸的標準協議和關鍵技術實時傳輸協議(Real-time Transport Protocol,PRT)是在 Internet 上處理多媒體數據流的一種網絡協議,利用它能夠在一對一(unicas…

[BZOJ2326] [HNOI2011] 數學作業 (矩陣乘法)

Description Input Output Sample Input Sample Output HINT Source Solution 遞推式長這樣:$f[n]f[n-1]*10^kn$ 對于每一段位數個數相同的$n$(如$10\sim99,100\sim999,23333\sim66666,1018701389\sim2147483647$),$k$是個定值 然…

HALCON示例程序texture.hdev檢測樹木

小哥哥小姐姐覺得有用點個贊唄! HALCON示例程序texture.hdev檢測樹木 示例程序源碼(加注釋) 關于顯示類函數解釋 dev_close_window () Interactive : 0 dev_close_window () read_image (MreutHill, ‘mreut_y’) get_image_size (MreutH…

1、python基礎速成

基礎模塊 def prt(age,name):#函數定義 print("%s is %d 年齡 old"%(name,age)) if __name__"__main__":#程序入口 print("Hello World") prt(45,"gaici") 獲取輸入:使用input()函數 nameinput("you name &#x…

老男孩博客園楊海潮MySQL--MySQL機構邏輯2

轉載于:https://blog.51cto.com/yanfeilai528/2103403

法國標致雪鐵龍汽車公司采用通快碟片激光器進行焊接

發布日期:2011-10-14 來源:光電新聞網 發布人:星之球科技 摘要:3月11日消息,十一個碟片激光器(disk laser)將安裝在標致雪鐵龍集團的工廠,這家法國汽車制造商準備使用4千瓦的激光器…

h.264 rtp打包

(2011-05-27 08:44:13) 轉載標簽: 雜談 payload,H.264 RTP payload 格式 on 2011-2-18 in 博文摘選 | 0 Comment 1. 網絡抽象層單元類型 (NALU) NALU 頭由一個字節組成, 它的語法如下: --------------- |0|1|2|3|4|5|6|7| -------- |F|NRI| Type | --------------…

jquery live hover綁定方法

$(".select_item span").live({mouseenter:function(){$(this).addClass("hover");},mouseleave:function(){$(this).removeClass("hover");} }); 注意:jquery1.9以上版本不支持live,新方法為on 轉載于:https://www.cnblo…

HALCON示例程序vessel.hdev血管的分割與測量

小哥哥小姐姐覺得有用點個贊唄! HALCON示例程序vessel.hdev血管的分割與測量 示例程序源碼(加注釋) 關于顯示類函數解釋 dev_update_window (‘off’) dev_close_window () dev_open_window (0, 0, 512, 512, ‘black’, WindowID) set_d…

電子凸輪

CAM功能是按照一種人為預先設定的曲線關系(可以在線修改,對SEW的變頻/伺服控制器而言)來運動的控制應用。 100%速度前饋的位置控制這個觀點偶不敢茍同.典型的一些應用。比如:全自動包裝機械上,移動鋸,其實大家說的電子齒輪,指的就是一種可以調節主從速度比的同步應用…

浙南聯合訓練賽20180414

這次題目的代碼都不長,CF的一貫風格 A - Game CodeForces - 513A Two players play a simple game. Each player is provided with a box with balls. First players box contains exactly n1 balls and second players box contains exactly n2balls. In one move…

原生JS實現蘋果菜單

今天分享下用原生JS實現蘋果菜單效果,這個效果的重點有以下幾點 圖標中心點到鼠標的距離的算法 利用比例計算圖標的寬度 代碼地址:https://github.com/peng666/blogs/blob/gh-pages/menus/index.html 在線測試地址:http://peng666.github.io/…

Gym 100090D Insomnia

從 n 變到 1&#xff0c;有多少種方案&#xff1f; 打表記憶化。 1 #include <bits/stdc.h>2 3 using namespace std;4 5 int n;6 int dp[1000005];7 int dfs(int n) {8 if(n1)9 return 1; 10 if(dp[n]>0) 11 return dp[n]; 12 int cnt0;…

halcon rectangle1_domain縮減圖像域為矩形

目錄rectangle1_domain&#xff08;算子&#xff09;描述參數rectangle1_domain&#xff08;算子&#xff09; rectangle1_domain - 將圖像的域縮小為矩形。 rectangle1_domain&#xff08;Image&#xff1a;ImageReduced&#xff1a;Row1&#xff0c;Column1&#xff0c;Row…

PC+運動控制卡的控制方案

PC運動控制卡的控制方案&#xff1a; 采用PC&#xff0b;運動控制卡作為上位控制可充分利用計算機資源&#xff0c;用于運動過程、運動軌跡都比較復雜&#xff0c;且柔性比較強的機器和設備。從用戶使用的角度來看&#xff0c;基于PC機的運動控制卡主要是硬件接口&#xff08;輸…

IP/TCP/UDP/RTP/RTCP 包結構圖

IP 包頭結構: TCP 包頭結構: UDP 包頭結構: RTP 包頭結構: RTCP 包頭結構:

你可能不知道的java、python、JavaScript以及jquary循環語句的區別

一.概述 java循環語句分為四種形式&#xff0c;分別是 while, do/while, for, foreach&#xff1b; python中循環語句有兩種&#xff0c;while&#xff0c;for&#xff1b; JavaScript中循環語句有四種&#xff0c;while&#xff0c;do/while&#xff0c;for&#xff0c;for/in…

webservices系列(二)——JAX-WS文件上傳下載

新建ImgData類&#xff0c;存放文件javabean DataHandler&#xff1a;使用這個類型存放文件 XmlRootElement(name"ImaData") XmlAccessorType(XmlAccessType.FIELD) public class ImgData {private Integer id;XmlMimeType("application/octet-stream")pri…

halcon sobel邊緣檢測sobel_amp

目錄sobel_amp&#xff08;算子&#xff09;描述參數sobel_amp&#xff08;算子&#xff09; sobel_amp - 使用Sobel算子檢測邊緣&#xff08;幅度&#xff09;。 sobel_amp&#xff08;圖片&#xff1a;邊緣圖像&#xff1a;濾波器方式&#xff0c;掩膜大小:) 描述 sobel_…

es中的一些知識點記錄

1. forcemerge接口 強制段合并&#xff0c;設置為1時&#xff0c;是期望最終只有1個索引段。但實際情況是&#xff0c;合并的結果是段的總數會減少&#xff0c;但仍大于1&#xff0c;可以多次執行強制合并的命令。 設置的的目標值越小。合并消耗的時間會越久。 curl -XPOST htt…