最近看論文,發現了一個新的概念“Deep memory network”,那么今天就來梳理一下這個框架的基本原理及使用場景。
其實從提出的時間上來講,這個框架一點都不新,由Weston et al 在2014提出。這個框架描述是:“A memory network consists of a memory m and four components I,G,O and R, where m is an array of objects such as an array of vectors. Among these four components, I converts input to internal feature rePResentation, G updates old memories with new input, O generates an output representation given a new input and the current memory state, R outputs a response based on the output representation.” 這些描述看起來確實非常的繁瑣,但是其實如果抽象一下的話,memory network完全可以想象成一臺計算機,m是內存,I是輸入設備,R是輸出設備,其他的步驟完全可以看出是CPU對內存數據的更新操作。而名稱中的deep不過是指把多層這樣的結構串聯起來,構成了一個更深層次的網絡結構。其實如果接觸過深度學習的人都知道,RNN系列結構(LSTM、GRU)就屬于“Deep memory network”下的一個具體的例子。下面我們從兩篇論文出發,來講解一下這種結構是如何在實際問題中應用的。
首先講的是《aspect Level Sentiment Classification with Deep Memory Network》2016 EMNLP。他的網絡結構如下: 
這里的hop就代表了層數,這里學習了LSTM中的權值共享的思想,各個hop中的參數也是共享的,大大減少了模型的復雜度。他假設了aspect Word就是句子中的某一個詞語。模型的初始出入是aspect詞向量,這里的memory 中存放的是當前分析的一句話中所有的詞語所對應的詞向量,假設這些詞向量為mi,一句話有k個詞,gi=tanh(Watt.[mi;vaspect]+batt),根據這個式子我們可以得到{g1,g2,.......gk}。然后,我們把這些g向量送入到softmax中進行歸一化,αi=exp(gi)∑kj=1exp(gj),可以得到系數{α1,α2,......αk}。那么最后模型的輸出就是vec=∑ki=1αi.mi。接著這個vec被作為下一層的vaspect 被輸入到模型中,進行反復的變換。同時這篇論文還做了一個假設,即距離aspect詞語更近的詞語將會對該aspect有更大的貢獻,于是他把這種距離關系也考慮進去了,整體的公式是:mi=ei?vi,vi中的所有元素都是一樣的,由不同公式給出,總的來說就是離aspect詞越近這個系數越大。
接下來要講的是《End-To-End Memory Networks》2015 NipS。他研究的領域是自動問答,即給出幾句話的描述{x1,x2,......xn}和一個問題 q,然后自動根據問題回答出一個詞語 a(或者幾個詞語)。這里用的模型也是“memory network”,網絡結構如下: 
詞表大小是V。首先是輸入轉化矩陣A(d×V),需要注意的是這里的{x1,x2,......xn}都代表了一句話,而A的作用就是根據句子xi中的每一個詞語去生轉化成為內部的memory中的向量{m1,m2,.......mn},mi=∑jAxij,其中的xij是一種one-hot的表示方式。同理我們用另一個轉化矩陣B講問題q轉化成內部的表示u,u=∑jBqj,那么就有pi=softmax(u.mi)。同時模型定義了,每個xi都對應了一個output vector ci,由另一個轉化矩陣C生成,ci=∑jCxij。那么定義o=∑pi.ci,那么我們最后的預測為a=softmax(W(o+u)),其中W的維度為V×d,即回答的結果為一個詞。為了能夠把不同的層次連接起來,定義uk+1=uk+ok。 從上述描述中我們不難看出,對于每個i層有不同的參數矩陣,AiBiCi,其實為了簡化復雜度,通常有如下的方式:1 Ak+1=Ck ;2 采用類似RNN的方式,即 A1=A2=A3=.....ANB1=B2=B3=.....BNC1=C2=C3=.....CN。其實我感覺就是約束參數的取值而已,其實我們自己也可以按照類似的思想進行構造。
總之,“deep memory network”代表了一種思想框架,指代了一種循環處理數據的邏輯結構。希望以后能在這方面做更加細致的研究和探索。