深度学习之循环神经网络 (基础)

news2024/11/15 5:09:02

循环神经网络简称为RNN,(之前讲到的卷积神经网络简称为CNN)。

以前我们在使用全链接网络的时候,我们将这种网络叫做Dense 或者是Deep。

Dense链接指的是全链接的。

我们输入的数据是数据样本的不同特征:x1,x2,x3....。

对于气象报道,如果我们知道当前的温度和气压来预测现在有没有雨是没有意义的,因为我们要提前报道,拿到现在的数据来推理得到现在的结果是不能够的。
所以我们要拿到之前若干天的数据,来预测后面是否会下雨。

卷积层的大小,也就是权重的个数只与通道,卷积核的个数,卷积核的大小有关,但是全连接层要和我们变换之后的数据大小有关。看上去我们卷积运算是比较复杂的,但是其实我们的权重并不多,而如果我们 使用全连接层的话,显然要使用更多的权重。所以我们在构建网络的过程中,全连接层占权重的比例是占大头的。因为我们在进行卷积的过程中,整个输入使用的卷积核是共享的,所以我们使用的权重就少。

我们将来在稠密层,如果使用全连接层进行处理,那么要进行的运算是天文数字,很难达到预期的效果,我们进行序列化数据的处理,一般使用RNN。我们需要用到共享的概念,权重共享来减少权重的数量。

我们仍然以天气情况作为我们的例子。我们将x1,x2,x3看成是一个序列,我们不仅要考虑x1,x2,x3之间的链接关系,我们还要考虑他们三者之间的前序和后序的时间顺序。换句话说,x2的数值会依赖于x1,x3的数值会依赖于x2和x1,即下一天的天气状况要部分依赖于前一天的天气状况。显然,我们一般的天气变化都是比较缓和的,很少有断崖式的变化。所以我们在预测天气的时候,大多数情况下,我们会根据前一天的情况,做出相应的判断。

RNN主要用于处理具有序列链接的输入数据,我们除了用于处理天气,股市,金融方面的数据之外。经常处理的还有我们的自然语言,自然语言是具有序列关系的,例如:我爱北京天安门,显然自然语言里面,我们用词来分割:我 爱 北京 天安门。这是有序列关系的,如果我们打乱他的顺序,是很难理解其中的意思的,例如:天安门 爱 北京 我。我们就难以理解。所以我们可以使用RNN来处理具有自然语言。

我们接下来说什么叫做RNN:

首先我们来了解一下什么叫做RNN Cell。

xt表示时刻t的数据,当然xt也是具有维度的,例如对于天气来说xt是一个三维的向量(气压,温度,地形)。经过RNN Cell转变之后,得到另外一个维度的向量,例如得到一个五维的向量,那么就说明,我们的RNN Cell是一个线性层。将输入的向量映射到另外一个向量里面。

这个线性层和我们平常用到的线性层有什么区别呢?这个线性层是共享的。

我们的输入是对应天数的特征,输入完之后送入我们的RNN里面,做线性变换,得到输出,我们将输出hn叫做hidden,就是隐层,在这里面我们要注意,它和之前线性层的区别是什么呢?我们每个输入的x,也就是序列里面的每一项,我们都送到RNN Cell里面。我们序列中每一项都和前面一项存在关系。即我们的h2里面,不仅要包含x2的信息,还要包含x1的信息。

我们在得到h1之后,不仅将h1输出了,而且我们还顺手将它送进下一个输入。

如果我们有先验知识,我们就可以将其作为h0输入给RNN。

例如我们想通过图像来生成文本:那我们就可以通过CNN+FC(卷积神经网络)的输出作为h0,这样我们就把卷积神经网络和循环神经网络就接上了。
如果我们没有先验,我们就将h0设为和h1,h2大小一样的全0的元素。

显然,我们进行处理的RNN Cell是同一个线性层。

如果我们的RNN Cell是一个linear层的话:具体实现如下:

x的维度是Input_size*1,所以Wih的维度是hidden*Input_size这样我们才能得到一个hiddensize*1这样的向量。然后再加上一个偏置,而对于我们输入的hidden来说,由上一层的结果得到,结果的大小是hidden_size*1,所以我们要乘以的矩阵是hidden_size*hidden_size。向量相加,达到信息融合的效果。

融合之后,做一个激活,在循环神经网络里面,我们喜欢使用tanh函数,为什么使用tanh函数而不是用sigmoid呢?因为tanh的输出是-1到+1,它被认为是效果比较好的激活函数。

显然我们做的运算就是这样的形式:

那么我们将我们的序列依次送进去RNN Cell里面,依次算出隐层的过程叫做循环神经网络:

如果我们要构造RNN:

