Recurrent Entity Network笔记
- Recurrent Entity Network简称EntNet,最初在论文TRACKING THE WORLD STATE WITH RECURRENT ENTITY NETWORKS中提出,文中给出了lua+torch的代码地址。作者包括Facebook AI研究院的Mikael Henaff, Jason Weston(MemNN和MemN2N的作者)以及Yann LeCun.
1.Introduction
EntNet使用了动态长期记忆,因此可以用在语言理解任务,QA等。它跟NTM一样使用固定长度的memory,并且学习基于位置和内容的读写操作。不过它的更新可以多个memory并行处理。EntNet在bAbI数据集上取得了state-of-art的结果,并且是第一个解决了所有了bAbI-10k问题的模型,此外在大的数据集如Children’s Book Test上结果也很好。
简单来说,EntNet的每个memory cell由key和value组成,分别为 wi 和 hi 。 每个cell都有一个关联的processor,即一个gated RNN,负责根据当前输入和过去的状态来更新状态。各个memory cell是独立的,因此EntNet可以看做是一系列共享权值的gated RNN。
- 注意,在多层RNN中,每层的状态更新是通过前一时刻的状态和底层状态来决定的,所以层与层之间的状态是关联的,这与EntNet是不一样的。在另外一篇论文中给出了RelNet,在EntNet的基础上增加了参数 rij 给出每个两个memory hi 和 hj 的的关联程度,也取得了很好的结果。
2. Model
2.1 Input
- 输入是一个固定长度的向量,用来表示一个sentence。这个向量包含了embedding和position。t时刻的输出
st=∑fi⊙ei
其中 fi 是需要学习的multiplicative mask, 使用这个mask的目的在于加入位置信息, 也可以用其他的position encoding的方法。每次输入时都使用相同的