深度學習的seq2seq模型

2021-09-22 21:50:03 字數 2151 閱讀 2877

根據輸出和輸入序列不同數量rnn可以有多種不同的結構,不同結構自然就有不同的引用場合。如下圖,

在 many to many 的兩種模型中,上圖可以看到第四和第五種是有差異的,經典的rnn結構的輸入和輸出序列必須要是等長,它的應用場景也比較有限。而第四種它可以是輸入和輸出序列不等長,這種模型便是seq2seq模型,即sequence to sequence。它實現了從乙個序列到另外乙個序列的轉換,比如google曾用seq2seq模型加attention模型來實現了翻譯功能,類似的還可以實現聊天機械人對話模型。經典的rnn模型固定了輸入序列和輸出序列的大小,而seq2seq模型則突破了該限制。

其實對於seq2seq的decoder,它在訓練階段和**階段對rnn的輸出的處理可能是不一樣的,比如在訓練階段可能對rnn的輸出不處理,直接用target的序列作為下時刻的輸入,如上圖一。而**階段會將rnn的輸出當成是下一時刻的輸入,因為此時已經沒有target序列可以作為輸入了,如上圖二。

seq2seq屬於encoder-decoder結構的一種,這裡看看常見的encoder-decoder結構,基本思想就是利用兩個rnn,乙個rnn作為encoder,另乙個rnn作為decoder。encoder負責將輸入序列壓縮成指定長度的向量,這個向量就可以看成是這個序列的語義,這個過程稱為編碼,如下圖,獲取語義向量最簡單的方式就是直接將最後乙個輸入的隱狀態作為語義向量c。也可以對最後乙個隱含狀態做乙個變換得到語義向量,還可以將輸入序列的所有隱含狀態做乙個變換得到語義變數。

而decoder則負責根據語義向量生成指定的序列,這個過程也稱為解碼,如下圖,最簡單的方式是將encoder得到的語義變數作為初始狀態輸入到decoder的rnn中,得到輸出序列。可以看到上一時刻的輸出會作為當前時刻的輸入,而且其中語義向量c只作為初始狀態參與運算,後面的運算都與語義向量c無關。

decoder處理方式還有另外一種,就是語義向量c參與了序列所有時刻的運算,如下圖,上一時刻的輸出仍然作為當前時刻的輸入,但語義向量c會參與所有時刻的運算。

encoder-decoder模型對輸入和輸出序列的長度沒有要求,應用場景也更加廣泛。

前面有介紹了encoder-decoder模型的簡單模型,但這裡以下圖稍微複雜一點的模型說明訓練的思路,不同的encoder-decoder模型結構有差異,但訓練的核心思想都大同小異。

我們知道rnn是可以學習概率分布然後進行**的,比如我們輸入t個時刻的資料後**t+1時刻的資料,最經典的就是字元**的例子,可在前面的《迴圈神經網路》和《tensorflow構建迴圈神經網路》了解到更加詳細的說明。為了得到概率分布一般會在rnn的輸出層使用softmax啟用函式,就可以得到每個分類的概率。

對於rnn,對於某個序列,對於時刻t,它的輸出概率為

,則softmax層每個神經元的計算如下:

t是隱含狀態,它與上一時刻的狀態及當前輸入有關,即

那麼整個序列的概率就為

*****===廣告時間*****===

鄙人的新書《tomcat核心設計剖析》已經在京東銷售了,有需要的朋友可以到 進行預定。感謝各位朋友。

為什麼寫《tomcat核心設計剖析》

seq2seq模型詳解

在李紀為博士的畢業 中提到,基於生成的閒聊機械人中,seq2seq是一種很常見的技術。例如,在法語 英語翻譯中,的當前英語單詞不僅取決於所有前面的已翻譯的英語單詞,還取決於原始的法語輸入 另乙個例子,對話中當前的response不僅取決於以往的response,還取決於訊息的輸入。其實,seq2se...

Seq2Seq模型結構

seq2seq sequence to sequence 是乙個處理序列問題的模型,傳統的 rnn 或 lstm 只能處理 輸入及輸出是定長即 一對一或多對多的問題,而 seq2seq 則能處理一對多的問題,它也是 rnn 最重要的乙個變種 n vs m 輸入與輸出序列長度不同 編碼 解碼模型,主要...

介紹 Seq2Seq 模型

2019 09 10 19 29 26 問題描述 什麼是seq2seq模型?seq2seq模型在解碼時有哪些常用辦法?問題求解 seq2seq模型是將乙個序列訊號,通過編碼解碼生成乙個新的序列訊號,通常用於機器翻譯 語音識別 自動對話等任務。在seq2seq模型提出之前,深度學習網路在影象分類等問題...