Pointer Networks 是發(fā)表在機(jī)器學(xué)習(xí)頂級(jí)會(huì)議NIPS 2015上的一篇文章弃衍,其作者分別來(lái)自Google Brain和UC Berkeley瓷胧。
Pointer Networks 也是一種seq2seq模型刑桑。他在attention mechanism的基礎(chǔ)上做了改進(jìn)蝇刀,克服了seq2seq模型中“輸出嚴(yán)重依賴輸入”的問(wèn)題树枫。
什么是“輸出嚴(yán)重依賴輸入”呢直焙?
論文里舉了個(gè)例子,給定一些二維空間中[0,1]*[1,0]范圍內(nèi)的點(diǎn)砂轻,求這些點(diǎn)的凸包(convex hull)奔誓。凸包是凸優(yōu)化里的重要概念,含義如下圖所示搔涝,通俗來(lái)講厨喂,即找到幾個(gè)點(diǎn)能把所有點(diǎn)“包”起來(lái)。比如庄呈,模型的輸入是序列{P1,P2,...,P7}蜕煌,輸出序列是凸包{P2,P4,P3,P5,P6,P7,P2}。到這里诬留,“輸出嚴(yán)重依賴輸入”的意思也就明了了斜纪,即輸出{P2,P4,P3,P5,P6,P7,P2}是從輸入序列{P1,P2,...,P7}中提取出來(lái)的贫母。換個(gè)輸入,如{P1,....,P1000}盒刚,那么輸出序列就是從{P1,....,P1000}里面選出來(lái)腺劣。用論文中的語(yǔ)言來(lái)描述,即{P1,P2,...,P7}和{P1,....,P1000}的凸包伪冰,輸出分別依賴于輸入的長(zhǎng)度誓酒,兩個(gè)問(wèn)題求解的target class不一樣,一個(gè)是7贮聂,另一個(gè)是1000靠柑。
從Accuracy一欄可以看到吓懈,Ptr-net明顯優(yōu)于LSTM和LSTM+Attention歼冰。
為啥叫pointer network呢?
前面說(shuō)到耻警,對(duì)于凸包的求解隔嫡,就是從輸入序列{P1,....,P1000}中選點(diǎn)的過(guò)程。選點(diǎn)的方法就叫pointer甘穿,他不像attetion mechanism將輸入信息通過(guò)encoder整合成context vector腮恩,而是將attention轉(zhuǎn)化為一個(gè)pointer,來(lái)選擇原來(lái)輸入序列中的點(diǎn)温兼。
如果你也了解attention的原理秸滴,可以看看pointer是如何修改attention的?如果不了解募判,這一部分就可以跳過(guò)了荡含。
首先搬出attention mechanism的公式,前兩個(gè)公式是整合encoder和decoder的隱式狀態(tài)届垫,學(xué)出來(lái)encoder释液、decoder隱式狀態(tài)與當(dāng)前輸出的權(quán)重關(guān)系a,然后根據(jù)權(quán)重關(guān)系a和隱式狀態(tài)e得到context vector用來(lái)預(yù)測(cè)下一個(gè)輸出装处。
Pointer Net沒(méi)有最后一個(gè)公式误债,即將權(quán)重關(guān)系a和隱式狀態(tài)整合為context vector,而是直接進(jìn)行通過(guò)softmax妄迁,指向輸入序列選擇中最有可能是輸出的元素找前。
2015年以來(lái),Pointer Net都有哪些用法判族,在某特定領(lǐng)域躺盛,這些概念如何用來(lái)解決實(shí)際問(wèn)題?
要使用好Ptr-net形帮,就要理解Ptr-net的精髓吧槽惫。正如上面所提到的一樣周叮,從輸入序列里“提取”一些元素來(lái)輸出。所以界斜,NLP領(lǐng)域有幾種玩法:
文本摘要《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》
計(jì)算機(jī)編程 爐石傳說(shuō)的卡片自動(dòng)編程《Latent predictor networks for code generation》