【论文笔记11】TRACKING THE WORLD STATE WITH RECURRENT ENTITY NETWORKS
这个模型也就是前面提到的动态记忆,这篇论文来自ICLR2017,论文比笔记还是参考了北邮的两位大佬的博客,后面给出了原博客地址。
论文提出了一种新的动态记忆网络,使用固定长度的记忆单元来存储世界上的实体,每个记忆单元对应一个实体,主要存储该实体相关的属性(如一个人拿了什么东西,在哪里,跟谁等等),并且该记忆会随着输入内容实时更新。多个记忆槽之间相互独立,由(key,value)组成。key用来标识实体,value用来存储实体相关的属性,也就是记忆。
1 模型结构
其架构如图所示,方块代表记忆单元,使用Gated RNN来实现该记忆单元的功能,一层代表一个RNN,也就是一个记忆槽,用来存储一个实体及其相关属性,共m层,且相互独立,但是每层内、各层间各个方块之间的参数共享,保持一致。key对应于w参数,每一层的w不一样,用来标识不同的实体。(w,h)就是记忆单元。
下面分别介绍模型的三个主要组件,输入模块、动态记忆模块、输出模块。
输入模块:将句子中的所有单词进行加权得到一个句子的整体语义表示(也就是文章表示法的模型二),公式如下,其中,f是模型需要学习的变量,用来学习句子中各单词的位置信息,并且在时间步上是共享的。
动态记忆模块:主要是四个计算过程。首先,对于每一个记忆槽而言,分别使用前一时刻的记忆 h 和该记忆单元的key w分别与输入s相乘,然后经过**函数得到一个门控单元g,这里可以理解成计算s中与实体信息和实体属性的相关程度。接着,当输入s后,计算需要更新的内容,需要注意的是UVW这三个参数在所有的记忆单元当中都是共享的。然后,根据门控单元g和h来对记忆进行更新,将新的信息写入记忆之中:最后对新的记忆进行归一化,论文中提到该归一化可以达到遗忘的作用,个人理解为归一化后能存储的信息量减少了,所以有有遗忘的那种效果。
输出模块:经过动态记忆模块后,已经把输入转化为记忆存储在各个记忆槽里面,那么接下来的工作就是根据问题来产生答案。首先要将问题编码成一个向量,使用与输入模块相同的操作(也就是问题表示法模型二),然后将问题的向量表示与每个记忆槽相乘,再经过softmax,这就相当于是一层注意力,用于获得问题和每个记忆槽之间的相关性。接着,使用该注意力权重p作为每个记忆槽的权重进行加权求和,得到所有记忆中关于该问题的相关记忆,作为答案候选。最后经过一个简单的输出层将其编码为最终的答案即可。这个输出层与一个一层的端到端记忆网络的输出层相似,传入问题和记忆,再经过**函数。
2 EntNet模型实例
3 参考文献
[1]论文原文
[2]参考笔记: