【深度学习:LSTM Networks】了解 LSTM 网络

【深度学习:LSTM Networks】了解 LSTM 网络

      • 循环神经网络
      • 长期依赖问题
        • 相关知识传送门:
      • LSTM 网络
      • LSTM 背后的核心理念
      • LSTM 分步演练
      • 长短期记忆的变体
      • Conclusion

循环神经网络

人类在思考时并不是每时每刻都从头开始。当你阅读这篇文章时,你会基于之前单词的理解来理解接下来的每个单词。你不会抛弃之前的所有内容,然后重新开始思考。你的思考是连续的。

传统的神经网络无法做到这一点,这是它们的一个主要缺点。例如,假设你想对电影中每个场景发生的事件类型进行分类。传统神经网络如何利用之前场景的信息来推理后续场景,这一点尚不清楚。

循环神经网络解决了这个问题。它们通过循环机制使信息能够持续存在于网络中。

在这里插入图片描述

循环神经网络有循环

在上图中,神经网络的一块 ,查看一些输入并输出一个值 。循环允许信息从网络的一个步骤传递到下一步。

这些循环让循环神经网络看起来有些神秘。然而,仔细思考一下,它们实际上与普通神经网络并没有太大区别。循环神经网络可以被视为同一个网络的多个副本,其中每个副本都将信息传递给下一个。考虑一下如果我们展开循环会发生什么:

在这里插入图片描述

展开的循环神经网络

这种链状性质揭示了循环神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。

而且它们的确被广泛使用!在过去几年中,RNN在许多领域取得了惊人的成功,例如语音识别、语言建模、翻译和图像字幕等,例子数不胜数。我将把关于 RNN 可以实现的惊人壮举的讨论留给 Andrej Karpathy 的优秀博客文章《循环神经网络的不合理有效性》。但他们确实非常了不起。

这些成功背后的关键是“LSTM”——一种特殊类型的循环神经网络,它在许多任务上的表现远超传统模型。几乎所有激动人心的基于循环神经网络的成果都是通过LSTM实现的。本文将重点探讨这些LSTM。

长期依赖问题

RNN的一个吸引点是它们可能能将之前的信息与当前任务联系起来,比如利用前一个视频帧来理解当前帧。如果RNN能做到这点,那它们将非常有用。但是,真的能做到吗?这还有待观察。

有时,我们只需要查看最近的信息来执行当前的任务。例如,考虑一个语言模型尝试根据之前的单词来预测下一个单词。如果我们试图预测“the clouds are in the sky”中的最后一个单词,我们不需要任何进一步的上下文——很明显下一个单词将是天空。在这种情况下,当相关信息与需要的信息之间的差距很小时,RNN 可以学习使用过去的信息。

在这里插入图片描述
但也有一些情况我们需要更多背景信息。考虑尝试预测文本中的最后一个单词“我在法国长大……我说流利的法语。”最近的信息表明,下一个单词可能是一种语言的名称,但如果我们想缩小哪种语言的范围,我们需要更早的法国的上下文。相关信息与需要的信息点之间的差距完全有可能变得非常大。

不幸的是,随着差距的扩大,RNN 变得无法学习连接信息。

在这里插入图片描述
从理论上讲,RNN绝对具有处理这种“长期依赖关系”的能力。通过仔细选择参数,人类可以解决这类问题。然而,遗憾的是,在实际应用中,RNN似乎无法有效学习处理这些问题。 Hochreiter (1991) [德语] 和 Bengio 等人深入探讨了这个问题。 (1994),他发现了一些非常根本的原因来解释为什么这可能很困难。

幸运的是,LSTM并不面临这个问题!

相关知识传送门:

【深度学习:Recurrent Neural Networks】循环神经网络(RNN)的简要概述

LSTM 网络

长短期记忆网络(通常称为“LSTM”)是一种特殊类型的RNN,能学习长期依赖性。它们由Hochreiter和Schmidhuber在1997年提出,并在后续的研究中得到了广泛的完善和推广。在解决各种问题上,它们都表现出色,现在已被广泛应用。

LSTM 的设计明确是为了避免长期依赖问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西!

所有循环神经网络都由一系列重复的神经网络模块组成。在标准的RNN中,这个重复模块通常结构简单,比如只有一个tanh层。

在这里插入图片描述

标准 RNN 中的重复模块包含单层。

LSTM 也具有这种链式结构,但重复模块具有不同的结构。神经网络层不是单一的,而是四个,以非常特殊的方式相互作用。

在这里插入图片描述

LSTM 中的重复模块包含四个交互层。