有两种方法:一种是我们自己去构造RNN序列,自己写循环,另一种就是我们直接使用已经构造好的循环:

那么如果我们要构建RNN Cell的话,我们参数要设定我们输入的维度和我们隐层的维度。因为我们如果有这两个值,我们就能将权重和偏置量确定出来。

然而,我们使用的时候传入的参数是input和hidden,这里的input是batch*input_size。

代码实现如下:

当然我们的RNN可以选择多层,但是尽量往小的选,因为RNN的计算是比较耗时的。
我们经过RNN层的输出是两个,一个是从h1到hn的序列,即每一次的输出,一个是hn就,即最后的输出。

但是,难道hidden就是output的最后一个元素吗?当然不是:
下面是多层的RNN:(三层)

接下来我们讲一个小例子:

我们有一个seq到seq的任务(序列到序列):在这个任务里面,我们的输入是hello,我们要将hello转化为ohlol,我们想要训练循环网络来学习这个序列变换的规律。

首先我们看使用RNN Cell来实现这个功能,我们的输入是h e l l o我们隐层的输出是o h l o l。

但是这里面我们遇到的问题是,我们输入并不是向量,我们使用的是char而不是int。所以我们首先要将这些字符向量化,首先我们要将hello进行转换:

一般来说,在进行字符处理的时候,我们首先对字符构建一个词典。给每个词分配一个索引,当然可以是字母表顺序,也可以是随机的。然后我们就可以用向量表示出来:

再进行转化:(将向量转化为独热向量 One-Hot Vectors)
我们将独热向量送到RNN里面作为我们的输入。

所以我们的input_size=4。显然我们输入的是独热向量,那我们对应的就是多分类问题。
我们要输出的是类别。

训练过程如下:
显然,我们进行自然语言处理的时候传入的是独热向量,每一行,也就是对应一个字符的属性,作为xi输入。我们的每个输出hi表示每一个位置输出的字符。

具体的实现代码如下:

我们在处理自然语言的时候,刚刚我们使用的是独热向量,但是独热向量是有一些缺点的,下面是列出来的一些缺点:
首先呢,独热向量的维度太高。如果是对应字符还好,但是如果是对应单词,就需要上万个维度,显然是很难进行处理的。几万维的话会面对维度诅咒。
其次呢,我们的向量是比较稀疏的。
第三,它是硬编码的,每个次或字符是对应某个向量,而不是学习出来的。

于是我们就要思考,有没有这样一种方法,能达到低纬度,稠密,而且是学习到的,这是我们的需求。我们已经发现这样的方法:EMBEDDING

就是将高维度映射到低纬度,也就是数据的降维。可以类似为我们数据结构中的稀疏矩阵转化为三元组的方式。

当然我们可以进行查询,比如说我们要查询的是第二个元素,我们就在表中找到第二行。

所以呢我们可以这样改进我们之前的过程:

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

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

相关文章

STM32F407移植OpenHarmony笔记4

