深度學習之seq2seq模型以及Attention機制


RNN,LSTM,seq2seq等模型廣泛用於自然語言處理以及回歸預測,本期詳解seq2seq模型以及attention機制的原理以及在回歸預測方向的運用。

1. seq2seq模型介紹

  seq2seq模型是以編碼(Encode)和解碼(Decode)為代表的架構方式,seq2seq模型是根據輸入序列X來生成輸出序列Y,在翻譯,文本自動摘要和機器人自動問答以及一些回歸預測任務上有着廣泛的運用。以encode和decode為代表的seq2seq模型,encode意思是將輸入序列轉化成一個固定長度的向量,decode意思是將輸入的固定長度向量解碼成輸出序列。其中編碼解碼的方式可以是RNN,CNN等。

  

圖1. encode和decode框架

上圖為seq2seq的encode和decode結構,采用CNN/LSTM模型。在RNN中,當前時間的隱藏狀態是由上一時間的狀態和當前時間的輸入x共同決定的,即

【編碼階段】

  得到各個隱藏層的輸出然后匯總,生成語義向量

 

  也可以將最后的一層隱藏層的輸出作為語義向量C                      

 

 

【解碼階段】 

  這個階段,我們要根據給定的語義向量C和輸出序列y1,y2,yt1來預測下一個輸出的單詞yt,即

 

  也可以寫做                                                                         

 

  其中g()代表的是非線性激活函數。在RNN中可寫成 yt=g(yt1,ht,C) ,其中h為隱藏層的輸出。

 

以上就是seq2seq的編碼解碼階段,seq2seq模型的抽象框架可描述為下圖:

圖2. seq2seq抽象框架圖

 

2.Attention機制在seq2seq模型中的運用

2.1 自然語言處理中的Attention機制

  由於encoder-decoder模型在編碼和解碼階段始終由一個不變的語義向量C來聯系着,編碼器要將整個序列的信息壓縮進一個固定長度的向量中去。這就造成了 (1)語義向量無法完全表示整個序列的信息,(2)最開始輸入的序列容易被后輸入的序列給覆蓋掉,會丟失許多細節信息。在長序列上表現的尤為明顯。

  Attention模型的引入:

  相比於之前的encoder-decoder模型,attention模型最大的區別就在於它不在要求編碼器將所有輸入信息都編碼進一個固定長度的向量之中。相反,此時編碼器需要將輸入編碼成一個向量的序列,而在解碼的時候,每一步都會選擇性的從向量序列中挑選一個子集進行進一步處理。這樣,在產生每一個輸出的時候,都能夠做到充分利用輸入序列攜帶的信息。而且這種方法在翻譯任務中取得了非常不錯的成果。

  下圖為seq2seq模型加入了Attention注意力機制 

 

此處輸入圖片的描述

圖3. Attention注意力機制的seq2seq模型

  

【seq2seq的attention解碼過程】

   現在定義條件概率:

 

  上式 s表示解碼器 i 時刻的隱藏狀態。計算公式為:

 

  注意這里的條件概率與每個目標輸出  yi相對應的內容向量  ci有關。在sea2seq模型中,只有一個語義向量C。‘s’為隱藏層輸出,相當於上面提到的h

  關鍵問題是語義向量 C 怎么得到?  

  c是由編碼時的隱藏向量序列(h1,,hTx)按權重相加得到的。

 

  將隱藏向量序列按權重相加,表示在生成第j個輸出的時候的注意力分配是不同的。αij的值越高,表示第i個輸出在第j個輸入上分配的注意力越多,在生成第i個輸出的時候受第j個輸入的影響也就越大。

  這意味着在生成每個單詞Yi的時候,原先都是相同的中間語義表示C會替換成根據當前生成單詞而不斷變化的Ci。理解AM模型的關鍵就是這里,即由固定的中間語義表示C換成了根據當前輸出單詞來調整成加入注意力模型的變化的Ci

 

  如何得到 αi的權重值

  由第i-1個輸出隱藏狀態 si和輸入中各個隱藏狀態共同決定的,即:

 

  si先跟每個h分別計算得到一個數值,然后使用softmax函數得到i時刻的輸出在Tx個輸入隱藏狀態中的注意力分配向量。這個分配向量也就是計算ci的權重。

 

圖4.   分配概率(權值)的計算

  圖4 顯示的是Attention模型在計算αi的概率分配過程。

對於采用RNN的Decoder來說,如果要生成yi單詞,在時刻i,我們是可以知道在生成Yi之前的隱層節點i時刻的輸出值Hi的,而我們的目的是要計算生成Yi時的輸入句子單詞“Tom”、“Chase”、“Jerry”對Yi來說的注意力分配概率分布,那么可以用i時刻的隱層節點狀態Hi去一一和輸入句子中每個單詞對應的RNN隱層節點狀態hj進行對比,即通過函數F(hj,Hi)來獲得目標單詞Yi和每個輸入單詞對應的對齊可能性,這個F函數在不同論文里可能會采取不同的方法,然后函數F的輸出經過Softmax進行歸一化就得到了符合概率分布取值區間的注意力分配概率分布數值。圖4顯示的是當輸出單詞為“湯姆”時刻對應的輸入句子單詞的對齊概率。絕大多數AM模型都是采取上述的計算框架來計算注意力分配概率分布信息,區別只是在F的定義上可能有所不同。

