[转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention
from :?https://caicai.science/2018/10/06/attention%E6%80%BB%E8%A7%88/
一、Seq2Seq?模型
1. 簡介
Sequence-to-sequence (seq2seq)?模型,顧名思義,其輸入是一個序列,輸出也是一個序列,例如輸入是英文句子,輸出則是翻譯的中文。seq2seq?可以用在很多方面:機器翻譯、QA?系統、文檔摘要生成、Image Captioning?(圖片描述生成器)。
2. 基本框架
第一種結構
[參考1]論文中提出的?seq2seq?模型可簡單理解為由三部分組成:Encoder、Decoder 和連接兩者的 State Vector (中間狀態向量) C 。
上圖中?Encoder?和?Decoder?可以是一個?RNN?,但通常是其變種?LSTM?或者?GRU?。Encoder?和?Decoder?具體介紹請見第三部分。
第二種結構
該結構是最簡單的結構,和第一種結構相似,只是?Decoder 的第一個時刻只用到了 Encoder 最后輸出的中間狀態變量?:
應用:
-
在英文翻譯中,將英文輸入到?Encoder?中,Decoder?輸出中文。
參考1:-原創翻譯- 基于RNNEncoder–Decoder的機器翻譯L(earning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation)
-
在圖像標注中,將圖像特征輸入到?Encoder?中,Decoder?輸出一段文字對圖像的描述。
參考2:-原創翻譯- 圖像標注生成器 (Show and Tell: A Neural Image Caption Generator)
-
在?QA?系統中,將提出的問題輸入?Encoder?中,Decoder?輸出對于問題的回答。
……
注:確保你對所有模型都有所了解后再閱讀應用后面的參考鏈接。
二、RNN?結構
1. 為什么在這里提及?RNN?及?RNN?變種?
接下來要介紹的?Encoder-Decoder?模型中,Encoder?和?Decoder?兩部分的輸入輸出可以是文字、圖像、語音等等,所以?Encoder?和?Decoder?一般采用?CNN?、RNN?、LSTM?、GRU?等等。這里,我們只介紹經典?RNN?的結構。
如果對?LSTM?感興趣的話,請參考?-原創翻譯- 詳解?LSTM(Understanding LSTM Networks)
2. 圖解?RNN?結構
RNN?大都用來處理像一串句子、一段語音這種的序列化數據。展開的?RNN?結構圖如下:
由圖可見,其當前時間 t 的輸出依賴兩部分:前一時刻的隱層 $h_{t-1}$ 和當前的輸入 $x_{t}$ 。
下面主要介紹經典的三種?RNN?結構:
(1)?n VS 1
注:圓圈代表給定的輸入,箭頭代表運算,矩形代表隱層,也就是箭頭運算后的結果。其中參數 $W、U、V$ 都是一樣的。在自然語言處理問題。$x_{1}$ 可以看做是第一個單詞,$x_{2}$ 可以看做是第二個單詞…
這種結構可應用于情感分析、文本分類等等。
(2)?1 VS n
下圖是把輸入當作每個時刻的輸入:
這種結構可應用于應用于?Image Caption?,輸入是圖像的特征矩陣,輸出是一段對圖像的描述。
(3)?n VS n
這種結構可應用于機器翻譯等。如果感興趣,可以參考下面的 文章。作者使用?RNN?實現了根據一個字母推測下一個字母的概率。
參考3:-原創翻譯- RNNs的“神奇功效”(The Unreasonable Effectiveness of Recurrent Neural Networks)
(4)?n VS m
在機器翻譯中,源語言和目標語言的句子序列都是不等長的,而原始的?n VS n?結構都是要求序列等長的。為此,我們有了?n VS m?結構,這種結構又被稱為?Encoder-Decoder模型?。具體請見下一部分。
三、Encoder-Decoder?模型
1. 簡介
在第二節的第四部分,我們提出了?RNN?的?n VS m?結構:Encoder-Decoder?模型,Encoder-Decoder?模型是深度學習中常見的一種模型。在本文中,我們只簡單介紹其在文本-文本的應用,比如將英語翻譯成漢語,所以該模型也可以稱為?Seq2Seq 模型?。下圖為?Encoder-Decoder?模型的抽象圖:
2. 分析
1)?Encoder
給定句子對?<X,Y>?,我們的目標是給定輸入句子?X?,通過Encoder-Decoder?模型來翻譯成目標句子?Y?。而?X?和?Y?分別由各自的單詞序列構成:
首先,Encoder?對輸入語句?X?進行編碼,經過函數變換為中間語義向量?C?(可以通過多種方式得到) :
2)?Decoder
得到中間語義向量?C?后,使用?Decoder?進行解碼。Decoder根據中間狀態向量?C?和已經生成的歷史信息?y1,y2…yi-1?去生成?t?時刻的單詞?yi?:
$$y_{i} = g (C, y_{1}, y_{2}, y_{i-1})$$如果直接將 c 輸入到?Decoder?中,則是?Seq2Seq?模型的第二種模型:
如果將 c 當作?Decoder?的每一時刻輸入,則是?Seq2Seq?模型的第一種模型:
- 中英翻譯中,?<X,Y>?是不同語言的句子,X?是英文句子,Y?是中文句子。
- QA?系統中,X?是問題,Y?是回答。
-
……
Encoder-Decoder?模型是使用非常廣泛的深度學習模型框架,與其說?Encoder-Decoder?是一種模型,不如稱其為一種通用框架。因為?Encoder?和?Decoder?具體使用什么模型是根據任務而定義的。在自然語言處理研究中通常使用?LSTM?或者是?GRU?。
四、Attention?模型
1.?Encoder-Decoder?模型的局限性
(1) 從第三節的第一部分的?Encoder-Decoder?模型的抽象圖中可以看出?Encoder?和?Decoder?的唯一聯系只有語義編碼?C?,即將整個輸入序列的信息編碼成一個固定大小的狀態向量再解碼,相當于將信息”有損壓縮”。很明顯這樣做有兩個缺點:
- 中間語義向量無法完全表達整個輸入序列的信息。
- 隨著輸入信息長度的增加,由于向量長度固定,先前編碼好的信息會被后來的信息覆蓋,丟失很多信息。
(2)大家看第三節的第二部分的第二個?Decoder?過程,其輸出的產生如下:
$y_{1}=g(C, h’_{0})$
$y_{2}=g(C, y_{1})$
$y_{3}=g(C, y_{1}, y_{2})$
明顯可以發現在生成 $y_{1}、y_{2}、y_{3}$ 時,語義編碼?C?對它們所產生的貢獻都是一樣的。例如翻譯:Cat chase mouse?,Encoder-Decoder?模型逐字生成:“貓”、“捉”、“老鼠”。在翻譯?mouse?單詞時,每一個英語單詞對“老鼠”的貢獻都是相同的。如果引入了Attention?模型,那么?mouse?對于它的影響應該是最大的。
2. 圖解?Attention
為了解決上面兩個問題,于是引入了?Attention?模型。Attention?模型的特點是?Decoder?不再將整個輸入序列編碼為固定長度的中間語義向量?C?,而是根據當前生成的新單詞計算新的?$C_{i}$?,使得每個時刻輸入不同的?C,這樣就解決了單詞信息丟失的問題。引入了?Attention?的?Encoder-Decoder?模型如下圖:
對于剛才提到的那個“貓捉老鼠”的翻譯過程變成了如下:
$y_{1}=g(C_{1}, h’_{0})$
$y_{2}=g(C_{2}, y_{1})$
$y_{3}=g(C_{3}, y_{1}, y_{2})$
整個翻譯流程如下:
圖中輸入是?Cat chase mouse?,Encoder?中隱層?h1、h2、h3?可看作經過計算?Cat、chase、mouse?這些詞的信息。
使用 $a_{ij}$ 表示?Encoder?中第?j?階段的 $h_{j}$ 和解碼時第?i?階段的相關性,計算出解碼需要的中間語義向量 $C_{i}$ 。$C_{1}$ 和 “貓” 關系最近,相對應的 $a_{11}$ 要比 $a_{12}$ 、$a_{13}$ 大;而 $C_{2}$ 和 “捉” 關系最近,相對應的 $a_{22}$ 要比 $a_{21}$ 、$a_{23}$ 大;同理 $C_{3}$ 和 “老鼠” 關系最近,相對應的 $a_{33}$ 要比 $a_{31}$ 、$a_{32}$ 大。
那么參數 $a_{ij}$ 是如何得到呢?
Encoder?中第?j?個隱層單元 $h_{j}$ 和?Decoder?第?i-1?個隱層單元 $h’{i-1}$ 經過運算得到 $a{ij}$ 。
例如 $a_{1j}$ 的計算過程:
$a_{2j}$ 的計算過程:
參考 :引入Attention?并基于?RNN?的?Encoder-Decoder?模型公式推導
轉載于:https://www.cnblogs.com/Arborday/p/10758884.html
總結
以上是生活随笔為你收集整理的[转] 图解Seq2Seq模型、RNN结构、Encoder-Decoder模型 到 Attention的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件工程——结对编程第一次作业
- 下一篇: pie的绕过方式