Deep memory network 框架

来源:互联网 发布:c语言上机考试题库 编辑:程序博客网 时间:2024/06/04 21:43

最近看论文,发现了一个新的概念“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=eivivi中的所有元素都是一样的,由不同公式给出,总的来说就是离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”代表了一种思想框架,指代了一种循环处理数据的逻辑结构。希望以后能在这方面做更加细致的研究和探索。

2 0
原创粉丝点击