seq2seq序列到序列模型
本文從RNN角度出發(fā)伤哺,主要是講述seq2seq模型的原理燕侠。
Seq2Seq模型簡介
? ? ??Seq2Seq模型是輸出的長度不確定時(shí)采用的模型,這種情況一般是在機(jī)器翻譯的任務(wù)中出現(xiàn)立莉,將一句中文翻譯成英文绢彤,那么這句英文的長度有可能會(huì)比中文短,也有可能會(huì)比中文長蜓耻,所以輸出的長度就不確定了茫舶。如下圖所,輸入的中文長度為4刹淌,輸出的英文長度為2饶氏。
? ? ? ?在網(wǎng)絡(luò)結(jié)構(gòu)中,輸入一個(gè)中文序列有勾,然后輸出它對(duì)應(yīng)的中文翻譯疹启,輸出的部分的結(jié)果預(yù)測(cè)后面,根據(jù)上面的例子蔼卡,也就是先輸出“machine”喊崖,將"machine"作為下一次的輸入,接著輸出"learning",這樣就能輸出任意長的序列雇逞。
? ? ? ?機(jī)器翻譯荤懂、人機(jī)對(duì)話、聊天機(jī)器人等等對(duì)話生成場(chǎng)景人物塘砸,這些都是應(yīng)用在當(dāng)今社會(huì)都或多或少的運(yùn)用到了我們這里所說的Seq2Seq节仿。
? ? ? ?舉個(gè)簡單的例子,當(dāng)我們使用機(jī)器翻譯時(shí):輸入(Hello) --->輸出(你好)掉蔬。再比如在人機(jī)對(duì)話中廊宪,我們問機(jī)器:“你是誰?”女轿,機(jī)器會(huì)返回答案“我是某某某”箭启。如下圖所示為一個(gè)簡單的郵件對(duì)話的場(chǎng)景,發(fā)送方問:“你明天是否有空”谈喳;接收方回答:“有空,怎么了戈泼?”婿禽。
Seq2Seq結(jié)構(gòu)
? ? ? ?seq2seq屬于encoder-decoder結(jié)構(gòu)的一種淀零,這里看看常見的encoder-decoder結(jié)構(gòu),基本思想就是利用兩個(gè)RNN膛壹,一個(gè)RNN作為encoder驾中,另一個(gè)RNN作為decoder。encoder負(fù)責(zé)將輸入序列壓縮成指定長度的向量模聋,這個(gè)向量就可以看成是這個(gè)序列的語義肩民,這個(gè)過程稱為編碼,如下圖链方,獲取語義向量最簡單的方式就是直接將最后一個(gè)輸入的隱狀態(tài)作為語義向量C持痰。也可以對(duì)最后一個(gè)隱含狀態(tài)做一個(gè)變換得到語義向量,還可以將輸入序列的所有隱含狀態(tài)做一個(gè)變換得到語義變量祟蚀。
? ? ? ?而decoder則負(fù)責(zé)根據(jù)語義向量生成指定的序列工窍,這個(gè)過程也稱為解碼,如下圖前酿,最簡單的方式是將encoder得到的語義變量作為初始狀態(tài)輸入到decoder的RNN中患雏,得到輸出序列“瘴可以看到上一時(shí)刻的輸出會(huì)作為當(dāng)前時(shí)刻的輸入淹仑,而且其中語義向量C只作為初始狀態(tài)參與運(yùn)算,后面的運(yùn)算都與語義向量C無關(guān)言津。
? ? ? ?decoder處理方式還有另外一種攻人,就是語義向量C參與了序列所有時(shí)刻的運(yùn)算,如下圖悬槽,上一時(shí)刻的輸出仍然作為當(dāng)前時(shí)刻的輸入怀吻,但語義向量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ù)磅叛,比較常見的是字符預(yù)測(cè)例子或者時(shí)間序列預(yù)測(cè)屑咳。為了得到概率分布,一般會(huì)在RNN的輸出層使用softmax激活函數(shù)弊琴,就可以得到每個(gè)分類的概率兆龙。(在對(duì)話生成任務(wù)中,即得到詞典中每個(gè)單詞出現(xiàn)的概率)
? ? ? ?Softmax 在機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中有著非常廣泛的應(yīng)用敲董。尤其在處理多分類(C分類數(shù) > 2)問題紫皇,分類器最后的輸出單元需要Softmax 函數(shù)進(jìn)行數(shù)值處理慰安。關(guān)于Softmax 函數(shù)的定義如下所示:
? ? ? ?其中,是分類器前級(jí)輸出單元的輸出聪铺。i 表示類別索引化焕,總的類別個(gè)數(shù)為C,表示的是當(dāng)前元素的指數(shù)與所有元素指數(shù)和的比值。Softmax 將多分類的輸出數(shù)值轉(zhuǎn)化為相對(duì)概率铃剔,更容易理解和比較撒桨。我們來看下面這個(gè)例子。
? ? ? ?一個(gè)多分類問題键兜,C = 4凤类。線性分類器模型最后輸出層包含了四個(gè)輸出值,分別是:
? ? ? ?經(jīng)過Softmax處理后蝶押,數(shù)值轉(zhuǎn)化為相對(duì)概率:(和為1踱蠢,即被稱為歸一化的過程)
? ? ? ?很明顯怔接,Softmax 的輸出表征了不同類別之間的相對(duì)概率教届。我們可以清晰地看出,S1 = 0.8390油狂,對(duì)應(yīng)的概率最大赶盔,則更清晰地可以判斷預(yù)測(cè)為第1類的可能性更大企锌。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è)有輸入序列萄传,輸出序列
甚颂,輸入序列和輸出序列的長度可能不同。那么其實(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模型簡介
原文:http://www.reibang.com/p/1c6b1b0cd202
4、三分鐘帶你對(duì) Softmax 劃重點(diǎn)
原文:https://blog.csdn.net/red_stone1/article/details/80687921