乾貨| 完全圖解RNN、RNN變體、Seq2Seq、Attention機制

2020-11-22 搜狐

原標題:乾貨 | 完全圖解RNN、RNN變體、Seq2Seq、Attention機制

AI科技評論按:本文作者何之源,原文載於知乎專欄AI Insight,AI科技評論獲其授權發布。

本文主要是利用圖片的形式,詳細地介紹了經典的RNN、RNN幾個重要變體,以及Seq2Seq模型、Attention機制。希望這篇文章能夠提供一個全新的視角,幫助初學者更好地入門。
一、從單層網絡談起

在學習RNN之前,首先要了解一下最基本的單層網絡,它的結構如圖:

輸入是x,經過變換Wx+b和激活函數f得到輸出y。相信大家對這個已經非常熟悉了。

二、經典的RNN結構(N vs N)

在實際應用中,我們還會遇到很多序列形的數據:

如:

序列形的數據就不太好用原始的神經網絡處理了。為了建模序列問題,RNN引入了隱狀態h(hidden state)的概念,h可以對序列形的數據提取特徵,接著再轉換為輸出。先從h1的計算開始看:

圖示中記號的含義是:

在很多論文中也會出現類似的記號,初學的時候很容易搞亂,但只要把握住以上兩點,就可以比較輕鬆地理解圖示背後的含義。

h2的計算和h1類似。要注意的是,在計算時,每一步使用的參數U、W、b都是一樣的,也就是說每個步驟的參數都是共享的,這是RNN的重要特點,一定要牢記。

依次計算剩下來的(使用相同的參數U、W、b):

我們這裡為了方便起見,只畫出序列長度為4的情況,實際上,這個計算過程可以無限地持續下去。

我們目前的RNN還沒有輸出,得到輸出值的方法就是直接通過h進行計算:

正如之前所說,一個箭頭就表示對對應的向量做一次類似於f(Wx+b)的變換,這裡的這個箭頭就表示對h1進行一次變換,得到輸出y1。

剩下的輸出類似進行(使用和y1同樣的參數V和c):

OK!大功告成!這就是最經典的RNN結構,我們像搭積木一樣把它搭好了。它的輸入是x1, x2, .....xn,輸出為y1, y2, ...yn,也就是說,輸入和輸出序列必須要是等長的

