【深度学习】RNN、LSTM、GRU

news2024/9/27 20:15:08

【深度学习】RNN、LSTM、GRU

  • RNN
  • LSTM
  • GRU
  • 结语

RNN

和普通神经网络一样,RNN有输入层、输出层和隐含层,不一样的是RNN在不同的时间 t t t会有不同的状态,其中 t − 1 t-1 t1时刻隐含层的输出会作用到 t t t时刻的隐含层
1
RNN因为加入了时间序列,因此训练过程也是和之前的网络不一样,RNN的训练使用的是BPTT(Back Propagation Through Time)。在训练 t t t时刻的时候,出现了 t − 1 t-1 t1的参数,因此对单个的求导就变成了对整个之前状态的求导之和。也正是因为存在长依赖关系,BPTT无法解决长时依赖问题(即当前的输出与前面很长的一段序列有关,一般超过十步就无能为力了),因为BPTT会带来所谓的梯度消失或梯度爆炸问题。主要问题就是因为在BPTT算法中,以weight为例,其求导过程的链太长,而太长的求导链在以 t a n h tanh tanh为激活函数(其求导值在 0 0 0 1 1 1之间)的BPTT中,连乘就会使得最终的求导为 0 0 0
在这描述

LSTM

在这里插入图2述
标准LSTM模型是一种特殊的RNN类型,在每一个重复的模块中有四个特殊的结构,以一种特殊的方式进行交互。在图中,粉色的圈代表一种pointwise操作(将定义域上的每一点的函数值分别进行运算,比如向量的和),而黄色的矩形就是可学习的神经网络层,每一个黄色的矩形为两个线性层(处理input tensor的是从input size到hidden size的线性层,处理t − 1 -1 1的hidden tensor的是从hidden size到hidden size的线性层)+一个gate函数( s i g m o i d sigmoid sigmoid)或激活函数( t a n h tanh tanh
LSTM模型的核心思想是“细胞状态”。“细胞状态”类似于传送带,直接在整个链上运行,只有一些少量的线性交互。信息在上面流传保持不变会很容易。
在这里插入图片33描述
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个sigmoid神经网络层和一个pointwise乘法操作Sigmoid层输出0到1之间的数值,描述每个部分有多少量可以通过。0代表“不许任何量通过”,1就指“允许任意量通过”。LSTM拥有三个门,来保护和控制细胞状态。
在这里插入图片描述1
在LSTM模型中,第一步是决定我们从“细胞”中丢弃什么信息,这个操作由一个忘记门层来完成。该层读取当前输入 x t x_t xt和前神经元信息 h t − 1 h_{t-1} ht1,由 f t f_t ft来决定丢弃的信息。输出结果1表示“完全保留”,0 表示“完全舍弃”。
在这里插入222图片描述
第二步是确定细胞状态所存放的新信息,这一步由两层组成。 s i g m o i d sigmoid sigmoid层作为输入门层,决定我们将要更新的值 i t i_t it t a n h tanh tanh层来创建一个新的候选值向量 C t ~ \widetilde{C_t} Ct 加入到状态中。
2
第三步就是更新旧细胞的状态,将 C t − 1 C_{t-1} Ct1更新为 C t C_t Ct。我们把旧状态与 f t f_t ft相乘,丢弃掉我们确定需要丢弃的信息。接着加上 i t ∗ C t ~ i_t * \widetilde{C_t} itCt 。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
44
最后一步就是确定输出了,这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。首先,我们运行一个 s i g m o i d sigmoid sigmoid层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过 t a n h tanh tanh进行处理(得到一个在-1到1之间的值)并将它和 s i g m o i d sigmoid sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

# 默认输入维度为(seq len, batch size, input dims)
torch.nn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, droput=0, bidirectional=False)
# 如果batch_first设置为True, 输入维度为(batch size, seq len, input_dims)
rnn = nn.LSTM(10, 20, 2)
# input: (seq len, batch size, input dims)
input = torch.randn(5, 3, 10)
# h0: (layer nums, batch size, hidden dims)
h0 = torch.randn(2, 3, 20)
# c0: (layer nums, batch size, hidden dims)
c0 = torch.randn(2, 3, 20)
# output: (seq len, batch size, hidden dims)
# hn: (layer nums, batch size, hidden dims)
# cn: (layer nums, batch size, hidden dims)
output, (hn, cn) = rnn(input, (h0, c0))

