Seq2Seq模型概述

seq2seq序列到序列模型

本文從RNN角度出發(fā),主要是講述seq2seq模型的原理。

Seq2Seq模型簡(jiǎn)介

? ? ??Seq2Seq模型是輸出的長(zhǎng)度不確定時(shí)采用的模型,這種情況一般是在機(jī)器翻譯的任務(wù)中出現(xiàn),將一句中文翻譯成英文,那么這句英文的長(zhǎng)度有可能會(huì)比中文短,也有可能會(huì)比中文長(zhǎng),所以輸出的長(zhǎng)度就不確定了。如下圖所,輸入的中文長(zhǎng)度為4,輸出的英文長(zhǎng)度為2。


seq2seq模型

? ? ? ?在網(wǎng)絡(luò)結(jié)構(gòu)中,輸入一個(gè)中文序列,然后輸出它對(duì)應(yīng)的中文翻譯,輸出的部分的結(jié)果預(yù)測(cè)后面,根據(jù)上面的例子,也就是先輸出“machine”,將"machine"作為下一次的輸入,接著輸出"learning",這樣就能輸出任意長(zhǎng)的序列。
? ? ? ?機(jī)器翻譯、人機(jī)對(duì)話、聊天機(jī)器人等等對(duì)話生成場(chǎng)景人物,這些都是應(yīng)用在當(dāng)今社會(huì)都或多或少的運(yùn)用到了我們這里所說(shuō)的Seq2Seq。
? ? ? ?舉個(gè)簡(jiǎn)單的例子,當(dāng)我們使用機(jī)器翻譯時(shí):輸入(Hello) --->輸出(你好)。再比如在人機(jī)對(duì)話中,我們問(wèn)機(jī)器:“你是誰(shuí)?”,機(jī)器會(huì)返回答案“我是某某某”。如下圖所示為一個(gè)簡(jiǎn)單的郵件對(duì)話的場(chǎng)景,發(fā)送方問(wèn):“你明天是否有空”;接收方回答:“有空,怎么了?”。

郵箱對(duì)話:輸入:你明天有空?回復(fù):有,怎么啦?

Seq2Seq結(jié)構(gòu)

? ? ? ?seq2seq屬于encoder-decoder結(jié)構(gòu)的一種,這里看看常見(jiàn)的encoder-decoder結(jié)構(gòu),基本思想就是利用兩個(gè)RNN,一個(gè)RNN作為encoder,另一個(gè)RNN作為decoder。encoder負(fù)責(zé)將輸入序列壓縮成指定長(zhǎng)度的向量,這個(gè)向量就可以看成是這個(gè)序列的語(yǔ)義,這個(gè)過(guò)程稱為編碼,如下圖,獲取語(yǔ)義向量最簡(jiǎn)單的方式就是直接將最后一個(gè)輸入的隱狀態(tài)作為語(yǔ)義向量C。也可以對(duì)最后一個(gè)隱含狀態(tài)做一個(gè)變換得到語(yǔ)義向量,還可以將輸入序列的所有隱含狀態(tài)做一個(gè)變換得到語(yǔ)義變量。

RNN網(wǎng)絡(luò)

? ? ? ?而decoder則負(fù)責(zé)根據(jù)語(yǔ)義向量生成指定的序列,這個(gè)過(guò)程也稱為解碼,如下圖,最簡(jiǎn)單的方式是將encoder得到的語(yǔ)義變量作為初始狀態(tài)輸入到decoder的RNN中,得到輸出序列??梢钥吹缴弦粫r(shí)刻的輸出會(huì)作為當(dāng)前時(shí)刻的輸入,而且其中語(yǔ)義向量C只作為初始狀態(tài)參與運(yùn)算,后面的運(yùn)算都與語(yǔ)義向量C無(wú)關(guān)。
語(yǔ)義無(wú)關(guān)seq2seq:語(yǔ)義向量只作初始化參數(shù)參與運(yùn)算

? ? ? ?decoder處理方式還有另外一種,就是語(yǔ)義向量C參與了序列所有時(shí)刻的運(yùn)算,如下圖,上一時(shí)刻的輸出仍然作為當(dāng)前時(shí)刻的輸入,但語(yǔ)義向量C會(huì)參與所有時(shí)刻的運(yùn)算。


語(yǔ)義相關(guān)seq2seq:語(yǔ)義向量參與解碼的每一個(gè)過(guò)程

如何訓(xùn)練Seq2Seq模型

? ? ? ?RNN是可以學(xué)習(xí)概率分布,然后進(jìn)行預(yù)測(cè),比如我們輸入t時(shí)刻的數(shù)據(jù)后,預(yù)測(cè)t+1時(shí)刻的數(shù)據(jù),比較常見(jiàn)的是字符預(yù)測(cè)例子或者時(shí)間序列預(yù)測(cè)。為了得到概率分布,一般會(huì)在RNN的輸出層使用softmax激活函數(shù),就可以得到每個(gè)分類(lèi)的概率。(在對(duì)話生成任務(wù)中,即得到詞典中每個(gè)單詞出現(xiàn)的概率)
? ? ? ?Softmax 在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中有著非常廣泛的應(yīng)用。尤其在處理多分類(lèi)(C分類(lèi)數(shù) > 2)問(wèn)題,分類(lèi)器最后的輸出單元需要Softmax 函數(shù)進(jìn)行數(shù)值處理。關(guān)于Softmax 函數(shù)的定義如下所示:

S_i=\frac {e^{vi}}{\Sigma^C_i e^{vi}}

