pointer network和recursive神經網絡


1: pointer network

Pointer Network是seq2seq模型的一個變種。他們不是把一個序列轉換成另一個序列, 而是產生一系列指向輸入序列元素的指針。最基礎的用法是對可變長度序列或集合的元素進行排序。

傳統的seq2seq模型是無法解決輸出序列的詞匯表會隨着輸入序列長度的改變而改變的問題的。在某些任務中,輸入嚴格依賴於輸入,或者說輸出只能從輸入中選擇。例如輸入一段話,提取這句話中最關鍵的幾個詞語。又或是輸入一串數字,輸出對這些數字的排序。這時如果使用傳統seq2seq模型,則忽略了輸入只能從輸出中選擇這個先驗信息,Pointer Networks正是為了解決這個問題而提出的。


指針網絡是在Seq2Seq模型的基礎上,將attention機制修改得來的。

從Sequence2Sequence模型說起

Seq2Seq模型:

Sequence2Sequence模型,它實現了把一個序列轉換成另外一個序列的功能,並且不要求輸入序列和輸出序列等長。比較典型的如機器翻譯。

seq2seq模型往往使用RNN來構建,如LSTM和GRU。RNN天生適合處理具有時序關系的序列。

ABC—(Encoder)—語義編碼C—(Decoder)—WXYZ

在這幅圖中,模型把序列“ABC”轉換成了序列“WXYZ”。分析其結構,我們可以把seq2seq模型分為encoder和decoder兩個部分。encoder部分接收“ABC”作為輸入,然后將這個序列轉換成為一個中間向量C,向量C可以認為是對輸入序列的一種編碼。然后decoder部分,句子是一個個輸出的,第一個元素的輸出時把中間向量C作為自己的輸入,第二個元素的輸出是將中間向量C和第一個輸出的元素一起作為輸入,通過解碼操作得到輸出序列“WXYZ”。

公式描述如下:

