序列建模之循环和递归网络 - 外显记忆篇

2024-08-24 07:52

本文主要是介绍序列建模之循环和递归网络 - 外显记忆篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序言

在序列建模的广阔领域中,循环神经网络( RNN \text{RNN} RNN)及其变体,如长短期记忆网络( LSTM \text{LSTM} LSTM)和门控循环单元( GRU \text{GRU} GRU),扮演着至关重要的角色。然而,这些网络虽然在处理序列数据方面展现出强大的能力,却常面临长期依赖问题的挑战,如梯度消失与梯度爆炸。此外,传统 RNN \text{RNN} RNN及其变体在记忆具体事实方面存在局限性,难以像人类一样明确保存和操作相关信息片段。因此,外显记忆的概念应运而生,旨在通过引入额外的记忆组件来增强神经网络对序列信息的处理能力。

外显记忆

  • 智能需要知识并且可以通过学习获取知识,这已促使大型深度架构的发展。然而,存在不同种类的知识。

    • 有些知识是隐含的、潜意识的并且难以用语言表达——比如怎么行走或狗与猫的样子有什么不同。
    • 其他知识可以是明确的、可陈述的以及可以相对简单地使用词语表达——每天常识性的知识,如 ‘‘猫是一种动物’’,或者为实现自己当前目标所需知道的非常具体的事实,如 ‘‘与销售团队会议在 141 室于下午 3:00 开始 ‘‘。
  • 神经网络擅长存储隐性知识,但是他们很难记住事实。

    • 被存储在神经网络参数中之前,随机梯度下降需要多次提供相同的输入,即使如此,该输入也不会被特别精确地存储。
    • Graves et al. (2014) \text{Graves et al. (2014)} Graves et al. (2014) 推测这是因为神经网络缺乏工作存储 ( working memory \text{working memory} working memory) 系统,即类似人类为实现一些目标而明确保存和操作相关信息片段的系统。
    • 这种外显记忆组件将使我们的系统不仅能够快速 ‘‘故意’’ 地存储和检索具体的事实,也能利用他们循序推论。
    • 神经网络处理序列信息的需要,改变了每个步骤向网络注入输入的方式,长期以来推理能力被认为是重要的,而不是对输入做出自动的、直观的反应 ( Hinton, 1990 \text{Hinton, 1990} Hinton, 1990) 。
  • 为了解决这一难题, ( Weston et al., 2014 \text{Weston et al., 2014} Weston et al., 2014) 引入了记忆网络 ( memory network \text{memory network} memory network),其中包括一组可以通过寻址机制来访问的记忆单元。

    • 记忆网络原本需要监督信号指示他们如何使用自己的记忆单元。
    • ( Graves et al., 2014 \text{Graves et al., 2014} Graves et al., 2014) 引入的神经网络图灵机 ( neural Turing machine \text{neural Turing machine} neural Turing machine),不需要明确的监督指示采取哪些行动而能学习从记忆单元读写任意内容,并通过使用基于内容的软注意机制(见 ( Bahdanau et al., 2015 \text{Bahdanau et al., 2015} Bahdanau et al., 2015)和后续篇章:深度学习应用 - 自然语言处理篇 - 使用注意机制并对齐数据片段),允许端到端的训练。
    • 这种软寻址机制已成为其他允许基于梯度优化的模拟算法机制的相关架构的标准:
      • Sukhbaatar et al., 2015 \textbf{Sukhbaatar et al., 2015} Sukhbaatar et al., 2015;
      • Joulin and Mikolov, 2015 \textbf{Joulin and Mikolov, 2015} Joulin and Mikolov, 2015;
      • Kumar et al., 2015a \textbf{Kumar et al., 2015a} Kumar et al., 2015a;
      • Vinyals et al., 2015a \textbf{Vinyals et al., 2015a} Vinyals et al., 2015a;
      • Grefenstette et al., 2015 \textbf{Grefenstette et al., 2015} Grefenstette et al., 2015
  • 每个记忆单元可以被认为是 LSTM \text{LSTM} LSTM GRU \text{GRU} GRU 中记忆单元的扩展。不同的是,网络输出一个内部状态来选择从哪个单元读取或写入,正如数字计算机读取或写入到特定地址的内存访问。

  • 产生确切整数地址的函数很难优化。

    • 为了缓解这一问题, NTM \text{NTM} NTM实际同时从多个记忆单元写入或读取。
    • 读取时,它们采取许多单元的加权平均值。
    • 写入时,他们对多个单元修改不同的数值。
    • 用于这些操作的系数被选择为集中在一个小数目的单元,如通过 softmax \text{softmax} softmax函数产生它们。
    • 使用这些具有非零导数的权重允许函数控制访问存储器,从而能使用梯度下降法优化。
    • 关于这些系数的梯度指示着其中每个参数是应该增加还是减少,但梯度通常只在接收大系数的存储器地址上变大。
  • 这些记忆单元通常扩充为包含向量,而不是由 LSTM \text{LSTM} LSTM GRU \text{GRU} GRU 存储单元所存储的单个标量。增加记忆单元大小的原因有两个。

    • 原因之一是,我们已经增加了访问记忆单元的成本。我们为产生用于许多单元的系数付出计算成本,但我们预期这些系数聚集在周围小数目的单元。通过读取向量值,而不是一个标量,我们可以抵消部分成本。
    • 使用向量值的记忆单元的另一个原因是,它们允许基于内容的寻址( content-based addressing \text{content-based addressing} content-based addressing),其中从一个单元读或写的权重是该单元的函数。如果我们能够生产符合某些但并非所有元素的模式,向量值单元允许我们检索一个完整向量值的记忆。这类似于人们能够通过几个歌词回忆起一首歌曲的方式。我们可以认为基于内容的读取指令是说, ‘‘检索一首副歌歌词中带有’ 我们都住在黄色潜水艇’ 的歌’’。当我们要检索的对象很大时,基于内容的寻址更为有用——如果歌曲的每一个字母被存储在单独的记忆单元中,我们将无法通过这种方式找到他们。通过比较,基于位置的寻址 ( location-based addressing \text{location-based addressing} location-based addressing) 不允许引用存储器的内容。我们可以认为基于位置的读取指令是说 ‘‘检索 347 档的歌的歌词’’。即使当存储单元很小时,基于位置的寻址通常也是完全合理的机制。
  • 如果一个存储单元的内容在大多数时间步上会被复制(不被忘记),则它包含的信息可以在时间上向前传播,随时间向后传播的梯度也不会消失或爆炸。

  • 外显记忆的方法图例1说明,其中我们可以看到与存储器耦接的 ‘‘任务神经网络’’。

    • 虽然这一任务神经网络可以是前馈或循环的,但整个系统是一个循环网络。
    • 任务网络可以选择读取或写入的特定内存地址。
    • 外显记忆似乎允许模型学习普通 RNN \text{RNN} RNN LSTM RNN \text{LSTM RNN} LSTM RNN不能学习的任务。
    • 这种优点的一个原因可能是因为信息和梯度可以在非常长的持续时间内传播(分别在时间上向前或向后)。
  • 作为存储器单元的加权平均值反向传播的替代,我们可以将存储器寻址系数解释为概率,并随机从一个单元读取 ( Zaremba and Sutskever, 2015 \text{Zaremba and Sutskever, 2015} Zaremba and Sutskever, 2015)。优化离散决策的模型需要专门的优化算法,将在后续篇章:深度生成模型 - 通过随机操作的反向传播篇 - 通过离散随机操作的反向传播中描述。目前为止,训练这些做离散决策的随机架构,仍比训练进行软判决的确定性算法更难。

  • 无论是软(允许反向传播)或随机硬性的,用于选择一个地址的机制与先前在机器翻译的背景下引入的注意机制形式相同 ( Bahdanau et al., 2015 \text{Bahdanau et al., 2015} Bahdanau et al., 2015),这在后续篇章:深度学习应用 - 自然语言处理篇 - 使用注意机制并对齐数据片段中也有讨论。甚至更早之前, 注意机制的想法就被引入了神经网络,在手写生成的情况下 ( Graves, 2013 \text{Graves, 2013} Graves, 2013),有一个被约束为通过序列只向前移动的注意机制。在机器翻译和记忆网络的情况下,每个步骤中关注的焦点可以移动到一个完全不同的地方 (相比之前的步骤)。

  • 循环神经网络提供了将深度学习扩展到序列数据的一种方法。他们是我们的深度学习工具箱中最后一个主要的工具。现在我们的讨论将转移到如何选择和使用这些工具,以及如何在真实世界的任务中应用。


  • 图例1:具有外显记忆网络的示意图,具备神经网络图灵机的一些关键设计元素。

  • 具有外显记忆网络的示意图,具备神经网络图灵机的一些关键设计元素。
    在这里插入图片描述

  • 说明:

    • 在此图中,我们将模型( ‘‘任务网络’’,这里是底部的循环网络)的 “表示’’ 部分与存储事实的模型(单元格集合)的 ‘‘存储器’’ 部分区分开。
    • 任务网络学习 ‘‘控制’’ 存储器,决定从哪读取以及在哪写入(通过读取和写入机制,由指向读取和写入地址的粗箭头指示)。