GRU

55
LSTM有很多变体,其中较大改动的是Gated Recurrent Unit (GRU)。它将忘记门和输入门合成了一个单一的更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM模型要简单。效果和LSTM差不多,但是参数少了 1 / 3 1/3 1/3,不容易过拟合。

# 默认输入维度为(seq len, batch size, input dims)
torch.nn.GRU(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, droput=0, bidirectional=False)
# 如果batch_first设置为True, 输入维度为(batch size, seq len, input_dims)
rnn = nn.GRU(10, 20, 2)
# input: (seq len, batch size, input dims)
input = torch.randn(5, 3, 10)
# h0: (layer nums, batch size, hidden dims)
h0 = torch.randn(2, 3, 20)
# output: (seq len, batch size, hidden dims)
# hn: (layer nums, batch size, hidden dims)
output, hn = rnn(input, h0)

结语

如果您有修改意见或问题,欢迎留言或者通过邮箱和我联系。
如果我的文章对您有帮助,转载请注明出处。

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

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

相关文章

强大的图像查看器:EdgeView mac中文

EdgeView mac中文版是mac上一款强大的图像查看软件,可以处理一些最流行的图像文件格式,同时还提供对导航杂志或漫画书的支持。EdgeView能够打开著名的图像文件格式主要包括JPG,GIF,PSD在内的多种格式文件,支持Retina显…

深度解析JavaScript自动化测试工具Cypress的工作运行原理

目录 引言 什么是Cypress? Cypress的工作原理 Cypress运行原理 Cypress和其他自动化测试工具有什么不一样? Cypress的缺点 【自动化测试工程师学习路线】 引言 在当今的软件开发中,自动化测试工具已成为不可或缺的一部分,…

负载均衡式在线OJ

目录 项目介绍所用技术与开发环境所用技术开发环境 项目各种安装升级 gcc安装 jsoncpp安装 cpp-httplib安装boost库安装与测试 ctemplate 项目宏观结构总体文件目录comm : 公共模块compile_run_server:编译和运行compiler.hpp编译runner.hpp 运行compiler_runner.hp…

ChatGPT 速通手册——开源社区的进展

