【神经网络】循环神经网络RNN和长短期记忆神经网络LSTM

news2024/11/26 21:28:01

循环神经网络RNN和长短期记忆神经网络LSTM

欢迎访问Blog总目录!

文章目录

  • 循环神经网络RNN和长短期记忆神经网络LSTM
  • 1.循环神经网络RNN(Recurrent Neural Network)
    • 1.1.学习链接
    • 1.2.RNN结构
    • 1.3.RNN缺点
  • 2.长短期记忆递归神经网络LSTM(Long Short Term Memory)
    • 2.1学习链接
    • 2.2.LSTM结构
      • 2.2.1.基本结构
        • 2.2.1.1.隐藏态(单元状态)
        • 2.2.1.2.遗忘门
        • 2.2.1.3.记忆门
        • 2.2.1.4.输出门
      • 2.2.2.核心要素
    • 2.3.pytorch LSTM
      • 2.3.1.API
      • 2.3.2.LSTM的搭建
      • 2.3.3.示意图:star:

1.循环神经网络RNN(Recurrent Neural Network)

1.1.学习链接

一文看尽RNN(循环神经网络) - 知乎 (zhihu.com)

一文搞懂RNN(循环神经网络)基础篇 - 知乎 (zhihu.com)

1.2.RNN结构

循环神经网络(Recurrent Neural Network, RNN)是一类以 序列(sequence)数据为输入,在序列的演进方向进行 递归(recursion)且所有节点(循环单元)按链式连接的 递归神经网络(recursive neural network)。

RNN的输入不仅与当前时刻的输入有关,还与之前时刻的状态(输出)有关。(记忆功能)

RNN的基本结构:

RNN结构公式:
O t = g ( V ⋅ S t ) S t = f ( U ⋅ X t + W ⋅ S t − 1 ) O_t=g(V·S_t)\\ S_t=f(U·X_t+W·S_{t-1}) Ot=g(VSt)St=f(UXt+WSt1)

1.3.RNN缺点

梯度弥散:在误差反向传播上,误差会逐级*W,当W小于1时,误差在传递过程中会越来越小。到第一级时,误差会趋近于0,这会影响神经网络的训练修正。这种现象为梯度弥散。

梯度爆炸:在误差反向传播上,误差会逐级*W,当W大于1时,误差在传递过程中会越来越大。到第一级时,误差会非常大,这会影响神经网络的训练修正。这种现象为梯度爆炸。这也是RNN无法回忆久远记忆的原因。

长期依赖问题:由于只能回忆起 S t − 1 S_{t-1} St1,所以RNN只能处理比较接近的上下文信息。

2.长短期记忆递归神经网络LSTM(Long Short Term Memory)

2.1学习链接

LSTM - 长短期记忆递归神经网络 - 知乎 (zhihu.com)

简单理解LSTM神经网络-CSDN博客

Understanding LSTM Networks – colah’s blog

2.2.LSTM结构

LSTM有效解决了RNN的梯度问题和长期依赖问题。使用LSTM可以有效地、有选择地传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略(遗忘)。

【直观理解】LSTM相较于RNN,多了输入控制器、输出控制器和忘记控制器,以及全局记忆。假设全局记忆为故事主线,原本的RNN体系为直线剧情。如果分线剧情对主线剧情非常重要,输入控制器就会将该分线剧情写入主线。如果分线剧情对主线剧情有影响,忘记控制器会忘记之前的部分主线剧情,按比例替换成现在的新剧情。故主线剧情的更新取决于输入和忘记控制器。

2.2.1.基本结构

2.2.1.1.隐藏态(单元状态)

隐藏态即为主线,递归神经网络对于输入数据的“记忆”,用 C t C_t Ct表示神经元在 t t t时刻过后的“记忆”,这个向量涵盖了在 t + 1 t+1 t+1 时刻前神经网络对于所有输入信息的“概括总结”

2.2.1.2.遗忘门

