27. Seq2Seq:Encoder, Decoder概念
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 點需要說明:
- 不論輸入和輸出的長度是什麼,中間的「向量 c」 長度都是固定的(這也是它的缺陷,下文會詳細說明)
- 根據不同的任務可以選擇不同的編碼器和解碼器(可以是CNN/RNN/BiRNN/GRU/LSTM 等等)
Encoder-Decoder 的應用包含機器翻譯、對話機器人、詩詞生成、代碼補全、文章摘要、語音識別
Encoder-Decoder 的缺陷
上文提到:Encoder(編碼器)和 Decoder(解碼器)之間只有一個「向量 c」來傳遞信息,且 c 的長度固定。爲了便於理解,我們類比爲「壓縮-解壓」的過程:將一張 800X800 像素的圖片壓縮成 100KB,看上去還比較清晰。再將一張 3000X3000 像素的圖片也壓縮到 100KB,看上去就模糊了。
Attention 解決信息丟失問題
Attention 機制就是爲了解決「信息過長,信息丟失」的問題。 Attention模型的特點是 Encoder 不再將整個輸入序列編碼爲固定長度的「中間向量C」,而是編碼成一個向量的序列。引入了 Attention的 Encoder-Decoder 模型如下圖:
這樣,在產生每一個輸出的時候,都能夠做到充分利用輸入序列攜帶的信息,而且這種方法在翻譯任務中取得了非常不錯的成果,詳細的內容會在下一篇討論。