理解LSTM网络

本文深入浅出地介绍了循环神经网络(RNN)中的长短时记忆网络(LSTM)的基本原理及其优势。LSTM作为一种特殊的RNN,能够有效解决长期依赖问题,在众多任务中表现出色,如语音识别、语言模型等。
部署运行你感兴趣的模型镜像

说明

这篇同样是一篇译文,通篇很少公式,但对于基本原理讲得很明白,决定翻译并分享它。英语水平有限,有的地方翻译不到位也敬请告知。原文地址如下,Understanding LSTM Networks

————————————————————————–

循环神经网络

人类并不是在每时每刻都在重新启动他们的思考过程。就像你读一篇散文,你对某个单词的理解是基于前面每一个词的。你不会把之前的都扔掉,然后重新开始思考的。思考具有持续性。
传统的神经网络并不能做这样的工作,这是它的一个主要的缺点。比如说,假设在一部影片中的某一时刻你想辨别什么事件正在发生。传统的神经网络并不清楚怎么利用电影之前事件去推断如今的这个事件是什么。
循环神经网络会处理这个问题。它的内部含有循环结构,以便于使信息持久化。
这里写图片描述

在上图中,神经网络中的块 A 有某个输入xt和一个输出值 ht 。网络中的循环可以使信息从一个时间步传到下一个时间步。
这些循环让RNN看起来有些神秘。然而,如果多思考一会就会发现,它们并不是完全不同于一般的神经网络。一个循环神经网络可以被认为是同样一个网络的多个复制版本,每一个都会将信息传递给下一个。考虑一下如果我们打开这个循环是什么样子的:
这里写图片描述

链式结构揭露了RNN对于序列和列表是密切相关的。对于这样的序列数据,用这种结构是一种很自然的事情。
在最近几年,RNNs一直被成功运用到各种各样的问题中:语音识别、语言模型,翻译、图像字幕……
这些成功的关键是LSTM系列的应用,一个特别的循环神经网络,对于很多问题,它都比标准RNN工作地好得多。基于RNN的几乎所有的成绩斐然的工作都是LSTMs完成的。这篇文章就是探讨LSTMs。

长时间跨度的依赖问题

RNNs一个吸睛之处就是将当前的任务和以往信息结合起来,就像之前的视频帧会有助于理解当前的视频帧一样。如果RNNs能够做到,那将会很有用。但是它们可以吗?视情况而定。
有时候我们只需要看一下最近的信息就能执行当前的任务。比如说,一个语言模型要根据之前的单词预测下一个单词。在“the clouds are in the sky”这句话里面我们要预测最后一个单词,我们不需要太远的上下文信息,因为非常明显下一个单词是sky。在这种例子中,相关信息和使用相关信息的位置距离不是很远,RNNs能够学习到过去的信息。
这里写图片描述
但是也有需要更多上下文信息的情况。再思考一下这个句子,“I grew up in France… I speak fluent French.”,我们要预测最后一个单词。邻近的信息只能告诉你下一个单词也许是一个语言的名字,但是我们想要确定是哪一种语言,那就需要更远处的“France”的信息。相关信息和当前任务位置的距离很远是非常有可能的。
不幸的是,随着距离的增大,RNNs将不能学习到这些信息。
这里写图片描述

理论上RNNs肯定是能获取到很长时间外的信息。人类可以小心翼翼的为解决这类问题选取参数。但是在实践中,RNNs是没有能力学习到的。
谢天谢地,LSTMs就没有这样的问题!

LSTM网络