总结

  • 外显记忆是序列建模领域的一项重要进展,它通过为神经网络添加类似于人类工作记忆的系统,使模型能够更好地存储和检索具体事实,并据此进行推理。这种记忆组件不仅提升了模型在处理复杂序列任务时的性能,还促进了更高效的梯度传播,有助于解决长期依赖问题。记忆网络的提出为外显记忆的实现提供了初步框架,而神经网络图灵机等更高级的模型则进一步推动了该领域的发展。
  • 未来,随着外显记忆技术的不断成熟,我们有理由相信,序列建模的能力将得到显著提升,为自然语言处理、语音识别、机器翻译等领域带来更加智能和高效的解决方案。

敬请期待后续内容

深度生成模型 - 通过随机操作的反向传播篇
深度学习应用 - 自然语言处理篇

这篇关于序列建模之循环和递归网络 - 外显记忆篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101886

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

利用Python实现时间序列动量策略

《利用Python实现时间序列动量策略》时间序列动量策略作为量化交易领域中最为持久且被深入研究的策略类型之一,其核心理念相对简明:对于显示上升趋势的资产建立多头头寸,对于呈现下降趋势的资产建立空头头寸... 目录引言传统策略面临的风险管理挑战波动率调整机制:实现风险标准化策略实施的技术细节波动率调整的战略价

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义