不要担心正在发生的事情的细节。稍后我们将逐步介绍 LSTM 图。现在,让我们试着适应我们将要使用的符号。

在这里插入图片描述
在上述图中,每条线传递一个完整的向量,从一个节点的输出到另一个节点的输入。粉红色圆圈表示点对点运算,如向量加法,而黄色方框代表学习神经网络层。线条的合并表示串联,分叉则表示内容被复制,并发送到不同的位置。

LSTM 背后的核心理念

LSTM的核心在于单元状态,即在图的顶部水平延伸的那条线。

细胞状态类似于传送带。它直接穿过整个链条,只发生少量的线性交互。信息可以轻易地沿着它流动而不发生改变。

在这里插入图片描述

LSTM确实能够删除或向细胞状态添加信息,由称为门的结构仔细调节。

门是一种选择性地控制信息通过的机制。它们由sigmoid神经网络层和点对点的乘法操作构成。

在这里插入图片描述
sigmoid层产生的输出值在0到1之间,这个值决定了应该允许多少信息通过。0的值意味着“不允许任何信息通过”,而1则意味着“允许所有信息通过”。

LSTM 有三个这样的门,用于保护和控制细胞状态。

LSTM 分步演练

LSTM的第一步是决定从单元状态中丢弃哪些信息。这一决定由一个名为“遗忘门层”的sigmoid层做出。它根据 h t − 1 h_{t - 1} ht1 x t x_t xt,为细胞状态 C t − 1 C_{t−1} Ct1的每个元素输出一个介于0和1之间的数字。1表示“完全保留”,而0表示“完全舍弃”。

让我们回到我们的语言模型的例子,它试图根据之前的所有单词来预测下一个单词。在这种问题中,单元格状态可能包括当前主语的性别,以便使用正确的代词。当我们看到一个新的主体时,我们想要忘记旧主体的性别。

在这里插入图片描述
接下来,决定细胞状态中应存储哪些新信息,这分为两部分。首先,“输入门层”(又是一个sigmoid层)决定哪些值将被更新。然后,一个tanh层生成一个新的候选值向量 C t ~ \tilde{C_t} Ct~,这将被添加到状态中。接下来的步骤将结合这两部分来更新状态。

在我们的语言模型示例中,我们希望将新主题的性别添加到单元格状态中,以取代我们忘记的旧主题。

在这里插入图片描述
现在是时候将旧的细胞状态 C t − 1 C_{t−1} Ct1更新为新的细胞状态 C t C_t Ct了。前面的步骤已经确定了要执行的操作,我们只需将其付诸实施。

我们用旧状态乘以 f t f_t ft, 我们忘记了早前决定忘记的事情。然后加上它 i t ∗ C t ~ i_t ∗ \tilde{C_t} itCt~。 这是新的候选值,根据我们决定更新每个状态值的程度进行缩放。

在语言模型的例子中,这是我们实际删除旧主体性别信息并添加新信息的地方,就像我们在前面的步骤中决定的那样。

在这里插入图片描述
最后一步是决定输出什么。这个输出基于细胞状态,但是一个经过筛选的版本。首先,一个sigmoid层决定了我们想要输出细胞状态的哪些部分。然后,我们将细胞状态通过一个tanh函数(把值映射到-1和1之间),并将其与sigmoid门的输出相乘,这样我们就只输出我们决定输出的那部分。

对于语言模型示例,由于它刚刚看到了一个主题,因此它可能想要输出与动词相关的信息,以防接下来会出现动词。例如,它可能会输出主语是单数还是复数,这样我们就知道如果接下来是动词,动词应该变成什么形式。

在这里插入图片描述

长短期记忆的变体

至此,我描述的是一个非常基础的LSTM模型。但并非所有LSTM都与此完全相同。实际上,几乎每篇涉及LSTM的论文都会使用略有不同的版本。虽然差异微小,但其中一些变体值得一提。

由Gers和Schmidhuber(2000)介绍的一种流行的LSTM变体是添加“窥视孔连接”。这意味着我们让栅极层来观察细胞的状态。
在这里插入图片描述
上面的图表在所有的门上都加了窥视孔,但是许多报纸只给了一些窥视孔,而没有给其他的。

另一种变化是使用耦合的遗忘门和输入门。我们不是单独决定要忘记什么和要添加什么新信息,而是一起做出这些决定。只有当我们要输入一些东西的时候我们才会忘记。只有当我们忘记一些旧的东西时,我们才会向状态输入新的值。

