Memory Network
转自:https://www.jianshu.com/p/e5f2b20d95ff,感谢分享!
基础Memory-network
传统的RNN/LSTM等模型的隐藏状态或者Attention机制的记忆存储能力太弱,无法存储太多的信息,很容易丢失一部分语义信息,所以记忆网络通过引入外部存储来记忆信息.记忆网络的一般框架如下图所示:
它包括四个模块:I(Input),G(Generalization),O(Output),R(Response),另外还包括一些记忆单元用于存储记忆.
Input:输入模块,用于将文本资源(文档或这KB)和问题(question)等文本内容编码成向量.然后文本资源向量会作为Generalization模块的输入写入记忆单元中,而问题向量会作为Output模块的输入.
Generalization:泛化模块,用于对记忆单元的读写,也就是更新记忆的作用.
Output:输出模块,Output模块会根据Question(也会进过Input模块进行编码)对memory的内容进行权重处理,将记忆按照与Question的相关程度进行组合得到输出向量.
Response:响应模块,将Output输出的向量转为用于回复的自然语言答案.
End-To-End Memory Networks
由于Memory-network的自身缺陷,不太容易使用反向传播进行训练,无法进行end-to-end的训练,所以在基础的模型之上进行了扩展,形成了可以end-to-end的模型.论文中提出了单层和多层两种架构,多层其实就是将单层网络进行stack。我们先来看一下单层模型的架构
单层 Memory Networks
输入模块:将文本资源sentence进行embedding得到文本向量保存到Output和Input两个记忆单元中,论文里介绍了两种方法BoW和位置编.BOW就是直接将一个句子中所有单词的词向量求和表示成一个向量的形式,这种方法的缺点就是将丢失一句话中的词序关系,进而丢失语义信息;而位置编码的方法,不同位置的单词的权重是不一样的,然后对各个单词的词向量按照不同位置权重进行加权求和得到句子表示。位置编码公式如下:lj就是位置信息向量
此外,为了编码时序信息,比如Sam is in the bedroom after he is in the kitchen。我们需要在上面得到mi的基础上再加上个矩阵对应每句话出现的顺序,不过这里是按反序进行索引,所以最终每句话对应的记忆mi的表达式如下所示:
这里给的符号A是Input中的A矩阵,同理,Output中的记忆向量也是这种方法求得,只不过矩阵符号换成B,结果不是mi是ci.注这里参数矩阵A和B不是共享的,都需要参与训练.
思考:是否可以使用RNN/CNN对文本表示进行建模呢?
输出模块:上面的输入模块产生的两个记忆模块Output和Input.一个(Input)用于与问题计算,得出问题与各个memory slot的相关度,另一个(Output)用于与Input产生的相关度计算,得出答案输出.
首先看第一部分,将Question经过输入模块编码成一个向量u,与mi维度相同,然后将其与每个mi点积得到两个向量的相似度(也可以用其他方法计算相似度),在通过一个softmax函数进行归一化(得到Question与各个memory slot的相关度评分或者说权重):
pi就是q与mi的相关性指标。然后对Output中各个记忆ci按照pi进行加权求和即可得到模型的输出向量o,也可以理解为是memory中跟question相关信息的汇总.
Response模块:输出模块根据Question产生了各个memory slot的加权求和,也就是记忆中有关Question的相关知识,Response模块主要是根据这些信息产生最终的答案。其结合o和q两个向量的和与W相乘在经过一个softmax函数产生各个单词是答案的概率,值最高的单词就是答案。并且使用交叉熵损失函数最为目标函数进行训练。
多层模型
首先来讲,上面几层的输入就是下层o和u的和。至于各层的参数选择,论文中提出了两种方法(主要是为了减少参数量,如果每层参数都不同的话会导致参数很多难以训练)。
1. Adjacent:这种方法让相邻层之间的A=C。也就是说Ak+1=Ck,此外W等于顶层的C,B等于底层的A,这样就减少了一半的参数量。
2. Layer-wise(RNN-like):与RNN相似,采用完全共享参数的方法,即各层之间参数均相等。Ak=...=A2=A1,Ck=...=C2=C1。由于这样会大大的减少参数量导致模型效果变差,所以提出一种改进方法,即令uk+1=Huk+ok,也就是在每一层之间加一个线性映射矩阵H。
总结:
Memory-Network可以用于MRC,KB-QA,多轮对话系统和语言模型建模.根据本人的理解,就是用于处理有历史信息(阅读理解中的文档,多轮对话的历史对话,以及语言建模中的前面的单词或字)的问题.本篇文章算是本人在学习memory-network时的笔记,所以有些地方写的不明白的可以参考大佬文章
知乎:呜呜哈 https://zhuanlan.zhihu.com/p/29679742.
Memory Network的更多相关文章
- 【RS】Collaborative Memory Network for Recommendation Systems - 基于协同记忆网络的推荐系统
[论文标题]Collaborative Memory Network for Recommendation Systems (SIGIR'18) [论文作者]—Travis Ebesu (San ...
- 【 记忆网络 2 】 End-to-End Memory Network
继上一篇:Memory Network 1. 摘要 引入了一个神经网络,在一个可能很大的外部记忆上建立了一个recurrent attention模型. 该体系结构是记忆网络的一种形式,但与该工作中的 ...
- 【 记忆网络 1 】 Memory Network
2015年,Facebook首次提出Memory Network. 应用领域:NLP中的对话系统. 1. 研究背景 大多数机器学习模型缺乏一种简单的方法来读写长期记忆. 例如,考虑这样一个任务:被告知 ...
- Long-Short Memory Network(LSTM长短期记忆网络)
自剪枝神经网络 Simple RNN从理论上来看,具有全局记忆能力,因为T时刻,递归隐层一定记录着时序为1的状态 但由于Gradient Vanish问题,T时刻向前反向传播的Gradient在T-1 ...
- Windows中查看进程的资源消耗(cpu, Disk,Memory,NetWork)
1.通过Windows Task Manager 的 Performance Tab 可以看到总体的性能消耗情况. 2.如果想看系统中每个进程的资源消耗,可以点击 下面的 Open Resource ...
- 论文笔记:Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering
Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering 2019-04-25 21: ...
- Recurrent Neural Network[Content]
下面的RNN,LSTM,GRU模型图来自这里 简单的综述 1. RNN 图1.1 标准RNN模型的结构 2. BiRNN 3. LSTM 图3.1 LSTM模型的结构 4. Clockwork RNN ...
- 论文笔记:Learning Dynamic Memory Networks for Object Tracking
Learning Dynamic Memory Networks for Object Tracking ECCV 2018Updated on 2018-08-05 16:36:30 Paper: ...
- (zhuan) Recurrent Neural Network
Recurrent Neural Network 2016年07月01日 Deep learning Deep learning 字数:24235 this blog from: http:/ ...
随机推荐
- 【423】COMP9024 Revision
目录: array '\0' 与 EOF 二维字符数组(字符串数组) 1. array: 参考:C 数组 参考:C 字符串 参考:C笔记之NULL和字符串结束符'\0'和EOF 总结:[个人理解,可能 ...
- SpringCloud学习成长之路七 高可用配置中心
上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如 ...
- Apache配置优化之开启KeepAlive
在HTTP 1.0中和Apache服务器的一次连接只能发出一次HTTP请求,而KeepAlive参数支持HTTP 1.1版本的一次连接,多次传输功能,这样就可以在一次连接中发出多个HTTP请求.从而避 ...
- 【Leetcode_easy】754. Reach a Number
problem 754. Reach a Number solution1: class Solution { public: int reachNumber(int target) { target ...
- 【Leetcode_easy】645. Set Mismatch
problem 645. Set Mismatch 题意: solution1: 统计每个数字出现的次数了,然后再遍历次数数组,如果某个数字出现了两次就是重复数,如果出现了0次,就是缺失数. 注意:如 ...
- iOS-MJRefresh框架
1.用MJRefresh框架实现上下拉刷新 1.1 如何使用这个框架,只需要告诉控件的scrollView是谁,就能将框架添加到我们的滚动视图中了 // 下拉刷新 MJRefreshHeaderVie ...
- eNSP——STP配置和选路规则
原理: STP是用来避免数据链路层出现逻辑环路的协议,使用BPDU传递网络信息计算出一根无环的树状网络结构,并阻塞特定端口. 在网络出现故障的时候,STP能快速发现链路故障,并尽快找出另外一条路径进行 ...
- Linux程序Segmentation fault (core dumped)
1 问题原因 Segmentation fault (core dumped)多为内存不当操作造成.空指针.野指针的读写操作,数组越界访问,破坏常量等.对每个指针声明后进行初始化为NULL是避免这个问 ...
- K8S 从入门到放弃系列文章目录(Kubernetes 1.14)
1)软件环境 软件 版本 系统 Centos7.5 Kubernetes 1.14.1 Docker 18.09 Calico 3.6 Etcd 3.3.12 2)部署过程简单概要 三台master节 ...
- sql复合索引使用和注意事项
1.定义: 单一索引: 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上; 复合索引: 复合索引也叫组合索引: 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引). 复合索引在 ...