长短记忆单元网络(Long Short Term Memory networks)通常只被叫做LSTMs,是一种特殊的RNN,能够学习到长时依赖信息。它们在一大堆问题上工作地非常好,现在也被广泛应用。
LSTMs专门地被设计去避免长时依赖问题。能够记住长时间的信息是固有的属性,而不是努力去学习到的。
所有的RNN都有重复模块的链式结构。在标准的RNNs中,重复模块只有一个简单的结构,比如单一的tanh层。
这里写图片描述
LSTMs同样拥有这样的一个链式结构,但是重复模块本身却是一个不同的结构。不是只有一个神经网络层,它有四个,并以特殊的方式进行交互。
这里写图片描述
不用担心如何工作的细节。后面将一步步走一下这个图。现在让我们熟悉一下将要用到的标志。
这里写图片描述
上图中,每条线代表了整个向量,从一个节点的输出到另一个节点的输入。品红色圆圈代表了逐点操作,就像向量相加,黄色方块是学习过的神经网络层。融合的箭头代表了连结,分叉箭头代表了它的内容将会被复制并输送到不同的地方。

LSTMs背后的核心思想

LSTMs的关键是单元状态,就是贯穿图上的水平线。
单元状态有点像传送带。在整个链中它一直向下运行,同时只会做一些小的线性操作。信息很容易不被改变地流动。
这里写图片描述

LSTM通过门结构(gates)的确有能力对单元状态进行添加和移除。
门(gates)是一种选择性让信息通过的方式。它们是由sigmoid神经网络层和逐点相乘操作组成的。
这里写图片描述

sigmoid层的输出在0和1之间,描述了有多么想让这个信息通过。0值意味着不让任何信息过去,1值意味着让所有信息都通过。
一个LSTM有三个去保护和控制单元状态的门。

一步步走一下LSTM

在LSTM中第一步要做的就是决定什么样的信息是需要扔掉的。这个是sigmoid层决定的,它被叫做“遗忘门层”。它的输入是 ht1 xt ,并且输出一个0到1之间的数字作用于单元状态 Ct1 。1代表了信息完全保留,0代表了完全删除这个单元状态信息。
让我们回顾一下上面说的语言模型的例子,它基于以往的单词预测下一个单词。在这样的问题中,单元状态可能是包含性别的主语,所以正确的代词才可以被用。当我们看到一个新的主语时,我们想要忘掉关于性别的旧主语。
这里写图片描述

下一步是去决定什么样的信息要存储在单元状态中。这包含两部分。首先,第一个是叫做“输入门层”的sigmoid层,它决定要更新多少比例的值 ;然后一个tanh层产生了一个候选值的向量 Ct^ ,这会被加到这个单元状态上。在下一步,我们将会融合这两项来产生单元状态的更新值。
在语言模型的例子中,我们想要添加新的包含性别信息的主语到单元状态中,去取代我们已经遗忘的那个旧的单元状态。
这里写图片描述
现在是时候更新旧的单元状态 Ct1 了,新状态叫做 Ct 。之前的步骤已经决定了去做什么,现在只需要实际执行。
我们将旧单元状态乘以 ft ,遗忘我们之前决定遗忘的信息。然后加上 itCt^ 。这就是新的候选值。
在语言模型的例子中,这就是我们丢弃包含性别的旧主语和添加新主语的地方,就像我们之前步骤决定的那样。
这里写图片描述
最后需要决定的是我们想要输出的内容。输出将会基于我们的单元状态,但是也会做一个过滤操作。首先,我将会运行sigmoid函数(输出门)来决定想要输出的单元状态的比例。然后,我们使单元状态通过tanh函数(使单元状态的值可以在-1到1之间),并且乘以输出门的值,以便于只输出我们决定输出的部分。 tanh
还是语言模型的例子,既然之前是一个主语,它下一步也许就要输出与之相配的动词,这种情况就是接下来要说的。比如说,它会输出主语是单数还是复数,以便我们能知道下面形成的动词是什么形式,是单数还是复数。
这里写图片描述

总结

之前我提到了人们用RNNs取得一些值得纪念的成果。这些成果几乎全都是LSTMs实现的。它们对于大多数的任务真的是工作的很好。
写了很多的公式,LSTMs看起来相当神秘。希望在这篇文章中一步步走一下LSTM可以使它们更容易理解一些。

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值