由於這個限制的存在,經典RNN的適用範圍比較小,但也有一些問題適合用經典的RNN結構建模,如:

  • 計算視頻中每一幀的分類標籤。因為要對每一幀進行計算,因此輸入和輸出序列等長。

  • 輸入為字符,輸出為下一個字符的概率。這就是著名的Char RNN(詳細介紹請參考:The Unreasonable Effectiveness of Recurrent Neural Networks,地址:http://karpathy.github.io/2015/05/21/rnn-effectiveness/。Char RNN可以用來生成文章,詩歌,甚至是代碼,非常有意思)。

三、N VS 1

有的時候,我們要處理的問題輸入是一個序列,輸出是一個單獨的值而不是序列,應該怎樣建模呢?實際上,我們只在最後一個h上進行輸出變換就可以了:

這種結構通常用來處理序列分類問題。如輸入一段文字判別它所屬的類別,輸入一個句子判斷其情感傾向,輸入一段視頻並判斷它的類別等等。

四、1 VS N

輸入不是序列而輸出為序列的情況怎麼處理?我們可以只在序列開始進行輸入計算:

還有一種結構是把輸入信息X作為每個階段的輸入:

下圖省略了一些X的圓圈,是一個等價表示:

這種1 VS N的結構可以處理的問題有:

五、N vs M

下面我們來介紹RNN最重要的一個變種:N vs M。這種結構又叫Encoder-Decoder模型,也可以稱之為Seq2Seq模型。

原始的N vs N RNN要求序列等長,然而我們遇到的大部分問題序列都是不等長的,如機器翻譯中,源語言和目標語言的句子往往並沒有相同的長度。

為此,Encoder-Decoder結構先將輸入數據編碼成一個上下文向量c:

得到c有多種方式,最簡單的方法就是把Encoder的最後一個隱狀態賦值給c,還可以對最後的隱狀態做一個變換得到c,也可以對所有的隱狀態做變換。

拿到c之後,就用另一個RNN網絡對其進行解碼,這部分RNN網絡被稱為Decoder。具體做法就是將c當做之前的初始狀態h0輸入到Decoder中:

還有一種做法是將c當做每一步的輸入:

由於這種Encoder-Decoder結構不限制輸入和輸出的序列長度,因此應用的範圍非常廣泛,比如:

  • 機器翻譯。Encoder-Decoder的最經典應用,事實上這一結構就是在機器翻譯領域最先提出的

  • 文本摘要。輸入是一段文本序列,輸出是這段文本序列的摘要序列。

  • 閱讀理解。將輸入的文章和問題分別編碼,再對其進行解碼得到問題的答案。

  • 語音識別。輸入是語音信號序列,輸出是文字序列。

  • …………

六、Attention機制

在Encoder-Decoder結構中,Encoder把所有的輸入序列都編碼成一個統一的語義特徵c再解碼,因此, c中必須包含原始序列中的所有信息,它的長度就成了限制模型性能的瓶頸。如機器翻譯問題,當要翻譯的句子較長時,一個c可能存不下那麼多信息,就會造成翻譯精度的下降。

Attention機制通過在每個時間輸入不同的c來解決這個問題,下圖是帶有Attention機制的Decoder:

每一個c會自動去選取與當前所要輸出的y最合適的上下文信息。具體來說,我們用 aij 衡量Encoder中第j階段的hj和解碼時第i階段的相關性,最終Decoder中第i階段的輸入的上下文信息 ci就來自於所有 hj 對 aij 的加權和。

以機器翻譯為例(將中文翻譯成英文):

輸入的序列是「我愛中國」,因此,Encoder中的h1、h2、h3、h4就可以分別看做是「我」、「愛」、「中」、「國」所代表的信息。在翻譯成英語時,第一個上下文c1應該和「我」這個字最相關,因此對應的 a11 就比較大,而相應的 a12、a13、a14就比較小。c2應該和「愛」最相關,因此對應的 a22 就比較大。最後的c3和h3、h4最相關,因此 a33、a34 的值就比較大。

至此,關於Attention模型,我們就只剩最後一個問題了,那就是:這些權重 aij 是怎麼來的?

事實上, aij同樣是從模型中學出的,它實際和Decoder的第i-1階段的隱狀態、Encoder第j個階段的隱狀態有關。

同樣還是拿上面的機器翻譯舉例, a1j 的計算(此時箭頭就表示對h'和 hj 同時做變換):

a2j 的計算:

a3j的計算:

以上就是帶有Attention的Encoder-Decoder模型計算的全過程。

七、總結

本文主要講了N vs N,N vs 1、1 vs N、N vs M四種經典的RNN模型,以及如何使用Attention結構。希望能對大家有所幫助。

可能有小夥伴發現沒有LSTM的內容,其實是因為LSTM從外部看和RNN完全一樣,因此上面的所有結構對LSTM都是通用的,想了解LSTM內部結構的可以參考這篇文章:Understanding LSTM Networks(地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/),寫得非常好,推薦閱讀。

————————————————————返回搜狐,查看更多

責任編輯:

相關焦點

  • 完全圖解RNN、RNN變體、Seq2Seq、Attention機制
    本文主要是利用圖片的形式,詳細地介紹了經典的RNN、RNN幾個重要變體,以及Seq2Seq模型、Attention機制。希望這篇文章能夠提供一個全新的視角,幫助初學者更好地入門。它的輸入是x1, x2, .....xn,輸出為y1, y2, ...yn,也就是說,輸入和輸出序列必須要是等長的。由於這個限制的存在,經典RNN的適用範圍比較小,但也有一些問題適合用經典的RNN結構建模,如:計算視頻中每一幀的分類標籤。因為要對每一幀進行計算,因此輸入和輸出序列等長。
  • 用RNN和TensorFlow創作自己的《哈利波特》小說
    )· 將數字映射回字符(index2char)然後把文本轉換成數字:vocab = sorted(set(text))char2index = {u:i for i, u in enumerate(vocab)}index2char = np.array(vocab)text_as_int = np.array
  • nlp領域發生了新的技術突破,用attention機制研究nlp領域
    包括:attention機制,cnn,adaptive attention network(an),兩層cnn相比較,an表現優於一層的cn。lstm,已經有了兩種不同的,看似性能和效率差異不大的attention機制:rnnattention,lstmattention。今天我們將從這兩種attention機制開始研究nlp領域突破性技術!
  • 直觀理解並使用Tensorflow實現Seq2Seq模型的注意機制
    採用帶注意機制的序列序列結構進行英印地語神經機器翻譯Seq2seq模型構成了機器翻譯、圖像和視頻字幕、文本摘要、聊天機器人以及任何你可能想到的包括從一個數據序列到另一個數據序列轉換的任務的基礎。如果您曾使用過谷歌Translate,或與Siri、Alexa或谷歌Assistant進行過互動,那麼你就是序列對序列(seq2seq)神經結構的受益者。
  • 基於seq2seq模型的中文糾錯任務
    深度學習近來在自然語言處理領域獲得了 廣泛運用,seq2seq 模型在諸多自然語言處理任務,如詞性標註、語義依存分析、 機器翻譯等,均取得了顯著的成績。本文首先對中文糾錯任務進行詳細的梳理, 包括錯誤的來源、目前的處理方法、相關的公開競賽、數據源等;第二,由於缺 少大規模公開的數據集,本文涉及顯示人工構造大規模糾錯數據集的算法;第三, 本文將深度學子中的 seq2seq 模型引入,處理中文糾錯任務,在基本的模型基礎 上引入 attention 機制(包括諸多變種)以及多任務學習的理念,嘗試多種組合, 並最終在構造數據集上 GLEU 評分達到了 0.75
  • 小升級大變動,易用性更強,支持自定義RNN
    PyTorch可以實現許多最流行的變體,例如Elman RNN、GRU和LSTM,以及多層和雙向變體。然而,許多用戶希望實現他們自己的自定義RNN。將層規範化應用於LSTM就是這樣一種用例。由於PyTorch CUDA LSTM實現使用融合內核,因此很難插入規範化甚至修改基本LSTM實現。
  • Kaggle比賽冠軍經驗分享:如何用 RNN 預測維基百科網絡流量
    核心思路簡單來說,Arthur Suilin 採用了 seq2seq 模型,使用一些調優方法在數據體現年份和四季帶來的波動。模型的主要依靠的信息源有兩類:局部特徵和全局特徵。1. Arthur 解釋了他為什麼採用 RNN seq2seq 模型來預測網絡流量:ARIMA 模型已經發展成熟,而 RNN 是在 ARIMA 模型基礎上延深的算法,更為靈活、可表達性強。RNN 屬於非參數算法,簡化了模型的學習過程。RNN 模型能輕易識別一些異常特徵(數字類的或分類的,時間相關的或序列相關的)。
  • 求解微分方程,用seq2seq就夠了,性能遠超 Mathematica、Matlab
    這篇論文提出了一種新的基於seq2seq的方法來求解符號數學問題,例如函數積分、一階常微分方程、二階常微分方程等複雜問題。其結果表明,這種模型的性能要遠超現在常用的能進行符號運算的工具,例如Mathematica、Matlab、Maple等。
  • Circular RNA的產生機制、功能及RNA-seq數據鑑定方法
    CircRNA的各種潛在功能機制示意圖(圖片來源:Li et al.Frontiers in Molecular Biosciences, 2017)下表還顯示了,一些已報導的與局部缺血性心臟病、阿爾茲海默症、糖尿病相關的重要circRNA,它們的具體作用機制可見下面的Table 2所示。
  • 貌離神合的RNN與ODE:花式RNN簡介
    [:,0]) - a1 * x[:,0] * x[:,1]        _2 = r2 * x[:,1] * (1 - iN2 * x[:,1]) - a2 * x[:,0] * x[:,1]        _1 = K.expand_dims(_1, 1)        _2 = K.expand_dims(_2, 1)        _ = K.concatenate
  • RNA-seq的標準化方法的不完全整理
    事先聲明,以下數字完全是我瞎編,方便用於後續的計算,如有雷同,留個微信,線下交友。基因表達量矩陣基因/樣本樣本A樣本B樣本CG1(100)300400500G2(500)700750800G3(1000)100013001800先說三個簡單的策略,也就是最容易想到的方法Total Count, TC, 每個基因計數除以總比對數, 即文庫大小, 然後乘以不同樣本的總比對數的均值
  • 綜述科普|染色質調控區域的研究:對CHIP-seq和ATAC-seq發展的深入思考
    2.用於檢測組蛋白修飾的抗體對於許多表觀遺傳染色質測序技術是必不可少的:例如,在CHIP-seq中,需要對組蛋白和轉錄因子進行抗體特異性檢測。3.組蛋白修飾的異染色質形成和擴散機制以及組蛋白修飾的「記憶」和「消退」的研究還很少。
  • NLP深度學習的高級介紹RNN和變換器的工作原理
    就在幾年前,RNN及其門控變體(增加了乘法交互和更好的梯度轉移機制)是用於NLP的最流行的架構。像安德烈·卡爾帕西(Andrey Karpathy)這樣的著名研究人員正在為RNN的不合理效力唱歌,而大公司則熱衷於採用模型將其納入虛擬代理商和其他NLP應用程式。現在變形金剛(BERT,GPT-2)已經出現,社區甚至很少提到經常性的網絡。
  • 推斷速度達seq2seq模型的100倍,谷歌開源文本生成新方法LaserTagger
    來源:機器之心作者:Eric Malmi等機器之心編譯參與:魔王、杜偉使用 seq2seq 模型解決文本生成任務伴隨著一些重大缺陷,谷歌研究人員提出新型文本生成方法 LaserTagger,旨在解決這些缺陷,提高文本生成的速度和效率。
  • 一文解讀NLP中的注意力機制
    近些年來,注意力機制一直頻繁的出現在目之所及的文獻或者博文中,可見在NLP中算得上是個相當流行的概念,事實也證明其在NLP領域散發出不小得作用。這幾年的頂會paper就能看出這一點。本文深入淺出地介紹了近些年的自然語言中的注意力機制包括從起源、變體到評價指標方面。本文便對NLP的注意力機制進行了綜述。
  • 研究發現組蛋白變體H2A.z調控大腦發育的機制
    一直以來,圍繞神經前體細胞的增殖與分化、神經元的遷移、突觸的重塑等的機制研究是神經科學領域研究熱點。組蛋白變異體參與染色體組裝和調控。與常規組蛋白形成的染色質結構相比,組蛋白變異體可以形成一些獨特的染色質結構,進而在基因表達和細胞命運決定等過程中發揮著重要作用。組蛋白變體H2A.z是常規組蛋白H2A的重要變體之一。
  • mtscATAC-seq:單細胞線粒體DNA基因分型與染色質分析新方法
    為了建立mtscATAC-seq技術,作者們首先對業內廣泛使用的10x Genomics平臺中基於液滴的scATAC-seq技術的工作流程進行優化。根據最近的研究,基於液滴的scATAC-seq技術能夠在每個實驗組中對數千個細胞的染色質可及性進行分析【2】。因此,通過對該實驗流程的優化可能有助於富集轉座酶可及性的線粒體DNA。