公式匯總:

 

 

【Attention機制類別】

  Attention機制大的方向可分為 Soft Attention 和 Hard Attention 。

Soft Attention通常是指以上我們描述的這種全連接(如MLP計算Attention 權重),對每一層都可以計算梯度和后向傳播的模型;不同於Soft attention那樣每一步都對輸入序列的所有隱藏層hj(j=1….Tx) 計算權重再加權平均的方法,Hard Attention是一種隨機過程,每次以一定概率抽樣,以一定概率選擇某一個隱藏層 hj*,在估計梯度時也采用蒙特卡羅抽樣Monte Carlo sampling的方法。

 

圖5. Soft Attention 模型

 

圖6. Hard Attention

 

考慮到計算量,attention的另一種替代方法是用強化學習(Reinforcement Learning)來預測關注點的大概位置。這聽起來更像是人的注意力,這也是Recurrent Models of Visual Attention文中的作法。然而,強化學習模型不能用反向傳播算法端到端訓練,因此它在NLP的應用不是很廣泛(我本人反而覺得這里有突破點,數學上的不可求解必然會得到優化,attention model在RL領域的應用確實非常有趣)

 

參考資料:http://blog.csdn.net/u014595019/article/details/52826423

     http://blog.csdn.net/wuzqChom/article/details/75792501

     http://blog.csdn.net/mpk_no1/article/details/72862348

     http://www.deepnlp.org/blog/textsum-seq2seq-attention/

     http://blog.csdn.net/malefactor/article/details/50550211

     http://blog.csdn.net/xbinworld/article/details/54607525

 

2.2 計算機視覺中的Attention機制

 

圖7. 基於注意力attention的RNN模型

 

 

圖8. 視覺中的注意力模型結構

  (1)輸入圖片經過一系列變換后轉化為 H * W * 3維的矩陣,H,W 分別為圖片的高和寬度,3為RGB三通道。

  (2)CNN層:經過一些列卷積層和池化之后得到 L*D的 feature map,D是這一層卷積層中神經元的個數,比如有512個。L是每個神經元中的feature map,比如是14 * 14維。那么L * D 就代表 196 * 512維的向量

  (3)創建一個D * 1維的權重向量W(這個權重的最優值在后向求導的時候會算出來的,一開始可以先隨便初始化一個)。拿從CNN出來的feature向量L * D 去乘以 這個權重向量W,得到的是L * 1的向量。也就是圖中的h0,h0經過一個sotmax,會得到L * 1的概率,也就是說,對一個L 維的feature map(14 * 14)求出196個相對應的概率向量,就是圖中的a1。

  (4)a1是196維的概率向量,把它再與 L * D的feature向量相乘,求加權。也就是說,對521層神經元上的feature map都乘以一組概率,得到的是圖中的z1。 
這是至關重要的一步,也是注意力模型的核心,因為概率的大小重新調整了feature向量中每個值的大小。概率大的就會放更多的注意力上去,概率小的,注意力就減小了。 
這個z1直接作用於第二次循環中的h1.

  (5)現在來到了h1這一層,這一層的輸入除了剛剛說的z1,還有原來就有的y1,和h0,y1是上一次循環的輸出,h0是上一時刻的記憶。h1也會進入一個softmax的運算,輸出一組概率,這組概率會再回到feature向量那里做權重加和,於是feature向量又進行了一輪的調整,再作用到了h2上,也就是我們看到的z2。h1出來生成一個概率向量外,還會輸出一組每個詞的概率,然后選取概率最大的那個詞作為本輪循環的最終輸出。(所有詞以one-hot的形式維護在詞典中)。

循環往復以上兩步,實現了在每一輪的循環中都輸入了新的feature向量,注意力也會改變。比如第一輪注意力是在bird,第二輪注意力在sea.

 

  視覺注意力以及物體聚焦是人類視覺所特有的一種信號處理機制。人類視覺系統能夠在關鍵場景中提取大腦反饋的關鍵信息,抑制無用信息。注意力機制在NLP已經取得很大成功,如RNN+CNN的圖像描述系統,機器翻譯等。

  Attention機制在自然語言處理和計算機視覺圖像領域都有着廣泛的運用。神經網絡中的注意力機制是從人類視覺中受到啟發而來的,模擬人眼的注意力功能,集中聚焦一些關鍵信息而虛化或者抑制掉一些不重要信息。計算機視覺中的注意力機制,從理論上看是融合了底層卷積和高層卷積的特征,由此既能識別高分辨率中的一些細節特定區域的特征,又能感知到高層網絡中的關鍵特征。在圖像領域中, 2010年的《Examples include Learning to combine foveal glimpses with a third-order Boltzmann machine》,以及2011年的論文《Learning where to Attend with Deep Architectures for Image Tracking》上都有提及注意力attention機制的運用。

  2016年和2017年CVPR頂會論文:

 Wang F, Jiang M, Qian C, et al. Residual Attention Network for Image Classification[J]. 2017.

 Lin T Y, Dollár P, Girshick R, et al. Feature Pyramid Networks for Object Detection[J]. 2016.

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM