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:
H(.) : 选择记忆中的一个“插槽”。该简单G函数将在记忆中的H(x)的位置进行更新,其他地方不变。
思考:可以对记忆进行分组,根据输入的特征选择更新记忆中对应的组;记忆满了,可以加入“遗忘策略”。
4. 实施与评价
MemNN : memory neural networks // for text
基本模型:
模块:输入文本
首先假设这是一个句子:也可以是一个事实的陈述,或者需要系统回答的问题(基于单词的输入序列)。这个文本以原始的形式存储在下一个可用的记忆槽中。
G模块只用来存储这个新的记忆,旧的记忆不被更新。
模块:推理的核心模块
O
。
,通过如下方式检索出得分最高的支持记忆:
的匹配程度进行打分。
k=2,利用迭代的方式发现第二个支持记忆:
候选支持记忆初始输入和第一个支持记忆打分,方括号代表列表。
对列表的解释:作为bag-of-words模型,将使用x和mo1在袋子里被表示(但使用两种不同字典),这相当于使用sO(x, mi) + (mo1,mi),然而更复杂的建模的输入(例如,非线性)可能并不是一个加和。
的输入。
R
最后,。
,也就是输出刚刚检索到的句子。
为了进行真实语句的生成,可以利用RNN来代替。
文本回复限定为一个单词:
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”。
在文中实验中,打分函数具有相同的形式,一个嵌入表示模型:
n是嵌入表示的维度。
D维的特征空间里。
,也就是词典中的每个单词有三个不同的表示:
x或支持记忆,以使得它们可以不同建模。
。
训练
在完全有监督的设置下训练,在训练数据中给定应有的输入和回答,以及被标记的支持这个回答的句子(测试集中只有输入)。
即,在训练时知道匹配记忆和单词最佳选择。训练使用一个边际排序损失和随机梯度下降(SGD)来进行。对于给定真实回复UR之上优化模型:
边际。
f¯,f′¯,r¯(并非总和)。
使用RNN来实现记忆神经网络的。
r。
,将只使用第一项用来训练。
接下来的部分,是一些基于基础模型的扩展。
词序列作为输入
如果输入是词而非句子级别,即词是流的形式(就像RNN经常处理的那样),并且陈述和问题都没有进行词分割,此时,需要修改下之前描述的方法。
加入“分割”函数(通过学习得到),输入单词的最后没有分割的序列以寻找分割点。当分割器触发时(指示当前序列时分割段),将序列写入记忆,然后就可以像以前一样处理。
这个分割器的建模方式和其他模块类似,以嵌入表示模型的形式:
不能进行端到端的训练。
6. 未来工作
下一篇会写关于端到端的记忆网络。