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。

? ? ? ?在網(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):“你明天是否有空”;接收方回答:“有空,怎么了?”。

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ǔ)義變量。

? ? ? ?而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)。

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

如何訓(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ù)的定義如下所示:
? ? ? ?其中,是分類(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è)輸出值,分別是:
? ? ? ?經(jīng)過(guò)Softmax處理后,數(shù)值轉(zhuǎn)化為相對(duì)概率:(和為1,即被稱為歸一化的過(guò)程)
? ? ? ?很明顯,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)代表的單詞)

? ? ? ?對(duì)于RNN,對(duì)于某個(gè)序列,對(duì)于時(shí)刻t,它的詞向量輸出概率為,則softmax層每個(gè)神經(jīng)元的計(jì)算如下:
? ? ? ?其中是當(dāng)前第t個(gè)位置的隱含狀態(tài),它與上一時(shí)刻的狀態(tài)及當(dāng)前輸入有關(guān),即
;
表示文本詞典中的第t個(gè)詞對(duì)應(yīng)的下標(biāo)。
表示詞典中第t個(gè)詞;
是詞權(quán)重參數(shù)。
? ? ? ?那么整個(gè)序列的生成概率就為
? ? ? ?其表示從第一個(gè)詞到第T個(gè)詞一次生成,產(chǎn)生這個(gè)詞序列的概率。

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