2015年,Facebook首次提出Memory Network

应用领域:NLP中的对话系统。

 

大多数机器学习模型缺乏一种简单的方法来读写长期记忆。

 

例如,考虑这样一个任务:被告知一组事实或一个故事,然后必须回答关于这个主题的问题。

循环神经网络(RNN) 经过训练来预测下一个(一组)单词的输出。----> 记忆通常太小,并且不能准确地记住过去的事实(知识被压缩到密集的向量中)。

RNNs在记忆方面有困难。

然而,例如,在视觉和听觉领域,观看一部电影并回答有关它的问题需要长时间的记忆。

 

2. 基本思想

推理 + 长期记忆。

将机器学习策略中的推理与记忆组件相结合,学习如何有效地使用以及组件。

 

3. 具体方法

记忆网络的组成

记忆 m + 四个组件 I、G、O、R

m:由mi索引的objects数组,例如,向量数组或字符串数组。

I: input feature map (输入特征映射) 将输入转换为内部特征表示。

G: generalization (泛化) 根据新的输入更新记忆。在这个阶段,网络有机会压缩和泛化它的记忆以备将来使用。

O: output feature map (输出特征图) 在给定新的输入和当前记忆状态的情况下,在特征表示空间中生成一个新的输出。

R: response (响应) 将输出转换为所需的响应格式。例如,文本响应或操作。

 

流程

给定一个输入x(例如,输入字符、单词或句子),流程如下:

1. 将x转换为内部特征表示I(x);

2. 更新内存mi给定新的输入: mi = G(mi, I(x), m), ∀i ;

3. 给定新的输入和记忆,计算输出特征o: o = O(I(x), m) ;    // 找到对应记忆

4. 最后,解码输出特征o给出最终响应:r = R(o)。  // 根据第三步找到的记忆生成答案

 

最简单的G:

【 记忆网络 1 】 Memory Network

H(.) : 选择记忆中的一个“插槽”。该简单G函数将在记忆中的H(x)的位置进行更新,其他地方不变。

思考:可以对记忆进行分组,根据输入的特征选择更新记忆中对应的组;记忆满了,可以加入“遗忘策略”。

 

4. 实施与评价

MemNN : memory neural networks     // for text

基本模型:

 

模块:输入文本

首先假设这是一个句子:也可以是一个事实的陈述,或者需要系统回答的问题(基于单词的输入序列)。这个文本以原始的形式存储在下一个可用的记忆槽中。


G模块只用来存储这个新的记忆,旧的记忆不被更新。

 

模块:推理的核心模块

O

通过如下方式检索出得分最高的支持记忆:

【 记忆网络 1 】 Memory Network

的匹配程度进行打分。

k=2,利用迭代的方式发现第二个支持记忆:

 【 记忆网络 1 】 Memory Network

候选支持记忆初始输入和第一个支持记忆打分,方括号代表列表。

列表的解释:作为bag-of-words模型,将使用x和mo1在袋子里被表示(但使用两种不同字典),这相当于使用sO(x, mi) + (mo1,mi),然而更复杂的建模的输入(例如,非线性)可能并不是一个加和。

的输入。

R

最后,

,也就是输出刚刚检索到的句子。

为了进行真实语句的生成,可以利用RNN来代替。

文本回复限定为一个单词:

【 记忆网络 1 】 Memory Network

sR是对匹配进行打分的函数。

总结:O模块和R模块各有一种打分机制(sO, sR),分别用来找到最匹配记忆(一个字典)和该字典中最匹配的单词。

 

例子

未来回答问题x=“Where is the milk now?”

mo1=“Joe left the milk”

mo2=“Joe travelled to the office”(在Joe放下牛奶之前去过的最后一个地方)。

r=“office”。

【 记忆网络 1 】 Memory Network

 

在文中实验中,打分函数具有相同的形式,一个嵌入表示模型:

【 记忆网络 1 】 Memory Network

 

n是嵌入表示的维度。

D维的特征空间里。

,也就是词典中的每个单词有三个不同的表示:

x或支持记忆,以使得它们可以不同建模。

 

训练 

完全有监督的设置下训练,在训练数据中给定应有的输入和回答,以及被标记的支持这个回答的句子(测试集中只有输入)。

即,在训练时知道匹配记忆和单词最佳选择。训练使用一个边际排序损失和随机梯度下降(SGD)来进行。对于给定真实回复UR之上优化模型:

【 记忆网络 1 】 Memory Network

边际

f¯,f′¯,r¯(并非总和)。

使用RNN来实现记忆神经网络的

r。

,将只使用第一项用来训练。

 

 

接下来的部分,是一些基于基础模型的扩展

词序列作为输入

如果输入是词而非句子级别,即词是流的形式(就像RNN经常处理的那样),并且陈述和问题都没有进行词分割,此时,需要修改下之前描述的方法。

加入“分割”函数(通过学习得到),输入单词的最后没有分割的序列以寻找分割点。当分割器触发时(指示当前序列时分割段),将序列写入记忆,然后就可以像以前一样处理。

这个分割器的建模方式和其他模块类似,以嵌入表示模型的形式:

5. 不足

不能进行端到端的训练。

 

6. 未来工作

下一篇会写关于端到端的记忆网络。

相关文章: