@ShawnNg
2016-12-14T22:27:51.000000Z
字数 2814
阅读 4279
深度学习
QA
Ankit Kumar, Peter Ondruska, Mohit Iyyer, James Bradbury, Ishaan Gulrajani, Victor Zhong, Romain Paulus, Richard Socher
MetaMind
输入有可能是一个句子,一段文章,或者几篇文章,问题的答案就在这些文档当中。输入序列是长度为的词序列。
GRU-RNN
输入是一个句子,对应的词序列,长度为
和Input module一样,使用GRU-RNN
输出就是final hidden state,也就是
对于每一轮迭代,使用以上三者来作为输入。
输出是第i次迭代,对应第t位置的一个得分,文中称为gate
对G建模,需要使用上述输入构建一个特征集
G是一个两层的前向神经网络
如果一些数据集给定了问题对应的事实,那就可以进行对Attention模型进行有监督学习,可以使用cross-entropy作为目标函数。
RNN用来迭代更新Memory
事实序列
基于事实序列的门得分
对GRU作出改变
Episodic Memory Module需要一个停止迭代的信号。如果是有监督的attention,我们可以加入一个特殊的end-of-passes的信号到inputs中,如果gate选中了该特殊信号,则停止迭代。对于没有监督的数据集,可以设一个迭代的最大值。
输出最后一次迭代的
该模块是最终结果输出的模块,主要是输出答案序列,作为一个decoder。
Question Module的输出
Episode Memory Module的输出
输出序列,每个都是词典长度大小。
这也是一个GRU-RNN,但是跟普通的decoder不一样,因为它的初始状态,而且每一次都用上一次生成的词和问题向量作为输入。
训练过程可以看作是一个有监督分类,对答案的输出序列使用cross-entroy目标函数。如果数据集有gate的监督数据,还可以将gate的cross-entroy加到总的cost上去,一起训练。训练直接使用backpropagation和gradient descent就可以。
这是DMN的开章,因此这也是最原始的动态记忆网络。文中详细地讲述了DMN的结构,这是理解DMN必读的文章。
尽管github上已经有不少的DMN实现,有用theano的,也有用tensorflow的。但是我希望通过复现来仔细学习DMN,因此我使用tensorflow进行实现。
Code: https://github.com/Shawn1993/Dynamic-Memory-Network-for-Tensorflow