σ \sigma σ为sigmoid神经层,sigmoid 函数会将任意输入压缩到 (0,1) 的区间上。遗忘门输入新的输入和上一时刻的输出,通过sigmoid 函数后,如果向量某个分量在通过sigmoid层后变为0,那么显然单元状态在对位相乘后对应的分量也会变成0,即“遗忘”了这个分量上的信息;如果向量某个分量在通过sigmoid层后变为1,即单元状态会“保留完整记忆”。遗忘门输出为(0,1)。
在这里插入图片描述

2.2.1.3.记忆门

tanh层将任意输入压缩到(-1,1)的区间上。首先,用tanh层将现在的输入向量中的有效信息提取出来,然后使用左侧的sigmoid函数来控制这些记忆要放“多少”进入单元状态。
在这里插入图片描述

在选择信息后,需要将信息并入“主线”单元状态中。
在这里插入图片描述

2.2.1.4.输出门

模型的输出,首先是通过sigmoid层来得到一个初始输出,然后使用tanh将值缩放到-1到1间(对先前信息的压缩处理),再与sigmoid得到的输出逐对相乘,从而得到模型的输出 h t h_t ht

在这里插入图片描述

2.2.2.核心要素

在这里插入图片描述

名称name含义
时间长度Time_step是指输入x数据的时间长度,对应 x 1 , x 2 , . . . , x T x_1,x_2,...,x_T x1,x2,...,xT
输入尺寸input_size是指输入x数据的数据大小。
隐藏层尺寸hidden_size是指隐藏层输出数据h的数据大小。
注意:网络输出数据的大小=隐藏层数据大小。

2.3.pytorch LSTM

2.3.1.API

API:LSTM — PyTorch 2.2 documentation

class RNNBase(Module):
	...
    def __init__(self, mode, input_size, hidden_size,
                 num_layers=1, bias=True, batch_first=False,
                 dropout=0., bidirectional=False):
参数含义
input_size输入 x t x_t xt数据的数据大小
hidden_size隐藏层的大小(即隐藏层节点数量),输出向量h和output的维度等于隐藏节点数
num_layersLSTM块的级联数量(非时间尺度上的)
batch_first默认为False,也就是说官方不推荐我们把batch放在第一维,此时输入输出的各个维度含义为 (seq_length,batch,feature),True即为放在第一位

输入数据: input, (h_0,c_0)

参数含义维度
input输入数据 x t x_t xt(time_step, batch, input_size)
time_step为序列时间长度;
input_size为单个时刻的数据长度
h_0隐藏层输出(num_layers * num_directions, batch, hidden_size)|如果LSTM为双向(单向),则num_directions=2(1)
c_0(num_layers * num_directions, batch, hidden_size)

输出数据: output,(h_n, c_n)

参数含义维度
output输出数据 x t x_t xt(time_step, batch, num_directions * hidden_size)
h_T最后一个time_step的隐藏层输出(num_layers * num_directions, batch, hidden_size)
c_T最后一个time_step的cell输出(num_layers * num_directions, batch, hidden_size)

在这里插入图片描述

2.3.2.LSTM的搭建

案例:使用 s i n t sint sint预测 c o s t cost cost的取值

class Lstm(nn.Module):
    def __init__(self):
        super(Lstm, self).__init__()

        self.lstm = nn.LSTM(
            input_size=INPUT_SIZE,  # 1 数据长度为1
            hidden_size=32,  # rnn hidden unit 隐藏层节点数
            num_layers=1,  # number of rnn layer
            batch_first=True,  # input & output will has batch size as 1s dimension. e.g. (batch, time_step, input_size)
        )
        self.out = nn.Linear(32, 1)

    def forward(self, x, h_state):
        # x (batch, time_step, input_size)
        # h_state (n_layers, batch, hidden_size)
        # r_out (batch, time_step, hidden_size)
        r_out, h_state = self.lstm(x, h_state)

        outs = []  # save all predictions
        for time_step in range(r_out.size(1)):  # calculate output for each time step
            outs.append(self.out(r_out[:, time_step, :]))
        return torch.stack(outs, dim=1), h_state