? ? ? ?其中,V_i是分類(lèi)器前級(jí)輸出單元的輸出。i 表示類(lèi)別索引,總的類(lèi)別個(gè)數(shù)為C,表示的是當(dāng)前元素的指數(shù)與所有元素指數(shù)和的比值。Softmax 將多分類(lèi)的輸出數(shù)值轉(zhuǎn)化為相對(duì)概率,更容易理解和比較。我們來(lái)看下面這個(gè)例子。
? ? ? ?一個(gè)多分類(lèi)問(wèn)題,C = 4。線性分類(lèi)器模型最后輸出層包含了四個(gè)輸出值,分別是:
V= \left [ \begin{matrix} -3 \\ 2 \\ -1 \\ 0 \end {matrix} \right ]
? ? ? ?經(jīng)過(guò)Softmax處理后,數(shù)值轉(zhuǎn)化為相對(duì)概率:(和為1,即被稱為歸一化的過(guò)程)
V= \left [ \begin {matrix} 0.0057 \\ 0.8390 \\ 0.0418 \\ 0.1135 \end {matrix} \right ]
? ? ? ?很明顯,Softmax 的輸出表征了不同類(lèi)別之間的相對(duì)概率。我們可以清晰地看出,S1 = 0.8390,對(duì)應(yīng)的概率最大,則更清晰地可以判斷預(yù)測(cè)為第1類(lèi)的可能性更大。Softmax 將連續(xù)數(shù)值轉(zhuǎn)化成相對(duì)概率,更有利于我們理解。 (在對(duì)話生成任務(wù)中,則輸出字典第1個(gè)序號(hào)代表的單詞)

RNN模型

? ? ? ?對(duì)于RNN,對(duì)于某個(gè)序列,對(duì)于時(shí)刻t,它的詞向量輸出概率為P(x_t | x_1,x_2,...,x_{t-1}),則softmax層每個(gè)神經(jīng)元的計(jì)算如下:
P(x_t ,t| x_1,...,x_{t-1}) = \frac {exp(w_th_t)}{\Sigma^K_{i=1}exp(w_ih_t)}
? ? ? ?其中h_t是當(dāng)前第t個(gè)位置的隱含狀態(tài),它與上一時(shí)刻的狀態(tài)及當(dāng)前輸入有關(guān),即h_t=f(h_{t-1},x_t)t表示文本詞典中的第t個(gè)詞對(duì)應(yīng)的下標(biāo)。x_t表示詞典中第t個(gè)詞;w_t是詞權(quán)重參數(shù)。
? ? ? ?那么整個(gè)序列的生成概率就為
p(x) = \Pi^T_{t=1} p(x_t|x_1,...,x_{t-1})
? ? ? ?其表示從第一個(gè)詞到第T個(gè)詞一次生成,產(chǎn)生這個(gè)詞序列的概率。

Seq2Seq模型

? ? ? ?而對(duì)于encoder-decoder模型,設(shè)有輸入序列x_1,x_2,...,x_T,輸出序列y_1,y_2,...,y_T,輸入序列和輸出序列的長(zhǎng)度可能不同。那么其實(shí)就需要根據(jù)輸入序列去得到輸出序列可能輸出的詞概率,于是有下面的條件概率,x_1,x_2,...,x_T發(fā)生的情況下,y_1,y_2,...,y_T發(fā)生的概率等于p(y_t|v,y_1,y_2,...,y_{t-1})連乘,如下公式所示。其中,v表示x_1,x_2,...,x_T對(duì)應(yīng)的隱含狀態(tài)向量(輸入中每個(gè)詞的詞向量),它其實(shí)可以等同表示輸入序列(模型依次生成y_1,y_2,...,y_T的概率)。
p(y_1,y_2,...,y_T|x_1,x_2,...,x_T) = \Pi^T_{t=1}p(y_t|x_1,...,x_{t-1},y_1,...,y_{t-1})
= \Pi^T_{t=1}p(y_t|v,y_1,...,y_t-1)
? ? ? ?此時(shí),h_t = f(h_{t-1},y_{t-1},v),decode編碼器中隱含狀態(tài)與上一時(shí)刻狀態(tài)、上一時(shí)刻輸出和狀態(tài)v都有關(guān)(這里不同于RNN,RNN是與當(dāng)前時(shí)刻的輸入相關(guān),而decode編碼器是將上一時(shí)刻的輸出輸入到RNN中。于是decoder的某一時(shí)刻的概率分布可用下式表示,
p(y_t|v,y_1,y_2,...,y_{t-1}) = g(h_t,y_{t-1},v)
? ? ? ?所以對(duì)于訓(xùn)練樣本,我們要做的就是在整個(gè)訓(xùn)練樣本下,所有樣本的p(y_1,y_2,...,y_T|x_1,...,x_T)概率之和最大。對(duì)應(yīng)的對(duì)數(shù)似然條件概率函數(shù)為\frac {1}{N} \Sigma^N_{n=1} log(y_n|x_n,θ),使之最大化,θ則是待確定的模型參數(shù)。

參考:
1、NLP之Seq2Seq:
原文:https://blog.csdn.net/qq_32241189/article/details/81591456
2、深度學(xué)習(xí)的seq2seq模型:
原文:https://blog.csdn.net/wangyangzhizhou/article/details/77883152
3、Seq2Seq模型簡(jiǎn)介
原文:http://www.itdecent.cn/p/1c6b1b0cd202
4、三分鐘帶你對(duì) Softmax 劃重點(diǎn)
原文:https://blog.csdn.net/red_stone1/article/details/80687921

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容