读论文写论文——MEMORY NETWORKS

MEMORY NETWORKS

摘要

作者说自己提出了一个新的学习模型叫做“memory networks”,模型将推理与“长记忆”组件相结合。使用长记忆组件,可以用其进行推理预测,作者将该模型用于问答系统QA(Question Answering)。

介绍——为什么要提出这个模型

作者说当前的大多数的机器学习系统,无法自由的对记忆组件进行读写。如果可以无缝的自由读写,那么将大大提高模型的预测、推理能力。比如说,对于问答系统、文章推理,此类问题都会涉及大量的上下文内容,只有通过对上文内容的分析,才能获得较优的回答或推理。但是,当前包括RNN或LSTM等模型在内,虽然存在记忆功能,但并不理想,或者说是记忆单元太小了,不足以对上文的信息进行存储。所以作者就想将当前优秀的机器学习算法同“记忆”模块向组合,这样记忆模块的存储以及读写就弥补了原始算法的缺陷。

模型概述

既然知道了模型的想法和要解决的问题,那么该怎么解决呢?
作者也是简单粗暴,你不是存储记忆单元小吗?好,我给你一个单独的存储单元,并且空间很大,记为Memory M。这个M是什么呢?其实它就是一个数组对象, mi 代表数组的第i个对象。除此之外,memory networks还有其他四个组件,分别是 I,G,O,R
1. IInput 代表的是输入特征映射,作用是将原始输入转换成模型的内部表示。比如说文章中作者以VSM(Vector Space Model) 作为输入的模型内部表示,当然还可以有很多其他的表示,如词嵌入(word2vect)表示。
2. GGeneralization 的作用是对于给定的输入,对M进行更新。这个组件其实作者并没有向文章中提出的完全使用起来,而是将其作为未来可能将使用到的模块。
3. OOutputFeatureMap 根据当前给定的输入以及M的状态,给出输出。本文中主要用于 获取与问题最相关的M的下标。

o1=O1(x,m)=argmaxi=1,...Nso(x,mi)

4. RResponse 响应组件。将产生的输出转换成想要的对应的格式。例如,可以将输出作为RNN的输入,用于sequence-to-sequence任务。

由这个四大组件,作者就提出了该模型Memory Neural Networks(MemNNs)。
整个模型对于输入就产生了一个流过程:
这里写图片描述
这里写图片描述

从给出的架构可以看出,作者认为本次提出的更是一种想法,在这种架构下,可以完成任何你想干的事情。例如说,内部特征表示文章中使用VSM,你可以使用word embedding;文中响应是根据 output 的输出,将其映射到单一的词上,这里也可以换成RNN、SVM或更加复杂的模型;所以说MeMNNS具有较大的潜力。

案例分析

文章中作者给出了一个样例,样例给出一段文章,文章之后紧跟上提问,模型的任务就是通过学习文章,对于提问给出解答。
这里写图片描述
下面看一下模型的四大组件是如何相互合作,完成这项任务的。
1. Input 输入映射模块,首先要做的就是上文中的小短文(story)转换成内部特征表示 I(x) 。文章中使用的向量空间模型(VSM),每个维度以该词的词频为大小。
2. Generation I(x) 更新M的“卡槽”(slot)。

mH(x)=I(x)

其中函数 H(x) 是用于选择M的卡槽的,其实可以简单的认为是数组的下标。作者在文章对G组件进行了简化,仅对输入的特征表示进行了存储,对于更新等更复杂的任务并太涉及,将其作为了G的潜力。如更新时不仅对指定下标 mi 进行更新,同时还可以根据上文或更久前的历史信息对多个下标进行更新。
所以在基础模型中,作者直接将输入存入到了M中。
3. 第1,第2步进行了简化,那么3,4步的任务就较重,同时也是该模型的核心部分。 Output 输出组件要做的就是根据当前输入问题,也就是“Where is the milk now?/Where is Joe?/Where was Joe before the office?”其中之一,查找M中与其关系最接近的上下文,也就是文中所说的k个候选支持记忆(candidate supporting memory),其中k可以手动设置,文中设置k=2.
- k=1 最相关的 mi
o1=O1(x,m)=argmaxi=1,...Nso(x,mi)