在这里插入图片描述
LSTM的一个更显著的变体是由Cho等人(2014年)引入的门控循环单元(GRU)。它将遗忘门和输入门结合为一个“更新门”,同时合并了细胞状态和隐藏状态,并进行了其他一些更改。这种模型比标准的LSTM更为简洁,并且正变得越来越受欢迎。

在这里插入图片描述
这些只是几个最著名的LSTM变体。还有很多其他的,比如Yao等人(2015)的深度门控rnn。还有一些完全不同的方法来解决长期依赖,比如Koutnik等人的Clockwork rnn(2014)。

这些变体中哪一个是最好的?这些差异重要吗?Greff等人(2015)对流行的变体做了一个很好的比较,发现它们都差不多。Jozefowicz等人(2015)测试了超过一万种RNN架构,发现一些在某些任务上比lstm工作得更好。

Conclusion

之前,我提到了人们利用RNN取得的显著成就。实际上,这些成就大多是通过使用LSTM实现的。对于大多数任务而言,它们确实表现得更出色!

将lstm写成一组方程,看起来相当令人生畏。希望在这篇文章中一步一步地介绍它们能让它们变得更容易接近。

lstm是我们用rnn所能完成的一大步。人们很自然地想知道:是否又迈出了一大步?研究人员的一个普遍观点是:“是的!还有一个步骤,那就是注意力!”这个想法是让RNN的每一步都从一些更大的信息集合中挑选信息来查看。例如,如果您使用RNN来创建描述图像的标题,它可能会选择图像的一部分来查看它输出的每个单词。事实上,Xu等人(2015)正是这样做的——如果你想探索注意力,这可能是一个有趣的起点!利用注意力已经取得了许多非常令人兴奋的结果,似乎更多的结果即将到来……

注意力并不是RNN研究中唯一令人兴奋的线索。例如,Kalchbrenner等人(2015)的网格lstm似乎非常有前途。在生成模型中使用rnn的工作-例如Gregor等人(2015),Chung等人(2015)或Bayer & Osendorfer(2015) -似乎也非常有趣。过去几年对于递归神经网络来说是一个激动人心的时刻,而未来的神经网络只会更加激动人心!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/283940.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

波特云 集装箱和 海恒蓝 集装箱 自动化集装箱下单方案

背景: 这几天 遇到了一个客户 是做外贸的 需要大量多的集装箱,了解后 他们是需要在平台上 下单集装箱 才有可能预约到集装箱使用,所以公司每天都需要都需要派个人 盯着电脑来 下单集装箱。 波特云 网站:https://www.eportyun.com…

Springboot配置http-Only

项目框架 jdk1.8、springboot2.5.10 情况一 项目中未使用(权限认证框架:Sa-Token) application.yml文件内增加配置 server.servlet.session.cookie.http-onlytrueserver.servlet.session.cookie.securetrue (此条配置建议也加上) 情况二…

Vue:Vue与VueComponent的关系图

1.一个重要的内置关系&#xff1a;VueComponent.prototype.proto Vue.prototype 2.为什么要有这个关系&#xff1a;让组件实例对象&#xff08;vc&#xff09;可以访问到 Vue原型上的属性、方法。 案例证明&#xff1a; <!DOCTYPE html> <html lang"en"&…

2024年【制冷与空调设备运行操作】考试及制冷与空调设备运行操作免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【制冷与空调设备运行操作】考试及制冷与空调设备运行操作免费试题&#xff0c;包含制冷与空调设备运行操作考试答案和解析及制冷与空调设备运行操作免费试题练习。安全生产模拟考试一点通结合国家制冷与空调设…

FA模板制作

1、链接克隆模板的制作 &#xff08;1&#xff09;安装一个全新的Windows 10&#xff0c;挂载并安装tools&#xff0c;关闭防火墙 &#xff08;2&#xff09;挂载FusionAccess_WindowsDestop_Install_6.5.1.iso后启用本地Administrator本地超管&#xff0c;切换为本地超管&am…

车牌识别系统设计与实现

车牌识别系统设计与实现 项目概述 本项目旨在设计和实现一套车牌识别系统&#xff0c;通过使用车牌字符数据集进行训练&#xff0c;应用OpenCV、CNN&#xff08;卷积神经网络&#xff09;和PyQt5技术&#xff0c;实现车牌图像的预处理、位置选定、定位、字符分割和最终的车牌…

微信小程序自定义步骤条效果

微信小程序自定义一个步骤条组件&#xff0c;自定义文字在下面&#xff0c;已完成和未完成和当前进度都不一样的样式&#xff0c;可点击上一步和下一步切换流程状态&#xff0c;效果如下。 这是视频效果&#xff1a; 前端实现步骤条效果 下面我们一步步实现编码&#xff0c;自定…

