读论文写论文——MEMORY NETWORKS

来源:互联网 发布:新疆人口普查数据 编辑:程序博客网 时间:2024/05/22 15:48

MEMORY NETWORKS

摘要

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

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

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

模型概述

既然知道了模型的想法和要解决的问题,那么该怎么解决呢?
作者也是简单粗暴,你不是存储记忆单元小吗?好,我给你一个单独的存储单元,并且空间很大,记为Memory M。这个M是什么呢?其实它就是一个数组对象,m i   代表数组的第i个对象。除此之外,memory networks还有其他四个组件,分别是I,G,O,R 
1. IInput  代表的是输入特征映射,作用是将原始输入转换成模型的内部表示。比如说文章中作者以VSM(Vector Space Model) 作为输入的模型内部表示,当然还可以有很多其他的表示,如词嵌入(word2vect)表示。
2. GGeneralization  的作用是对于给定的输入,对M进行更新。这个组件其实作者并没有向文章中提出的完全使用起来,而是将其作为未来可能将使用到的模块。
3. OOutputFeatureMap  根据当前给定的输入以及M的状态,给出输出。本文中主要用于 获取与问题最相关的M的下标。
\begin{equation}o_1=O_1(x,m)=\arg \max_{i=1,...N}s_o(x,m_i)\end{equation}
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)。
\begin{equation}m_{H(x)}=I(x)\end{equation}
其中函数H(x)  是用于选择M的卡槽的,其实可以简单的认为是数组的下标。作者在文章对G组件进行了简化,仅对输入的特征表示进行了存储,对于更新等更复杂的任务并太涉及,将其作为了G的潜力。如更新时不仅对指定下标m i   进行更新,同时还可以根据上文或更久前的历史信息对多个下标进行更新。
所以在基础模型中,作者直接将输入存入到了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 最相关的m i  

o 1 =O 1 (x,m)=argmax i=1,...N s o (x,m i ) 

- k=2 第二相关的m i  
o 2 =O 2 (x,m)=argmax i=1,....N s o ([x,m o 1  ],m i ) 

说明:
此处的o 1 ,o 2   是M的的索引下标。
o 2   公式表示中:
\begin{equation}\arg \max_{i=1,....N}s_o([x,m_{o_1}],m_i)=s_o(x,m_i)+s_o(m_{o_1}, m_i)\end{equation}
4. Response  响应组件以O的输出作为输入,得到单一词作为响应。
\begin{equation}r=\arg\max_{w\in W}s_R([x,m_{o_1},m_{o_2}],w)\end{equation}
其中W是训练集中所有的词汇。
让我们串起来看一下,首先通过I,G  将小文章读入,转化并存储在M中;然后通过O  得到与问题x  最相关的k=2 m i  O  返回支持记忆卡槽的索引o 1 ,o 2   ;最后,将O  输出和问题x  作为r  的输入,遍历词汇表中的词汇,获得最优回答。

那么实验中作者是如何做到这一步的呢?其中的关键在函数s(x,y)  的实现。
\begin{equation}s(x,y)=\Phi_x(x)^TU^TU\Phi_y(y)\end{equation}
其中参数UR n×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并不相同U o ,U R  

训练

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

扩展

  1. 在模型中加入“segmentation”函数,以此来应对输入是词序列问题。
  2. 使用“hash”映射的方式替代原始直接memory存取,由此提高M的查询速度。
  3. 通过(1)添加三个维度,(2)修改s o t    函数使模型获取写时间特性,主要是何时写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。若s o t  (x,y,y  )>0  模型选择y,否则选择y’。
\begin{equation}s_{o_t}(x,y,y')=\Phi_x(x)^TU_{o_t}^TU_{o_t}(\Phi_y(y)-\Phi_y(y')+\Phi_t(x,y,y'))\end{equation}
由于公式的改变,原来的o 1 =O 1 (x,m)=argmax i=1,...N s o (x,m i ) , o t   的公式:
这里写图片描述
遍历整个Memory,通过公式s o t  (x,y,y  )  获取最优解。
训练方法变成:
这里写图片描述

代码

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

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

1 0
原创粉丝点击