上一篇写到make menuconfig报错,继续开整。 make menuconfig需要/device/soc/*下面有对应的Kconfig文件。 直接去gitee下载stm32的配置文件拿来参考用。 先提取Kconfig文件,后面再添加其它文件。https://gitee.com/openharmony/device_soc_st/tree/Open…

ubuntu 22安装配置并好安全加固后,普通用户一直登录不上

现象 ubuntu 22安装配置并好安全加固后,普通用户一直登录不上 排查报错 查看日志/var/log/auth.log发现报错 Jan 30 15:49:57 aiv-O-E-M sshd[62570]: PAM unable to dlopen(pam_tally2.so): /lib/security/pam_tally2.so: cannot open shared object file: No …

Docker最新超详细版教程通俗易懂(基础版)

Docker概述 概念:容器虚拟化技术,系统平滑移植,解决了运⾏环境和配置问题的软件容 器,⽅便做持续集成并有助于整体发布的容器虚拟化技术 意义:Docker的出现使得Docker得以打破过去程序即应⽤的观念,透过…

详讲api网关之kong的基本概念及安装和使用(二)

consul的服务注册与发现 如果不知道consul的使用,可以点击上方链接,这是我写的关于consul的一篇文档。 upstreamconsul实现负载均衡 我们知道,配置upstream可以实现负载均衡,而consul实现了服务注册与发现,那么接下来…

短视频与小程序:如何实现完美结合?

在短视频日益成为人们娱乐、社交和信息获取的重要渠道的今天,如何在短视频平台进行小程序推广成为了许多企业和品牌关注的焦点。本文将介绍如何利用短视频平台进行小程序推广,提升品牌曝光和用户互动。 首先,打开乔拓云-门店系统的后台&#…

让AI帮你说话--GPT-SoVITS教程

有时候我们在录制视频的时候,由于周边环境嘈杂或者录音设备问题需要后期配音,这样就比较麻烦。一个比较直观的想法就是能不能将写好的视频脚本直接转换成我们的声音,让AI帮我们完成配音呢?在语音合成领域已经有很多这类工作了&…

Linux操作系统权限相关问题(一站式速通权限)

一、sudo命令 sudo yum install -y sl sudo命令的作用 不切换用户,就想让普通用户以root的身份,执行对应的指令 输入密码时,输入的是自己普通用户的密码,而不是root的密码!!! sudo可以进行…

500道微信小程序毕业设计题目,小程序新颖毕业选题推荐,建议收藏

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

通过Demo学WPF—数据绑定(一)✨

前言✨ 想学习WPF,但是看视频教程觉得太耗时间,直接看文档又觉得似懂非懂,因此想通过看Demo代码文档的方式进行学习。 准备✨ 微软官方其实提供了WPF的一些Demo,地址为:microsoft/WPF-Samples: Repository for WPF …

仿真APP在金属波纹管液压胀形工艺设计中的应用

一、背景介绍 金属波纹管是带有波纹状截面的金属管状零件,在工业中应用广泛。金属波纹管特殊的截面形状使其具备较好的柔韧性,能够在一定范围内伸缩弯曲。这一特性赋予波纹管两大用途:一是作为变形补偿器,可用于补偿管道设备由于…

MySQL原理(三)锁定机制

一、介绍: 1、锁的本质 业务场景中存在共享资源,多个进程或线程需要竞争获取并处理共享资源,为了保证公平、可靠、结果正确等业务逻辑,要把并发执行的问题变为串行,串行时引入第三方锁当成谁有权限来操作共享资源的判…

Windows Server 2025 LTSC 预览版来了

Windows Server 2025 LTSC 预览版来了 1. 安装 Windows Server 2025 LTSC 预览版2. 安装 VMware Tools3. Windows Server 2025 LTSC 预览版4. Windows Server 2025 LTSC 预览版下载地址 1. 安装 Windows Server 2025 LTSC 预览版 使用 VMware Workstation 安装, 安…

Mysql-事务(隔离级别,事务底层原理,MVCC)

什么是事务?有哪些特性? 事务:事务指的是逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败。 事务特性: 原子性(Atomicity): 原子性是指事务是一个不…

如何在 Ubuntu 中安装 Microsoft Edge 浏览器

微软终于聪明了一回,也学会了「打不过就加入」。Microsoft Edge 浏览器的 Linux 稳定版已经于 2020 年 10 月 23 日发布,并提供给 Linux 发行版使用。除了官方 Edge APT 源以外,还提供了.deb和.rpm格式的安装包。 Microsoft Edge 基于 Chrom…

###C语言程序设计-----C语言学习(7)#(调试篇)

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。 一. 程序调试 1.程序调试介绍: 程序调试是软件开发过程中非常重…

大坑!react+thress.js

2. UI交互界面与Canvas画布叠加 | Three.js中文网 (webgl3d.cn) // canvas画布绝对定位 renderer.domElement.style.position absolute; renderer.domElement.style.top 0px; renderer.domElement.style.left 0px; renderer.domElement.style.zIndex -1; 我按照教程设置了…

C#小结:以Winform为例,总结一些C#在桌面开发中一些技巧

目录 一、给列表增加按钮&#xff0c;打印实体信息 二、嵌套子窗体 一、给列表增加按钮&#xff0c;打印实体信息 private void button1_Click(object sender, EventArgs e) {List<Student> studentList new List<Student>(){new Student() { Id 1, Name &quo…

Hadoop-MapReduce-源码跟读-MapTask阶段篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、Mapper类 我们先看下我们写的map所继承的Mapper类 public class Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT> {/*** 传递…

python二维高斯热力图绘制简单的思路代码

import numpy as np import matplotlib.pyplot as plt from scipy.ndimage import gaussian_filter import cv2# 生成一个示例图像 image_size 100 image np.zeros((image_size, image_size))# 在图像中心创建一个高亮区域 center_x, center_y image_size // 2, image_size …

爱可声助听器参与南湖区价值百万公益助残捐赠活动成功举行

“声音大小合适吗&#xff1f;能听清楚吗&#xff1f;”今天下午&#xff0c;一场助残捐赠活动在南湖区凤桥镇悄然举行&#xff0c;杭州爱听科技有限公司带着验配团队和听力检测设备来到活动现场&#xff0c;为南湖区听障残疾人和老人适配助听器。 家住余新镇的75岁的周奶奶身体…