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

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

相关文章

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

uva 10131 最长子序列

题意: 给大象的体重和智商,求体重按从大到小,智商从高到低的最长子序列,并输出路径。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vect

poj 3181 网络流,建图。

题意: 农夫约翰为他的牛准备了F种食物和D种饮料。 每头牛都有各自喜欢的食物和饮料,而每种食物和饮料都只能分配给一头牛。 问最多能有多少头牛可以同时得到喜欢的食物和饮料。 解析: 由于要同时得到喜欢的食物和饮料,所以网络流建图的时候要把牛拆点了。 如下建图: s -> 食物 -> 牛1 -> 牛2 -> 饮料 -> t 所以分配一下点: s  =  0, 牛1= 1~

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

poj 2112 网络流+二分

题意: k台挤奶机,c头牛,每台挤奶机可以挤m头牛。 现在给出每只牛到挤奶机的距离矩阵,求最小化牛的最大路程。 解析: 最大值最小化,最小值最大化,用二分来做。 先求出两点之间的最短距离。 然后二分匹配牛到挤奶机的最大路程,匹配中的判断是在这个最大路程下,是否牛的数量达到c只。 如何求牛的数量呢,用网络流来做。 从源点到牛引一条容量为1的边,然后挤奶机到汇点引一条容量为m的边

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

poj3750约瑟夫环,循环队列

Description 有N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数),求小孩出列的顺序。 Input 第一行输入小孩的人数N(N<=64) 接下来每行输入一个小孩的名字(人名不超过15个字符) 最后一行输入W,S (W < N),用