用RNN做編碼器和解碼器,訓練對( [公式][公式]

Seq2Seq模型使用參數為 [公式] 的RNN來計算條件概率 [公式] ,以估計probability chain rule的項,這里 [公式] 是n個向量的序列, [公式][公式] 個索引的序列,

基於鏈式概率法則

通過最大化訓練集條件概率來學習模型的參數,即(最大似然估計)

基於最大似然估計

Seq2Seq模型使用參數為θ的RNN來計算條件概率,概率鏈式法則,通過最大化訓練集的條件概率來學習模型的參數,即(最大似然估計)

如果我們輸入的序列非常長,則該系統很容易性能會下降,因它會去處理整個句子,而造成前面的句子信息會被遺忘,attention機制應運而生。

Attention機制:

Attention Mechanism的加入使得seq2seq模型的性能大幅提升。那么Attention Mechanism做了些什么事呢?

Attention通常都是建立在Encoder-Decoder模型上來處理Seq2Seq的。

首先,將input sequences讀入到一個encoder,生成的一個語言編碼(Sequence Embedding)會作為decoder的已知條件,后面decoder每生成一個單詞,都會參考這個固定的語言編碼。

這存在一個問題,decoder生成一個單詞的時候,應該將注意力重點放在那些影響這個單詞的內容上,而不是一概將Input Sequence的embedding整體作為輸出的參考,這會影響輸出的准確性。Attention就是通過給input sequence分配不同的權重來決定每個單詞的輸出。

舉例:

假設輸入為一句英文的話:Tom chase Jerry

那么最終的結果應該是逐步輸出 “湯姆”,“追逐”,“傑瑞”。

如果用傳統Seq2Seq模型,那么在翻譯Tom時,所有輸入單詞對翻譯的影響都是相同的,但顯然“湯姆”的貢獻度應該更高。

引入attention后,每個單詞都會有一個權重:(Tom,0.6)(Chase,0.2) (Jerry,0.2)

Attention機制公式描述:

將編碼器和解碼器對input sequence做embeddeing,分別定義為(e 1,...,e n)和(d 1,...,d m(P))而v,W 1和W 2是模型的可學習參數

Attention機制三步驟:1.編碼器和解碼器對每個單詞的embedding,做權重和之后輸入到tanh激活函數,來求編碼器和解碼器的單詞embedding的相似性 2.歸一化 3.求權重和 . 求得的值就是attention權重。每當Decoder生成一個單詞的時候,都會考慮不同權重的Input

通過Attention Mechanism將encoder的隱狀態和decoder的隱狀態結合成一個中間向量C,然后使用decoder解碼並預測,最后經由softmax層得到了針對詞匯表的概率分布,從中選取概率最高的作為當前預測結果。

Pointer Network=Seq2Seq模型+Attention機制

指針網絡:

對注意力模型的非常簡單的修改,用於解決輸出序列的大小取決於輸入序列中元素的數量這個問題。

指針網絡三步驟:1.編碼器和解碼器對每個單詞做embedding,求其權重和之后輸入到tanh激活函數,來求編碼器和解碼器的單詞的embedding相似性 2.歸一化 3.將前i-1個輸出的單詞和Attention權重作為條件概率,來生成第i個單詞

這種方法專門針對輸出離散且與輸入位置相對應的問題。

這種方法適用於可變大小的輸入產生可變大小的輸出序列

本質上,input Sequence里對生成第i個單詞的影響(相似性,相關性)越大,權重就越大。

為啥叫pointer network呢?對於凸包的求解,就是從輸入序列{P1,....,P1000}中選點的過程。選點的方法就叫pointer,他不像attetion mechanism將輸入信息通過encoder整合成context vector,而是將attention轉化為一個pointer,來選擇原來輸入序列中的元素。

就像指針一樣,ouput將指針(weight)指向對他影響最大的input序列。

這篇文章也解釋的很通俗易通。

2: recursive神經網絡

 


剛接觸RNN的時候根本分不清recursive networkrecurrent network,一個是遞歸神經網絡,一個是循環神經網絡,傻傻分不清。但是實際上,recursive networkrecurrent network的一般形式。

如下圖,我們以情感分析為例子,我們輸入一個句子,判斷這個句子的情感,是正面負面中性等等。在Recurrent Structure里面,句子會被表示成word vector,假如說情感有五類,最后輸出的是一個五維向量。

 

那么如果用Recursive Structure,怎么去解決呢?在這里面,你需要先決定這四個input word
x^1,x^2,x^3,x^4
有什么關系,他們的結構是什么樣子;然后根據input word得到輸出情感的這個vector;如下圖所示:
x^1,x^2
x^3,x^4
丟入
f
中得到
h^1,h^2
,繼而得到
h^3
,然后得到情感vector。

 

接下來我們將一個比較具體的例子:
假如我們現在要做情感分析,輸入的句子是:not very good,machine要決定not very good是positive還是negative,首先先得到句子的文法結構,這不是我們這節課要討論的;文法結構告訴我們verygood要先合並在一起,合起來的結果再跟not結合;然后我們要把輸入向量(word embedding)輸入到machine,接下來用函數f,應用順序和文法結構的結合順序一致;假設word vector的維度是Z的話,輸入就是2個Z,輸出是Z

 

那么當我們組合這兩個vector的時候,那么這個意思是不是 "very good"的意思么?這里我們可能要用到神經網絡,因為 very good的vector不會簡單地等於 very的vector和 good的vector的加和,顯然不會是這么單純的: “not”: neutral ,“good”: positive,加和的結果是中性的,然而 “not good”: negative,因此不會是簡單的加和。
 

所以我們需要一個神經網絡來幫我們處理這個問題。我們希望是這個神經網絡要能處理 not和good放一起變成負面的意思,machine要自動學到假設他看到not所代表的vector,自動反轉另一個輸入的情感;machine也要自動學到假設他看到very所代表的vector,自動強調另一個輸入的情感等等諸如此類。函數
f
怎么做到這件事情呢?
透過training data自動學習出來的:
 

那么函數
f
應該長什么樣子呢?
 

最簡單的就是上圖上半部分所示:把藍色和黃色向量串聯起來,乘以一個權重矩陣
W
,經過一個激活函數激活,這樣做的缺點是
a,b
缺少交互,不能做到反轉或者加重情感;

 

因此我們改裝成下半部分的樣子:加號后面就是上半部分的內容,加號前面是兩次運算,權重矩陣不一樣,得到情感。
注意:后面還是傳統的做法,但是前面加上了一個vector。這個vector的元素就是來學習這些詞之間的interaction,然后將這些interaction變成bias,因為recursive network的function都是不變的,因此這些bias就這樣被傳遞下去了。那么這里有一個需要注意的就是,我們這里有幾個詞,那我們就需要多少個bias,而且每個bias中間的這個矩陣W都是不一樣的。

如下圖是實驗結果:


 

接下來,他有很多版本:比如下一個 Matrix-Vector Recursive Network
這個模型設計的想法就是:

 

 

還有Tree LSTM

 

 

這種recursive network模型還有很多應用:句子關聯


 

Batch Normalization

 


轉自:https://www.jianshu.com/p/f3ae607d9969


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM