当前位置: 首页 > article >正文

循环神经网络-LSTM网络

文章目录

  • 前言
  • 一、LSTM网络简介
  • 二、LSTM的门结构
    • 1.遗忘门
    • 2.输入门
    • 3.输出门
  • 三、总结

前言

循环神经网络(Recurrent Neural Networks,RNN)是一种特殊的神经网络,具有能够处理序列数据的能力,然而,RNN在处理长序列时面临长期依赖问题,即当需要考虑较远过去的输入信息时,可能会由于反向传播过程中梯度的逐层累乘,导致梯度消失或爆炸,从而使得网络无法有效地学习到长时间跨度的依赖关系。

为了解决RNN的长期依赖问题,长短期记忆网络(Long Short-Term Memory,LSTM)应运而生。LSTM是RNN的一种变种,具有更强的能力来处理长距离依赖关系。其核心特点是使用了门控单元(gate units)来控制信息的流动,从而避免了梯度消失问题。

一、LSTM网络简介

LSTM的介绍:是一种RNN特殊的类型,可以学习长期依赖信息。大部分与RNN模型相同,但它们用了不同的函数来计算隐状态。
LSTM (长短时记忆网络)或 GRU(门控循环单元)只保留相关信息来进行预测,并忘记不相关的数据。简单说,因记忆能力有限,记住重要的,忘记无关紧要的。它们是解决短时记忆问题的解决方案,具有称为“门”的内部机制,可以调节信息流。
在这里插入图片描述

二、LSTM的门结构

LSTM的门控单元包括遗忘门(forget gate)、输入门(input gate)和输出门(output gate)。这些门控单元会根据输入数据和内部状态来决定哪些信息需要保留,哪些信息需要丢弃。
在这里插入图片描述

1.遗忘门

在这里插入图片描述
功能:决定应丢弃哪些关键词信息。
步骤:来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,然后与上述中的C值(即细胞状态,上一轮所保留的关键信息)相乘,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。最后,我们将所得结果导入上图红色矩形框的位置。

2.输入门

在这里插入图片描述

功能:用于更新细胞状态。
步骤:1、首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。
2、将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。
3、再次将所得结果导入图中红色矩形框,但是我们这里需要将该结果与前面遗忘门所得结果进行相加,即向遗忘门中的细胞状态添加新的关键信息得到最终的细胞状态。

3.输出门

在这里插入图片描述
功能:用来确定下一个隐藏状态的值。
步骤:1、将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数,进行归一化。
2、将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。

三、总结

LSTM通过以下原理克服了传统RNN在处理长期依赖时的局限性:

  • 细胞状态:提供一个不受梯度影响的直接信息传递路径,使长期记忆得以保持。
  • 门控机制:赋予模型选择性地保留、更新和输出信息的能力,解决了长期依赖中信息的精确管理和访问问题。
  • sigmoid与tanh:sigmoid激活函数用于生成门控信号,确保信息流的控制在逻辑意义上是连续且可微的;tanh函数则用于规范化候选信息和隐藏状态的值域。

总的来说,LSTM网络是一种强大的循环神经网络变种,它通过引入门控单元和细胞状态等结构创新,解决了传统RNN在处理长期依赖时的局限性。这使得LSTM网络能够在多种应用场景中有效地捕捉和利用序列数据中的长距离依赖关系,从而实现了更高的性能和更广泛的应用。


http://www.kler.cn/news/340973.html

相关文章:

  • protobuf之Message
  • VirtualBox+Vagrant快速搭建Centos7系统【最新详细教程】
  • 库函数相关(上一篇补充)
  • WPF中的Window类
  • 【hot100-java】N 皇后
  • JavaScript 网页设计案例与技巧
  • Linux入门3——vim的简单使用
  • GEE 教程:利用Landsat函数计算不同缓冲区内的NDVI,NDWI和EVI的平均值
  • Django makemigrations时出现TypeError: ‘module‘ object is not iterable
  • minio简单使用
  • PostgreSQL中WITH查询公用表表达式
  • Jenkins新安装的插件ThinBackup,如何恢复之前的备份
  • YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块
  • GO网络编程(五):海量用户通信系统3:整体框架与C/S通信总体流程【重要】
  • 解决github每次pull push输入密码问题
  • opencascade鼠标拖拽框选功能
  • Java | Leetcode Java题解之第468题验证IP地址
  • Windows10的MinGW安装和VS Code配置C/C++编译环境
  • mermaid 图表相关
  • 408算法题leetcode--第29天