神經網路之Pointer Net (Ptr-net)

Pointer Networks 是發表在機器學習頂級會議NIPS 2015上的一篇文章,其作者分別來自Google Brain和UC Berkeley。

Pointer Networks 也是一種seq2seq模型。他在attention mechanism的基礎上做了改進,克服了seq2seq模型中「輸出嚴重依賴輸入」的問題。

什麼是「輸出嚴重依賴輸入」呢?

論文里舉了個例子,給定一些二維空間中[0,1]*[1,0]範圍內的點,求這些點的凸包(convex hull)。凸包是凸優化里的重要概念,含義如下圖所示,通俗來講,即找到幾個點能把所有點「包」起來。比如,模型的輸入是序列{P1,P2,...,P7},輸出序列是凸包{P2,P4,P3,P5,P6,P7,P2}。到這裡,「輸出嚴重依賴輸入」的意思也就明了了,即輸出{P2,P4,P3,P5,P6,P7,P2}是從輸入序列{P1,P2,...,P7}中提取出來的。換個輸入,如{P1,....,P1000},那麼輸出序列就是從{P1,....,P1000}裡面選出來。用論文中的語言來描述,即{P1,P2,...,P7}和{P1,....,P1000}的凸包,輸出分別依賴於輸入的長度,兩個問題求解的target class不一樣,一個是7,另一個是1000。

求凸包

Pointer Network在求凸包上的效果如何呢?

從Accuracy一欄可以看到,Ptr-net明顯優於LSTM和LSTM+Attention。

LSTM, LSTM with attention,Ptr求凸包的結果對比

為啥叫pointer network呢?

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

選輸出的過程:通過pointer選擇輸入序列的元素

與attention的區別:如果你也了解attention的原理,可以看看pointer是如何修改attention的?如果不了解,這一部分就可以跳過了。

首先搬出attention mechanism的公式,前兩個公式是整合encoder和decoder的隱式狀態,學出來encoder、decoder隱式狀態與當前輸出的權重關係a,然後根據權重關係a和隱式狀態e得到context vector用來預測下一個輸出。

attention mechanism

Pointer Net沒有最後一個公式,即將權重關係a和隱式狀態整合為context vector,而是直接進行通過softmax,指向輸入序列選擇中最有可能是輸出的元素。

ptr-net

2015年以來,Pointer Net都有哪些用法,在某特定領域,這些概念如何用來解決實際問題?

要使用好Ptr-net,就要理解Ptr-net的精髓吧。正如上面所提到的一樣,從輸入序列里「提取」一些元素來輸出。所以,NLP領域有幾種玩法:

> 文本摘要《Neural Summarization by Extracting Sentences and Words》

> 信息抽取 《End-to-End Information Extraction without Token-Level Supervision》

> 句子排序 《End-to-End Neural Sentence Ordering Using Pointer Network》

> 計算機編程 爐石傳說的卡片自動編程《Latent predictor networks for code generation》


推薦閱讀:

TAG:神經網路 | 機器學習 | 深度學習DeepLearning |