27. Seq2Seq:Encoder, Decoder概念

柯頌竹
Programming with Data
Jan 28, 2021

RNN 主要應用在序列數據資料的場景。尤其是自然語言處理的領域,如語言模型及機器翻譯等。 RNN 還可以對具有固定周期特徵的數據建立預測模型。

種類介紹

one to one

典型的神經網絡的應用,給定一個輸入,預測一個輸出。而其他的情形都需要應用 RNN 模型。

one to many

圖像標註(Image Captioning)就是one to many的典型例子,輸入一個圖片,得到對圖片的語言描述,這是一個序列輸出。

many to one

其應用實例如情感分類(Sentiment Classification),給定一句話判斷其情感,其中輸入是序列。

many to many

  • 第一種 Many to many 的典型應用場景是機器翻譯,比如一句英文,輸出一句中文,這時輸入與輸出都是序列。
  • 第二種 many to many 可以應用在視頻分類問題(Video classification on frame level),輸入一段視頻,對每一幀圖片分類。因此,可見RNN模型廣泛應用在各種業務場景中。

何謂Sequence to Sequence(Seq2Seq)

Seq2Seq 是由 Encoder 與 Decoder 兩個 RNN 構成,Encoder 就是負責將輸入序列消化、吸收成一個向量,我們通常把這個向量稱為 context vector,顧名思義,這個向量會囊括原序列的重要訊息。而 Decoder 則是根據 context vector 來生成文字,不過回到剛剛的困境,我們只有 1 個輸入,要怎麼生成出超過 1 個輸出呢?其實並不難,只要把目前的輸出當成之後的輸入就成了,架構可分為三部分:Encoder、Decoder、State Vector

總之, Sequence to Sequence 的精華所在便是串接了兩個 RNN ,第一個 RNN 負責將長度為 M 的序列給壓成 1 個向量,第二個 RNN 則根據這 1 個向量產生出 N 個輸出,這 M -> 1 與 1 -> N 相輔相成下就構建出了 M to N 的模型。

其實Encoder 與 Decoder 不一定都只有 RNN,例如也可以CNN與RNN一起當 Encoder,負責將影像編碼成向量,而 Decoder 根據這個向量來生成描述,這樣就能應用在輸入圖片產出圖片描述。

關於Encoder-Decoder,有 2 點需要說明:

  1. 不論輸入和輸出的長度是什麼,中間的「向量 c」 長度都是固定的(這也是它的缺陷,下文會詳細說明)
  2. 根據不同的任務可以選擇不同的編碼器和解碼器(可以是CNN/RNN/BiRNN/GRU/LSTM 等等)

Encoder-Decoder 的應用包含機器翻譯、對話機器人、詩詞生成、代碼補全、文章摘要、語音識別

Encoder-Decoder 的缺陷

上文提到:Encoder(編碼器)和 Decoder(解碼器)之間只有一個「向量 c」來傳遞信息,且 c 的長度固定。爲了便於理解,我們類比爲「壓縮-解壓」的過程:將一張 800X800 像素的圖片壓縮成 100KB,看上去還比較清晰。再將一張 3000X3000 像素的圖片也壓縮到 100KB,看上去就模糊了。

Attention 解決信息丟失問題

Attention 機制就是爲了解決「信息過長,信息丟失」的問題。 Attention模型的特點是 Encoder 不再將整個輸入序列編碼爲固定長度的「中間向量C」,而是編碼成一個向量的序列。引入了 AttentionEncoder-Decoder 模型如下圖:

這樣,在產生每一個輸出的時候,都能夠做到充分利用輸入序列攜帶的信息,而且這種方法在翻譯任務中取得了非常不錯的成果,詳細的內容會在下一篇討論。

--

--

Programming with Data
Programming with Data

Published in Programming with Data

資料科學專欄,程式語言以Python為主,資料則是會整理機器學習的筆記。在找不到好看的封面圖時,偷渡無處可發旅遊照。

柯頌竹
柯頌竹

Written by 柯頌竹

熱愛自由行、參觀各種形式的展覽,踏上過20個國家的領土。歡迎詢問各種在歐洲自由行的問題。偶爾分享一下資料分析的讀書筆記。