开源社区的进展 在 ChatGPT 以外,谷歌、脸书等互联网巨头,也都发布过千亿级参数的大语言模型,但在交谈问答方面表现相对 ChatGPT 来说都显得一般。根据科学人员推测,很重要的一部分原因是缺失了RLHF(Reinforcement Learning with…

Banana Pi CM4 计算机模组评测(VS 树莓派计算模块 CM4)

如果您正在寻找一款可靠的单板计算机来提升您的下一个项目,但找不到满足您需求的 Raspberry Pi,让我们看看我是否可以提供帮助。在这篇详细的评论中,我将向您介绍 Banana Pi CM4,这是一款适用于各种任务的多功能且功能强大的解决方…

【OpenCV 例程 300篇】257.OpenCV 生成随机矩阵

『youcans 的 OpenCV 例程300篇 - 总目录』 【youcans 的 OpenCV 例程 300篇】257. OpenCV 生成随机矩阵 3.2 OpenCV 创建随机图像 OpenCV 中提供了 cv.randn 和 cv.randu 函数生成随机数矩阵,也可以用于创建随机图像。 函数 cv.randn 生成的矩阵服从正态分布&…

【caddy】 caddy反向代理api服务 聚合go-zero微服务 放过nginx让caddy来快速实现吧

帮助go-zero开发者聚合api 相关视频一、go-zero 微服务整体架构1、微服务的基本架构2、go-zero 微服务的 apiauthrpc.api 文件routes.go 文件 二、本地开发的痛点1、本地多个端口开启的服务2、apifox、postman 三、caddy1、mac下caddy安装2、配置我们自己的caddyfile1&#xff…

SpringBootWeb入门-HTTP协议

一、SpringBootWeb-快速入门 建好springboot工程之后,只留下这几个文件。 这个是springboot的父工程,其实就是继承 二、HTTP协议-概述 •HTTP-概述 三、HTPP协议-请求协议 四、HTTP协议-响应协议 一、状态码大类 状态码分类说明1xx响应中——临时状态码…

buuctf -2

目录 你竟然赶我走 大白 N种方法解决 [ACTF2020 新生赛]Include 1 php://filter的一些学习 [ACTF2020 新生赛]Exec [强网杯 2019]随便注 你竟然赶我走 1.下载文件,得到一张图片 2.放进010分析,在文件尾得到flag 大白 1.根据题目提示&#xff0…

Python安装模块总失败?一次教你学会镜像安装

人生苦短,我用python 安装模块总是不成功? 这次一次性讲清楚~ 还是安装报错指路:点击此处跳转文末名片获取 为什么会出现安装模块失败? 首先我们要知道 其实大部分我们在用的模块, 都是歪果仁开发的, 然而我们在输入 “pip install 模块名” 的时候,…

「 JVM 」常见的垃圾收集器Garbage collector(GC)

「 JVM 」常见的垃圾收集器Garbage collector(GC) 参考&鸣谢 【JVM系统学习之路】常见垃圾回收器 山间木匠 Java 的七种垃圾收集器 | Linux 中国 Jayashree Huttanagoudar 带你走近Java虚拟机到底有哪些经典的垃圾收集器 码上遇见你 文章目录 「 JV…

2023.04.17 运行开源代码tinyriscv步骤及遇到问题

tinyriscv:https://gitee.com/liangkangnan/tinyriscv/tree/verilator 如有错误之处还请不吝赐教! 1、安装gcc工具链 下载gcc工具链(百度云链接,提取码:yaib),使用下面的命令解压到/opt/riscv32目录下: …

Spring定时任务常用Cron表达式

目录 一、SpringBoot定时任务 定时任务概述 创建定时任务 代码开启定时任务 执行结果 (单线程) 多线程处理定时任务 执行结果(并发) 二、Cron详解 Cron表达式是什么 Cron表达式的结构 每个域可出现的字符类型和各字符的…

花生采摘

[NOIP2004 普及组] 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”。 鲁宾逊先生和多多都…

linux 安装神州通用数据库 V7.0

linux 安装神州通用数据库 V7.0 操作系统、数据库1、官方下载链接2、windows客户端下载链接3、官方安装手册4、安装前准备3.1、创建安装用户3.2、以root 用户修改神通数据库安装包的所有者为shentong 用户3.3、以root 用户创建神通数据库主目录并修改所有者为shentong 用户3.4、…

学成在线笔记+踩坑(2)——【内容模块】课程基础查询,swagger+数据库字典+Httpclient+跨域

目录 1.【内容模块】需求分析 2.【内容模块】模块工程的结构 3.【课程查询功能1】通用 3.1 分析数据模型 3.2 mybatis-plus代码生成器 3.3 内容模块聚合api,model,service模块 3.4 接口设计分析 3.5 【基础模块】分页查询模型类 3.6【基础模块】日期配置类 3.7【内容…

Ae 入门系列之九:表达式

与使用关键帧相比,Ae 的表达式 Expression也用于控制属性值。 只不过使用表达式能简化操作,大大提高工作效率,使复杂动画的制作变得更加轻松。 ◆ ◆ ◆ 表达式语法基础 表达式基于标准的 JavaScript 语言。 如果熟悉脚本语言编程&#xff…

AutoGPT初次探索:免费体验、使用指南与心得总结

AutoGPT初次探索:免费体验、使用指南与心得总结 写在前面的废话一、部署 Auto-GPT二、试运行 Auto-GPT三、我踩过的坑四、后续探索 AutoGPT是一种基于GPT的自动化系统,为GPT提供了一个身体和内存,使其能够自主执行任务,例如市场分…

自己的完整c++ cuda包

pytorch关于c的所有文档集合 Welcome to PyTorch Tutorials — PyTorch Tutorials 2.0.0cu117 documentation 1.前置条件 使用编辑器clion,安装好cudatoolkit,cudnn,pytorch环境,编译工具gcc等等。 记得要设置好cudatoolkit的…

【C++】哈希的应用——布隆过滤器

哈希的应用——布隆过滤器 文章目录 哈希的应用——布隆过滤器一、布隆过滤器的概念与性质1.布隆过滤器的引出2.布隆过滤器的概念3.布隆过滤器的误判4.布隆过滤器的应用场景5.布隆过滤器优缺点6.如何选择哈希函数个数和布隆过滤器长度 二、布隆过滤器的实现1.布隆过滤器基本框架…