记忆网络(Memory Network)

一,MEMORY NETWORKS

论文是第一次提出记忆网络,利用记忆组件保存场景信息,以实现长期记忆的功能。对于很多神经网络模型,RNN,lstm和其变种gru使用了一定的记忆机制,在Memory Networks的作者看来,这些记忆都太小了。这就是这篇文章的目的。

本部分将从三个部分讲解这篇文章:

  • 记忆网络各个组件的内容
  • 记忆网络在nlp的使用
  • 损失函数

1,记忆网络:

一个记忆网络(memory networks,简称为MemNN),包括了记忆m,还包括以下4个组件I、G、O、R(lstm的三个门,然后m像cell的list):

I: (input feature map): 用于将输入转化为网络里内在的向量。(可以利用标准预处理,例如,文本输入的解析,共参考和实体解析。 还可以将输入编码为内部特征表示,例如,从文本转换为稀疏或密集特征向量),通过I(x)得到记忆网络内部的特征

G: (generalization):更新记忆。使用新的输入更新记忆数组m。

即通过输入I(x)和记忆数组m,来更新对应的记忆m_{i}。比如论文中给出了一个G()函数的例子:

即将I(x)直接插入到记忆单元的插槽(slot)中,H(x)就是选择插槽的函数,这样只更新选择的插槽的记忆,而不更新其他的记忆。论文中也说,更复杂的G()函数,可以更新其他相关的旧的记忆,也可以在memory大小不够时进行遗忘。

O: (output feature map):从记忆里结合输入,把合适的记忆抽取出来,返回一个向量。每次获得一个向量,代表了一次推理过程。

R: (response):将该向量转化回所需的格式,比如文字或者answer。

2,记忆网络在nlp的使用:

场景:给一个段落和一个问题,给出回答

I: 输入的是一句话,简单地将I转换为一个频率的向量空间模型。

m: 记忆卡槽list。

G:简单地把读到的对话组里的每一句话的向量空间模型,插到记忆的list里,这里默认记忆插槽比对话组句子还多。

O:就是输入一个问题x,将最合适的k个支撑记忆(the supporting memories,在下文的数据集里会举出例子),也就是top-k。做法就是把记忆数组遍历,挑出最大的值。最后,O返回一个长度为k的数组。

即根据输出I(x)从记忆单元中选择出与I(x)最相关的记忆事实。

即将输入I(x)与第一个选择出来的记忆合并,然后再接着选择第二个与之相关的记忆。值得一提的是,因为此处加入了支持事实这一变量,因此在训练的时候数据集除了需要输入文本、问题和答案之外,还需要有支持事实这一个参数。

R:利用O得到的输出,返回一个词汇w。将输入和选择的记忆单元与此表中的每个单词进行评分Sr,然后选择得分最大的单词作为回答。即:

举一个例子,

前两行为输入的先验知识,第三行有一个问题“where is the milk now?” ,然后得到回答“office”。

根据question:“where is the milk now?”,得到最相关的记忆mo1=“Joe left the milk”,然后由于k=2,得到mo2== “Joe travelled to the office”,然后将[x,mo1,mo2]与词表W中的每个单词w进行评分,得到得分最大的单词”office”作为回复。在论文中也给出了评分函数sR和sO的表达式,它们有相同的样式:

U是一个n*D的矩阵,D是特征个数,n是嵌入层的维度。ϕx和ϕy将原始的文本映射到特征空间(如果已经映射过的,直接使用映射过的向量)。

这篇论文提出了一种泛化的的模型架构(Memory Network),但是很多部分并没有做得很完善,论文接下来也对输入词、memory比较大、新词等问题进行了专门的阐述,但是由于不是端到端训练的过程(因为要求训练集必须有支持事实这一事实),所以可以应用的场景较少,因此接下来Facebook团队就提出了端到端的记忆网络.

你可能感兴趣的:(深度学习)