论文札记之 - End-To-End Memory Networks
Yann Le Cun 大犇在 nips2016 列举 AI 的一些 obstacles,其中提到 Intelligence & Common Sence = Preception + Predictive Model + Memory + Reasoning & Planning,其后有一些 slide 专门介绍了 Memory Network 在 bAbI tasks ( Facebook AI 的文本理解/推理任务生成器 ) 上的应用。
摘要
文章提出 End-To-End 的 Memory Networks 框架,是一种新型的 RNN 架构,在输出最终结果之前会从一个外部存储器中多次循环读取数据,同时对2015年 J.Weston 提出的 Memory networks 进行对比,认为是其模型的连续形式,并且之前的模型不是很容易用bp进行训练,而且在网络的每一层需要监督学习。作者认为 End-To-End 是其模型的一大特点,能够从 input 到 ouput 直接训练,可以在很多任务上进行拓展,包括一些实现监督学习比较困难的任务,如语言模型,现实领域的监督问答等等。
bAbI 简介
下图是这篇 ETE Memory Network 在 bAbI Tasks 上应用的截图,方便了解下 bAbI 任务,左上是存储在 memory 中的 story ,也就是上下文,左下是 Question 和 Answer , 右边是 Answer生成的概率分布,整体来看类似于阅读理解任务。
实现方法
摘要中和 J.Weston 15年提出的网络进行了对比,简要的介绍下 J.Weston 的 Memory Networks。 网络是由一个 memery m 和 I、G、O、R 四个组件构成,I 对输入特征进行 map,映射到特征表示空间 input ;G 组件利用 input 更新 memory ;O 组件类似 RNN 的输出,根据最新的输入 input 和 memory 中的状态 state , 输出 output 向量. R 组件就是对 output 进行解码,转换成设计好的输出形式,如 actions, labels。看起来和 LSTM 区别不大, memory 类似 LSTM 的 cell 。
本文中的 End-To-End Memory Networks 实现方法也基本类似,模型包含了 memory,就是一串输入向量,一个 query,一个 output,和一个最终的 answer。
看下模型的框架,如下图所示,(a)是单层的结构,(b) 是多层的结构,就好比是左边是 RNN 的一个神经元,右边是一串。
在一层模型中有如下的计算流
总体来看,模型框架不是很复杂,作者对实验中的一些细节进行提及,比如,如何做 sentence representation ,第一种做法是采用 BoW 方法,对句子中所有的 word 的 embedding 进行 sum ,但是缺点很明显,失去了word的位置信息。 因此需要把位置信息 encode 进去,称为 position encoding (PE ) , 做法也比较简单,如下
结语
文章开始提出的模型框架并不复杂,但是在实验过程中不断的优化,提出 position encoding 和 temporal encoding 方法进行优化,还是值得学习的,在实际例子中也可以尝试下。
References
摘要
文章提出 End-To-End 的 Memory Networks 框架,是一种新型的 RNN 架构,在输出最终结果之前会从一个外部存储器中多次循环读取数据,同时对2015年 J.Weston 提出的 Memory networks 进行对比,认为是其模型的连续形式,并且之前的模型不是很容易用bp进行训练,而且在网络的每一层需要监督学习。作者认为 End-To-End 是其模型的一大特点,能够从 input 到 ouput 直接训练,可以在很多任务上进行拓展,包括一些实现监督学习比较困难的任务,如语言模型,现实领域的监督问答等等。
bAbI 简介
下图是这篇 ETE Memory Network 在 bAbI Tasks 上应用的截图,方便了解下 bAbI 任务,左上是存储在 memory 中的 story ,也就是上下文,左下是 Question 和 Answer , 右边是 Answer生成的概率分布,整体来看类似于阅读理解任务。
实现方法
摘要中和 J.Weston 15年提出的网络进行了对比,简要的介绍下 J.Weston 的 Memory Networks。 网络是由一个 memery m 和 I、G、O、R 四个组件构成,I 对输入特征进行 map,映射到特征表示空间 input ;G 组件利用 input 更新 memory ;O 组件类似 RNN 的输出,根据最新的输入 input 和 memory 中的状态 state , 输出 output 向量. R 组件就是对 output 进行解码,转换成设计好的输出形式,如 actions, labels。看起来和 LSTM 区别不大, memory 类似 LSTM 的 cell 。
本文中的 End-To-End Memory Networks 实现方法也基本类似,模型包含了 memory,就是一串输入向量,一个 query,一个 output,和一个最终的 answer。
看下模型的框架,如下图所示,(a)是单层的结构,(b) 是多层的结构,就好比是左边是 RNN 的一个神经元,右边是一串。
在一层模型中有如下的计算流
- Input memory represention : 上下文首先通过 embedding 矩阵 A 得到 m , 然后 输入 query embedding 为 u , 经过 , 生成 weight 向量 p .
- Output memory represention : 上下文再通过 embedding 矩阵 C 得到 c,将weight向量 p 和 c 做点积 ,的,得到输入向量 o .
- Generating the final prediction: 输出向量 o 和 query 的 embedding 向量 u sum 后 接一个softmax 产出最终结果 a 。
- 模型的参数应该是不少的,A 、C 参数矩阵的 size 是 d * V ; W 参数矩阵的 size 是 V * d , V是词典的大小,d 是embedding 的维度。
- Adjacent : 当前层的 embedding 权值矩阵,是上一层的输入 embedding 权值矩阵
- Layer-wise (RNN-like) : 参考 RNN 的方式,在时间序列上的参数共享 , .
总体来看,模型框架不是很复杂,作者对实验中的一些细节进行提及,比如,如何做 sentence representation ,第一种做法是采用 BoW 方法,对句子中所有的 word 的 embedding 进行 sum ,但是缺点很明显,失去了word的位置信息。 因此需要把位置信息 encode 进去,称为 position encoding (PE ) , 做法也比较简单,如下
- 对于句子 xi , 有 j 个 words, A 是 embedding 矩阵, BoW 的做法
- 加入 position encoding 后, , l 是一个列向量, , J 是句子中词的个数.
结语
文章开始提出的模型框架并不复杂,但是在实验过程中不断的优化,提出 position encoding 和 temporal encoding 方法进行优化,还是值得学习的,在实际例子中也可以尝试下。
References
[1] J. Weston, S. Chopra, and A. Bordes. Memory networks. In International Conference on Learning Representations (ICLR) , 2015.
[2] Sainbayar Sukhbaatar,Arthur Szlam,JasonWeston, and Rob Fergus.End-To-End Memory Networks.Proceedings of NIPS, 2015.
[3] https://github.com/facebook/MemNN/blob/master/README.md