rnn = Lstm()
print(rnn)
'''
Lstm(
  (lstm): LSTM(1, 32, batch_first=True)
  (out): Linear(in_features=32, out_features=1, bias=True)
)'''

2.3.3.示意图⭐️

在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件

文章目录 前言1. 创建Buckets和Access Keys2. Linux 安装Cpolar3. 创建连接MinIO服务公网地址4. 远程调用MinIO服务小结5. 固定连接TCP公网地址6. 固定地址连接测试 前言 MinIO是一款高性能、分布式的对象存储系统,它可以100%的运行在标准硬件上,即X86等…

回归测试覆盖率指的是什么?

定义 回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。 在软件开发过程当中,一旦软件代码做了修改,就有可能引入新的问题,所以这个时候就需要把已经完成了的验证用例重新跑一下&…

智能工业-方案优势

节省成本 ─键修改所有仓储物料信息,无需人工打印、更换仓位卡,降低人力成本;全程无纸化操作,节约材料成本;网络融合方案,降低硬件成本。 高效运营 优化信息变更、陈列、拣货等工作流程,全程APP管理,流程…

Windows Nginx 启动

先解压 nginx安装包,进入到安装目录下(配置环境变量没有用) 解压后的目录结构如上。 #启动服务 默认是80端口, #如果端口被占用,是启动不了的,会生成error log在log目录下 start nginx#停止nginx 服务 nginx -s stop#重新加载配置…

浅析安全传输协议HTTPS之“S”

当前互联网,在各大浏览器厂商和CA厂商的推动下,掀起了一股HTTPS应用浪潮。为了让大家更好的了解HTTPS,本文给大家介绍关于HTTPS 中的S一个整体的认识。从其产生的历史背景、设计目标说起,到分析其协议设计结构、交互流程是如何实现…

linux中查看占用端口的进程方法

1、netstat -tlnp | grep 端口号 netstat -tlnp|grep 3306 其中:95115是进程号,mysqld是进程名称 2、ss -ltnp | grep 端口号 注意:-tlnp和-ltnp ss -ltnp|grep 3306其中:mysqld是进程名称,95115是进程id 3、lsof…

Z变换与传递函数代码化

对于自动控制而言,其关键在于传递函数方程,根据其特性设计出控制器,控制器也是S域的传递函数,那么如何将传递函数用代码的形式表现出来呢?以下将介绍这种工程方法 1、Z变换 对于一个确定的传递函数,如下 …

vue3+高德地图,使用抛物线连接两点,实现线路脉冲和呼吸灯动画效果

最终实现效果 一&#xff1a;版本vue3jsAPI2.0loca2.0.0 二&#xff1a;下载地图加载器 npm i amap/amap-jsapi-loader --save 高德地图jsApi2.0&#xff0c;点击查看官网介绍 三&#xff1a;写成一个组件&#xff0c;哪里使用哪里引入即可&#xff0c;代码如下 <scrip…

深度揭秘:全氟己酮自动灭火毯的原理是什么?

全氟己酮自动灭火毯是近年来很受欢迎的新型消防灭火装置&#xff0c;它不仅高效环保、使用简单、无需安装任何附加设备&#xff0c;还可以主动感应到火灾并自动灭火。为什么它能够做到这一点呢&#xff1f;这要从全氟己酮自动灭火毯的原理说起。 全氟己酮自动灭火毯的原理是什…

JAVA 并发编程之死锁的产生及避免

死锁的产生 死锁可以理解为&#xff0c;在多线程并发竞争资源的环境下&#xff0c;在各自拥有锁的情况下&#xff0c;又去尝试获取对方的锁&#xff0c;从而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将一直阻塞下去。 代码示例&#xff1a; public cl…