最新解决msvcr100.dll丢失的方法,多种解决方法详细解析

msvcr100.dll丢失会导致某些程序或游戏无法正常运行&#xff0c;msvcr100.dll是Microsoft Visual C 2010的运行时组件&#xff0c;它包含了许多C标准库的函数实现。这些函数在程序运行时被调用&#xff0c;用于处理各种任务&#xff0c;如字符串操作、数学计算、文件操作等。因…

fastApi 项目部署

方式一&#xff0c;Uvicorn部署 Run a Server Manually - Uvicorn - FastAPI 1&#xff0c;linux服务器安装 python>3.8 2&#xff0c;安装 uvicorn : pip install "uvicorn[standard]" 3&#xff0c;上传项目到服务器 main.py from typing imp…

计算机专业个人简历范文(8篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

【深度学习:Recurrent Neural Networks】循环神经网络(RNN)的简要概述

【深度学习】循环神经网络&#xff08;RNN&#xff09;&#xff1a;连接过去与未来的桥梁 循环神经网络简介什么是循环神经网络 (RNN)&#xff1f;传统 RNN 的架构循环神经网络如何工作&#xff1f;常用激活函数RNN的优点和缺点RNN 的优点&#xff1a;RNN 的缺点&#xff1a; 循…

关于Python里xlwings库对Excel表格的操作(二十五)

这篇小笔记主要记录如何【如何使用xlwings库的“Chart”类创建一个新图表】。 前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b; &#xff08;2…

认识Linux指令之 “cp” 指令

01.cp指令&#xff08;重要&#xff09; 语法&#xff1a;cp [选项] 源文件或目录 目标文件或目录 功能: 复制文件或目录 说明: cp指令用于复制文件或目录&#xff0c;如同时指定两个以上的文件或目录&#xff0c;且最后的目的地是一个已经存在的目录&#xff0c;则它会把…

极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件

文章目录 前言1.软件安装完成后&#xff0c;打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库&#xff0c;我们需要两个软件的支持&#xff0c;分别是cpolar&#xff08;用于搭建内网穿透数据隧道…

2023-12-19 LeetCode每日一题(寻找峰值 II)

2023-12-19每日一题 一、题目编号 1901. 寻找峰值 II二、题目链接 点击跳转到题目位置 三、题目描述 一个 2D 网格中的 峰值 是指那些 严格大于 其相邻格子(上、下、左、右)的元素。 给你一个 从 0 开始编号 的 m x n 矩阵 mat &#xff0c;其中任意两个相邻格子的值都 不…

开发Chrome插件获取当前页面Cookie

前言 看《重来》的时候有提到&#xff0c;把自己的需求做成产品&#xff0c;给更多人提供价值。 就是本篇的文章的由来。 我的需求场景&#xff0c;因为要用postman测公司开发的接口&#xff0c;公司接口通过cookie做鉴权&#xff0c; 所以我每次都要f12&#xff0c;然后从Ne…

go slice源码探索(切片、copy、扩容)和go编译源码分析

文章目录 概要一、数据结构二、初始化2.1、字面量2.2、下标截取2.2.1、截取原理 2.3、make关键字2.3.1、编译时 三、复制3.1、copy源码 四、扩容4.1、append源码 五&#xff1a;切片的GC六&#xff1a;切片使用注意事项七&#xff1a;参考 概要 Go语言的切片&#xff08;slice…

算法(3)——二分查找

一、什么是二分查找 二分查找也称折半查找&#xff0c;是在一组有序(升序/降序)的数据中查找一个元素&#xff0c;它是一种效率较高的查找方法。 二、二分查找的原理 1、查找的目标数据元素必须是有序的。没有顺序的数据&#xff0c;二分法就失去意义。 2、数据元素通常是数值…

Linux调试工具—gdb

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;HEART BEAT—YOASOBI 2:20━━━━━━️&#x1f49f;──────── 5:35 &#x1f504; ◀️ ⏸ ▶️ ☰ …

基于grpc从零开始搭建一个准生产分布式应用(9) - Service业务逻辑层实现

开始前必读&#xff1a;​​基于grpc从零开始搭建一个准生产分布式应用(0) - quickStart​​ 前面章节的GRPC内基本是一个空实现&#xff0c;本章就实现下service业务逻辑层代码&#xff0c;因例子比较简单代码量也不算大&#xff0c;本章代码任务&#xff1a;1、用spring实现…