- k=2 第二相关的 mi
o2=O2(x,m)=argmaxi=1,....Nso([x,mo1],mi)

说明:
此处的 o1,o2 是M的的索引下标。
o2 公式表示中:
argmaxi=1,....Nso([x,mo1],mi)=so(x,mi)+so(mo1,mi)

4. Response 响应组件以O的输出作为输入,得到单一词作为响应。
r=argmaxwWsR([x,mo1,mo2],w)

其中W是训练集中所有的词汇。
让我们串起来看一下,首先通过 I,G 将小文章读入,转化并存储在M中;然后通过 O 得到与问题x 最相关的 k=2 mi O 返回支持记忆卡槽的索引o1,o2 ;最后,将 O 输出和问题x 作为 r 的输入,遍历词汇表中的词汇,获得最优回答。

那么实验中作者是如何做到这一步的呢?其中的关键在函数s(x,y) 的实现。

s(x,y)=Φx(x)TUTUΦy(y)

其中参数 URn×D , D代表特征的数量,n代表嵌入维度。 Φx Φy 将原始的输入文本映射到D维的特征空间。文章中 D=3|W| ,D的维度等于所有词汇数量的3倍,为什么要3倍呢?因为作者认为词典中的每个词都有3种不同的表示方式,其中一份给予 Φy ,另两份给 Φx 。若输入x是问题中的词,则映射在位置1,若输入词是“记忆支撑”,那么映射在位置2,y映射在位置3。若其中某个位置未映射则置0。
这里写图片描述
在这 O,R 中,虽然 s(x,y) 的公式相同,但其中的训练参数U并不相同 Uo,UR

训练

模型的训练是一个监督学习的过程,使用最大距离损失和梯度下降法训练参数,文中作者的训练已知部分包括问题的答案支持答案的句子索引(支持记忆索引),就是在训练中事先知道哪句话对答案的帮助最大,而训练的过程就是要让(1)模型选择支持答案的句子索引与事先知道的尽量一致,(2)预测的答案尽量一致。
这里写图片描述
可以看到,其中 f¯ f¯¯¯ 就是事先知道的“支持记忆索引”, mo1,mo2 是模型预测的; r¯ 是正确答案, r 是预测答案。
论文中作者还强调如果将R 部分替换成RNN,模型同样适用,而对应的要讲训练部分中关于r的部分替换成对数似然损失,RNN的输入就是 [x,o1,o2]

扩展

  1. 在模型中加入“segmentation”函数,以此来应对输入是词序列问题。
  2. 使用“hash”映射的方式替代原始直接memory存取,由此提高M的查询速度。
  3. 通过(1)添加三个维度,(2)修改 sot 函数使模型获取写时间特性,主要是何时写memory。
  4. 处理未登录词。对于未登录词,作者采用该词左右两边的内容来代替,所以 D 的维度从3|W|>5|W|

下面着重看一下扩展2:
作者说memory中的存入对象是何时被写入的,该特征信息对询问事实的问题没有太大帮助,如“中国的首都是哪里?”。但对于回答基于小故事的问题至关重要,作者在原有模型D的基础上增加了3个维度 D=3|W|+3
这里写图片描述
这三个维度的大小0/1,由公式 Φt(x,y,y) 决定。判断x是否晚于y,x是否晚于y’,y是否晚于y’,用不着置为0。若 sot(x,y,y)>0 模型选择y,否则选择y’。

sot(x,y,y)=Φx(x)TUTotUot(Φy(y)Φy(y)+Φt(x,y,y))

由于公式的改变,原来的 o1=O1(x,m)=argmaxi=1,...Nso(x,mi) , ot 的公式:
这里写图片描述
遍历整个Memory,通过公式 sot(x,y,y) 获取最优解。
训练方法变成:
这里写图片描述

代码

代码请参考(https://github.com/npow/MemNN)(感谢代码作者的贡献)

参考
向量空间模型
memory networks博客
MEMORY NETWORKS原文
MemNNs源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值