分享|创业老阳推荐的Temu蓝海项目到底怎么样?

在当今竞争激烈的创业市场中&#xff0c;寻找一个具有潜力的蓝海项目成为了众多创业者的梦想。近日&#xff0c;创业老阳推荐的Temu蓝海项目引起了广泛关注。那么&#xff0c;这个项目到底怎么样呢?让我们一起来探讨一下。 首先&#xff0c;Temu蓝海项目在定位上具有显著优势 …

YOLOv8改进 添加大核卷积序列注意力机制LSK

一、Large Separable Kernel Attention论文 论文地址:2309.01439.pdf (arxiv.org) 二、Large Separable Kernel Attention注意力结构 LSK通过使用大型可分离卷积核来提升注意力机制的效果。在传统的注意力机制中,常用的是小型卷积核,如1x1卷积,来计算注意力权重和特征表示…

Junit单元测试框架 --java学习笔记

单元测试 就是针对最小的功能单元(方法)&#xff0c;编写测试代码对其进行正确性测试 之前是如何进行单元测试的?有什么问题? 只能在main方法编写测试代码&#xff0c;去调用其他方法进行测试无法实现自动化测试&#xff0c;一个方法测试失败&#xff0c;可能影响其他方法…

poi

文章目录 字号对照 字号对照

MQ中的交换机与队列

交换机与队列的介绍 1.流程 首先先介绍一个简单的一个消息推送到接收的流程&#xff0c;提供一个简单的图 黄色的圈圈就是我们的消息推送服务&#xff0c;将消息推送到 中间方框里面也就是 rabbitMq的服务器&#xff0c;然后经过服务器里面的交换机、队列等各种关系&#xff…

HarmonyOS实战开发-如何实现设备中应用时长的统计功能。

介绍 本示例使用bundleState相关接口完成设备中应用时长的统计功能。 效果预览 使用说明&#xff1a; 1.顶部的数据面板展示了最常用的五个应用的使用时间占比情况。 2.中部的竖向滑动栏展示了每个应用的使用总时长和最后一次使用的时间。 3.底部的横向滑动栏展示了不常用…

lua学习笔记15(元表的学习)

print("*****************************元表的学习*******************************") print("*****************************元表的概念*******************************") --任何变量都可以作为另一个表变量的元表 --任何表变量都可以有自己的元表 --当我…

以XX大学学生公寓为例的安科瑞远程抄表与配电能效系统解决方案【AcrelEMS-EDU校园综合能效管理】

建设背景 随着我国经济的高速发展&#xff0c;建筑能耗特别是国家机关办公建筑和大型公共建筑高耗能的问题日益突出。学校作为大型公共机构建筑的重要组成部分之一&#xff0c;其特点是占地面积大、建筑分布广、数量多、类型多样、用能情况复杂&#xff1b; 高校用能普遍问题…

私藏十几款营销软件工具:含视频、剧本素材、推流工具等精品免费软件工具!

很多小伙伴在操作自媒体的时候&#xff0c;都或多或少遇到过问题&#xff1a; 哪些剪辑工具好用&#xff1f;哪些素材网站可以用&#xff1f;哪里找选题&#xff1f;哪里找创意和热点&#xff1f;脚本怎么写&#xff1f;剧本怎么做&#xff1f; 工欲善其事&#xff0c;必先利…

【中文医疗词嵌入模型】SMedBERT:结构化知识图谱 + 混合注意力机制 + 提及-邻居上下文建模

【中文医疗词嵌入模型】SMedBERT&#xff1a;结构化知识图谱 混合注意力机制 提及-邻居上下文建模 提出背景SMedBERT 具体到点的设计逻辑SMedBERT的背景SMedBERT的工作原理 SMedBERT 具体实现细节3.1 符号和模型3.2 Top-K Entity Sorting3.3 提及-邻居混合注意力3.4 提及-邻居…