1. 程式人生 > >End to End Memory network

End to End Memory network

關鍵詞

End2End, Memory Networks, Multiple hops

來源

特色

設計了全新網路,相對於LSTM,以詞為單位的時序,memory network是以句子為單位。

解決方案

原圖
這裡寫圖片描述
加備註圖
這裡寫圖片描述

計算過程

按原圖

lookup詞表A獲得句子向量表示,
mi=Axi , i大小是memory size
計算attention,或者說計算輸入的權重
pi=softmax(uTmi)

將輸出乘權重,得到最終的輸出o
輸出的嵌入向量
ci=Couti , i大小是memory size
最終輸出嵌入向量
o

=ipici
查詢的嵌入向量
u=Bq
預測結果
a^=softmax(W(o+u))

按實現程式碼

計算過程與原圖不一致,我按論文的實現程式碼做了標註,參見備註圖。
輸入sentences和query時,都有矩陣TA和TB矩陣

Ain=Axi+TAxi , i代表句子,長度固定為memory size
Aout=AinHlast , H代表隱藏層, Aoutmi
pi=softmax(Aout)
Bin=Bq+TBq
Bout=pBin
Cout=HlastBout
Dout=CoutBout
最後,儲存Dout為新的Hidden

多層網路

原文提供兩種方式。
第一種是鄰接,即Ak+1=Ck,依次遞推
第二種是類似於 RNN 中共享權重的模式,A1=A2==AkC1=C2==Ck
其餘與單層網路一致。

參考程式碼

facebook實現,使用Lua語言
網友實現,使用tensorflow