程序与技术分享:DeepMemoryNetwork深度记忆网络

简介: 程序与技术分享:DeepMemoryNetwork深度记忆网络

RNN解决长期依赖的能力随着文本长度的增加越来越差,attention机制是解决这种问题的一种思路,今天我们再来看另外一种思路,深度记忆网络。Deep Memory Network在QA和Aspect based Sentiment等NLP领域都有过成功的实践,但其提出者本身是以通用模型的形式提出的。


Introduce of Memory Network


Memory Networks


一个记忆网络是由一个记忆


m


m


m(一个以


m


i


m_i


mi?作为索引的数组对象)和4个组件


I


,


G


,


O


,


R


I,G,O,R


I,G,O,R组成。其中:


Memory Networks的处理过程


给定一个输入x(例:字符、词或者句子(视处理力度而定),图像或者声音信号),模型处理过程如下:


将x转化为中间特征表示


I


(


x


)


I(x)


I(x)。使用新输入更新记忆


m


i


m_i


mi?:


m


i


=


G


(


m


i


,


I


(


x


)


,


m


)


,


?


i


m_i=G(m_i, I(x), m), \forall i


mi?=G(mi?,I(x)//代码效果参考:http://hnjlyzjd.com/hw/wz_24181.html

,m),?i使用新输入的中间特征表示和记忆计算输出特征

o


o


o:


o


=


O


(


I


(


x


)


,


m


)


o=O(I(x), m)


o=O(I(x),m)最后,解码输出特征到最终回复:


r


=


R


(


o


)


r=R(o)


r=R(o)


这个过程在训练和测试时都适用,两者之间的区别在于:测试时记忆也会被存储,但模型参数


I


,


G


,


O


,


R


I,G,O,R


I,G,O,R将不会再更新。


I


,


G


,


O


,


R


I,G,O,R


I,G,O,R可以使用现有任何机器学习的方法来实现(SVM, 决策树)。


组件


I


I


I:


I


I


I可以使用标准的预处理步骤来实现,比如输入文本的语法分析、指代消解、实体识别等。它同样也可以将输入编码到一个中间的特征表示(将文本转化为稀疏或者稠密的特征向量)。


组件


G


G


G: 最简单的G的形式可以是将


I


(


x


)


I(x)


I(x)储存起来的槽位(slot):


m


H


(


x


)


=


I


(


x


)


m_{H(x)}=I(x)


mH(x)?=I(x)


其中


H


(


x


)


H(x)


H(x)是选择槽位的一个函数。即,


G


G


G只更新m的索引


H


(


x


)


H(x)


H(x),其他索引下的记忆部分将保持不变。更复杂的


G


G


G的实现还可以允许


G


G


G去根据当前输入x得到的新证据去更新先前存储的记忆。如果输入是字符级别或者词级别的你也可以将其进行分组。


如果记忆非常庞大(假设要记忆整个Freebase或者Wikipedia),你可能不得不把记忆使用


H


(


x


)


H(x)


H(x)来组织起来。


如果记忆已经被填满。你也可以使用


H


H


H来实现一种遗忘机制。


O


O


O和


R


R


R组件:


O


O


O组件被特别应用于读取记忆和执行推断,


R


R


R组件则根据


O


O


O的输出产生最终回复。例:在QA中,使用


O


O


O查找相关的记忆,然后


R


R


R生成文字来组成答案。


R


R


R可以是RNN,视


O


O


O的输出而定。这种设计基于的假设是,如果没有限定在这种记忆上,RNN会表现得相当差(事实上很多场景下确实如此)。


原论文给了一个QA的例子,但由于这个模型并没有广泛使用这里就不介绍了。我们转而介绍一种常用的端到端的记忆网络实现。


End-To-End Memory Network


端到端的记忆网络本质上也是一种RNN架构,但与RNN不同之处在于,在递归过程中会多次读取大型外部存储的记忆来输出一个符号。下面介绍的Memory Network可以有很多层,也易于反向传播,需要对网络的每一层进行监督训练。它以端到端的形式被应用于QA和Aspect Based Sentiment。


模型将一系列离散的输入


x


i


,


.


.


.


,


x


n


x_i,...,x_n


xi?,...,xn?存储在记忆中,并接受一个查询


q


q


q,输出回答


a


a


a。模型会将所有的


x


x


x写为记忆存储在一个固定大小的缓存中,然后寻求一个


x


x


x和


q


q


q的连续表示。该连续表示会被多跳处理以输出a。这使得错误信号能够在多级记忆中反向传播到输入。


Single Layer


整个模型是很多层堆起来的,我们先介绍单个层。


输入记忆表示(Input memory representation):假定我们把给定输入集


x


1


,


.


.


.


,


x


i


x_1,...,x_i


x1?,...,xi?存储在记忆中。整个输入集


x


i


{x_i}


xi?都会经由每个


x


i


x_i


xi?所处的连续空间的嵌入(embedding)被转化为维度为


d


d


相关文章
|
3月前
|
机器学习/深度学习 算法 数据挖掘
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本内容包含基于BiLSTM与遗传算法(GA)的算法介绍及实现。算法通过MATLAB2022a/2024b运行,核心为优化BiLSTM超参数(如学习率、神经元数量),提升预测性能。LSTM解决传统RNN梯度问题,捕捉长期依赖;BiLSTM双向处理序列,融合前文后文信息,适合全局信息任务。附完整代码(含注释)、操作视频及无水印运行效果预览,适用于股票预测等场景,精度优于单向LSTM。
|
4月前
|
机器学习/深度学习 小程序 算法
基于bp神经网络的adp程序
基于bp神经网络的adp小程序
106 0
|
9天前
|
机器学习/深度学习 数据采集 资源调度
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
基于长短期记忆网络定向改进预测的动态多目标进化算法(LSTM-DIP-DMOEA)求解CEC2018(DF1-DF14)研究(Matlab代码实现)
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。
|
3月前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于Matlab 2022a/2024b实现,结合灰狼优化(GWO)算法与双向长短期记忆网络(BiLSTM),用于序列预测任务。核心代码包含数据预处理、种群初始化、适应度计算及参数优化等步骤,完整版附带中文注释与操作视频。BiLSTM通过前向与后向处理捕捉序列上下文信息,GWO优化其参数以提升预测性能。效果图展示训练过程与预测结果,适用于气象、交通等领域。LSTM结构含输入门、遗忘门与输出门,解决传统RNN梯度问题,而BiLSTM进一步增强上下文理解能力。
|
12月前
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
用MASM32按Time Protocol(RFC868)协议编写网络对时程序中的一些有用的函数代码
|
10月前
|
网络协议 物联网 数据处理
C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势
本文探讨了C语言在网络通信程序实现中的应用,介绍了网络通信的基本概念、C语言的特点及其在网络通信中的优势。文章详细讲解了使用C语言实现网络通信程序的基本步骤,包括TCP和UDP通信程序的实现,并讨论了关键技术、优化方法及未来发展趋势,旨在帮助读者掌握C语言在网络通信中的应用技巧。
230 2
|
11月前
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
969 4
|
11月前
|
安全 网络协议 IDE
使用Python编写网络扫描程序
使用Python编写网络扫描程序
152 0

热门文章

最新文章