深度学习5从0到1理解RNN(包括LTSM,GRU等):内容丰富(上)

news2024/11/15 20:31:39

循环神经网络(Recurrent Neural Network, RNN) 是一种经典的深度学习网络结构,具有广泛的应用。其中,槽填充(Slot Filling)(即识别自然语言中的特定信息) 是其中一个应用场景,例如订票系统需要识别用户的出发地、到达时间和航班等信息。为了实现这一功能,可以使用前馈神经网络(feedforward neural network)将每个单词转换成向量,并通过训练模型来预测每个单词所属的槽。具体来说,我们可以使用词嵌入技术将单词映射到低维空间中的向量表示,然后将其输入到前馈神经网络中进行处理。例如,对于句子“I want to book a flight from Beijing to New York on June 1st”,我们可以将“Beijing”、“New York”和“June 1st”分别映射到对应的向量表示,然后输入到前馈神经网络中进行处理,最终得出用户想要预订从北京到纽约的机票,日期为6月1日的结果。
image.png
图 5.2 使用神经网络解决槽填充问题

5.1 独热编码

独热编码是一种常见的表示方式,但它需要为每个单词添加额外的维度,以便处理未知单词。另外一种方法是词哈希图,它可以将单词转换成向量,并将其用于前馈神经网络中。
image.png
然而,这种方法也存在一些问题,例如无法处理上下文信息。比如:假设用户 1 说:“在 6 月 1 号抵达上海”。用户 2 说:“在 6 月 1 号离开上海”,这时候“上海”就变成了出发地。但是对于神经网络,输入一样的东西,输出就应该是一样的东西。在例子中,输入“上海”,输出要么让目的地概率最高,要么让出发地概率最高。不能一会让出发地的概率最高,一会让目的地概率最高。在这种情况下,如果神经网络有记忆力的,它记得它看过“抵达”,在看到“上海”之前;或者它记得它已经看过“离开”,在看到“上海”之前。通过记忆力,它可以根据上下文产生不同的输出。如果让神经网络是有记忆力,其就可以解决输入不同的单词,输出不同的问题。

image.png

5.2 什么是 RNN?

在 RNN 里面,每一次隐藏层的神经元产生输出的时候,该输出会被存到记忆元(memory cell)。当下一次有输入时,这些神经元不仅会考虑输入,还会考虑之前存入的记忆元中的值。因此,循环神经网络可以考虑到序列的顺序,即使输入相同,输出也可能不同。
记忆元,即单元或隐状态。记忆元的作用是在循环神经网络中保存信息,以便于后续的计算。记忆元的值也可以称为隐状态,因为它代表了神经网络在某一时刻的状态。在循环神经网络中,隐状态的计算是循环的,也就是说,每一时刻的隐状态都依赖于前一时刻的隐状态。

记忆元可简称为单元(cell),记忆元的值也可称为**隐状态(hidden state)。 **

一个可能的示例(就只是简单的加法,但是考虑了之前的输出)
image.png

5.3 RNN 架构

使用循环神经网络处理槽填充这件事,如图 5.7 所示。用户说:“我想在 6 月 1 日抵达上海”,“抵达”就变成了一个向量“丢”到神经网络里面去,神经网络的隐藏层的输出为向量 _a_1, _a_1产生“抵达”属于每一个槽填充的概率 _y_1。接下来 _a_1 会被存到记忆元里面去,“上海”会变为输入,这个隐藏层会同时考虑“上海”这个输入和存在记忆元里面的 _a_1,得到 _a_2。根据 _a2 得到y_2, _y_2 是属于每一个槽填充的概率。

图 5.7 使用循环神经网络处理槽填充

这个不是三个网络,这是同一个网络在三个不同的时间点被使用了三次,用同样的权重用同样的颜色表示

有了记忆元以后,输入同一个单词,希望输出不同的问题就有可能被解决。如图 5.8 所示,同样是输入“上海”这个单词,但是因为红色“上海”前接了“离开”,绿色“上海”前接了“抵达”,“离开”和“抵达”的向量不一样,隐藏层的输出会不同,所以存在记忆元里面的值会不同。虽然 _x_2的值是一样的,因为存在记忆元里面的值不同,所以隐藏层的输出会不同,所以最后的输出也就会不一样
图 5.8 输入相同,输出不同示例

5.4 其他 RNN

RNN 也可以是深层的。比如把 _xt _丢进去之后,它可以通过一个隐藏层,再通过第二个隐藏层,以此类推 (通过很多的隐藏层) 才得到最后的输出。
相比于只有一个隐藏层的设计,深层循环神经网络可以经过多个隐藏层处理输入数据,从而获得更加准确的输出结果。每个隐藏层的输出会被存储在记忆元中,在下一个时间点读取并传递给下一层,如此反复直至最终输出。这种设计可以有效地提高模型的表现力和预测精度,适用于许多自然语言处理和语音识别等任务。
image.png

5.4.1 Elman 网络 &Jordan 网络

刚才讲的是简单循环网络(Simple Recurrent Network, SRN)(简单循环网络也称为 Elman 网络。),即把隐藏层的值存起来,在下一个时间点在读出来。还有另外一种叫做 Jordan 网络, Jordan 网络存的是整个网络输出的值,它把输出值在下一个时间点在读进来,把输出存到记忆元里。 Elman 网络没有目标,很难控制说它能学到什么隐藏层信息(学到什么放到记忆元里),但是 Jordan 网络是有目标,比较很清楚记忆元存储的东西。
图 5.10 Elman 网络和 Jordan 网络

5.4.2 双向循环神经网络

传统的循环神经网络只能从左往右或从右往左读取输入序列,而双向循环神经网络则能够同时考虑输入序列的前后两个方向的信息。具体来说,双向循环神经网络包括一个正向的循环神经网络和一个逆向的循环神经网络,它们分别从左往右和从右往左读取输入序列,并将各自的隐藏状态传递给一个输出层来产生最终的输出结果。相比于单向循环神经网络,双向循环神经网络具有更广泛的视野,因为它不仅可以看到输入序列的前面部分,还能看到后面的部分,从而更好地捕捉上下文信息。这种能力使得双向循环神经网络在自然语言处理等任务中表现出了更好的性能。例如,在槽填充任务中,双向循环神经网络能够看到整个句子,从而更好地确定每个单词的槽位,获得更好的效果。
image.png

5.4.3 长短期记忆网络

长短期记忆网络(LSTM)的工作原理:相比于普通的循环神经网络,LSTM能够更好地处理长期依赖关系,因为它具有三个门:输入门、输出门和遗忘门。这些门能够控制信息的流入和流出,从而使得LSTM能够有效地存储和检索信息。
具体来说,输入门控制着新信息的加入,输出门则决定了何时将信息传递给下一个状态,而遗忘门则负责清除不必要的信息。这三个门的开闭是由网络自身学习得到的,而不是由人工设定的规则。 这种自适应的学习方式使得LSTM能够更好地适应不同的任务和数据集。
为了实现这些功能,LSTM引入了一个称为“记忆元”的概念。记忆元是一个包含当前状态信息的向量,它可以被更新并用于后续的计算。 每个门都与记忆元有关联,它们的作用是在不同的情况下选择性地修改或保留记忆元中的信息。
注意是:long short-term memory (LSTM),不是long-short term memory

“-”应该在 short-term 中间,是长时间的短期记忆。之前的循环神经网络,它的记忆元在每一个时间点都会被洗掉,只要有新的输入进来,每一个时间点都会把记忆元洗掉,所以的短期是非常短的,但如果是长时间的短期记忆元,它记得会比较久一点,只要遗忘门不要决定要忘记,它的值就会被存起来。

图 5.12 LSTM 结构
记忆元对应的计算公式为_c′ _= g(z)_f _(zi) + _cf _(zf)
当新的输入 z 与控制输入门的信号 zi 组合时,会产生一个新的内部状态 c’ = g(z) * f(zi) + c * f(zf),其中 g(z) 是激活函数,f(zi) 控制输入门的开关程度,zf 控制遗忘门的开关程度。如果输入 f(zi) 等于,则相当于没有输入;如果 f(zf) 等于,则会清空内部状态 c。最后,通过 h(c’) 和控制输出门的信号 zo,可以产生输出 a = h(c’) * f(zo)。输出门的开关程度由 zo 控制,如果 zo 等于,则可以读取内部状态 c;否则无法读取。
image.png
如果不理解,还是看栗子吧!😚

5.4.4 LSTM 举例

网络里面只有一个 LSTM 的单元,输入都是三维的向量,输出都是一维的输出。这三维的向量跟输出还有记忆元的关系是这样的。假设 x2 的值是 1 时, x1 的值就会被写到记忆元里;假设 x2 的值是-1 时,就会重置这个记忆元;假设 x3 的值为 1 时,才会把输出打开,才能看到输出,看到记忆元的数字(记住!!!)
假设原来存到记忆元里面的值是 0,当第二个维度 x2 的值是 1 时, 3 会被存到记忆元里面去。第四个维度的 x2 等于,所以 4 会被存到记忆元里面去,所以会得到 7。第六个维度的x3 等于 1,这时候 7 会被输出。第七个维度的 x2 的值为-1,记忆元里面的值会被洗掉变为 0。第八个维度的 x2 的值为 1,所以把 6 存进去,因为 x3 的值为 1,所以把 6 输出。
image.png
下篇链接:在这里啦

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

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

相关文章

香橙派开启vnc

1连接香橙派 2. 更新系统 在SSH会话中,首先更新系统软件包列表并升级现有软件包: sudo apt update sudo apt upgrade3. 安装VNC服务器 安装VNC服务器软件,这里以x11vnc为例: sudo apt install x11vnc 出现如图输入如下代码即可…

Python爬虫:通过js逆向获取某瓜视频的下载链接

爬虫:通过js逆向获取某瓜视频的下载链接 1. 前言2. 获取script标签下的视频加密数据3. 第一步:获取解密后的视频下载链接4. 第二步:模拟生成加密的webid值 1. 前言 就小编了解,某瓜视频这个网站对应视频下载链接加密处理至少经过三个版本。之前在CSDN发布了一篇关于…

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型

船舶机械设备5G智能工厂物联数字孪生平台,推进制造业数字化转型。在当今数字化浪潮推动下,船舶制造业正经历着前所未有的变革。为了应对市场的快速变化,提升生产效率,降低成本,并增强国际竞争力,船舶机械设…

Docker 详解及详细配置讲解

Docker 简介 2008 年LXC(LinuX Contiainer)发布,但是没有行业标准,兼容性非常差 docker2013年首次发布,由Docker, Inc开发 什么是 Docker Docker是管理容器的引擎,为应用打包、部署平台,而非单纯的虚拟化技术&#xf…

【springboot】使用swagger生成接口文档

1. 添加依赖 <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><version>2.6.0</version></dependency> 这里我老是添加不上这个依赖&#xff0c;搜索了下发现阿里…

《2024网络安全十大创新方向》

网络安全是创新驱动型产业&#xff0c;技术创新可以有效应对新的网络安全挑战&#xff1b;或是通过技术创新降低人力成本投入&#xff0c;提升企业运营效率。为推动行业技术创新、产品创新与应用创新&#xff0c;数说安全发布《2024年中国网络安全十大创新方向》&#xff0c;涵…

K8s高可用集群部署----超详细(Detailed Deployment of k8s High Availability Cluster)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

sM4040B科学级显微制冷相机特性

sM4040B科学级显微制冷相机特性 sM4040B搭载了 GSENSE4040BSI 3.2 英寸图像传感器&#xff0c;针对传感器固有的热噪声&#xff0c;专门设计了高效制冷模块&#xff0c;使得相机传感器的工作温度比环境温度低达 35-40 度。针对制冷相机常见的低温结雾现象设计了防结雾机制&…

【图灵完备 Turing Complete】游戏经验攻略分享 Part.3 存储器

这一章&#xff0c;前面不难&#xff0c;后面难。 教你别这么连线连出问题。 看结果说话&#xff0c;延迟两个时刻输出。 先不管要求&#xff0c;输出一个稳定的信号&#xff0c;看看之前给了延迟元件正好延迟一刻&#xff0c;然后作为输入和那个稳定的信号做一个逻辑运算改变…

逻辑导论前传

人类的逻辑运算建立在已有的数据库上&#xff0c; 我们无法处理逻辑问题&#xff0c;是因为宇宙的意志不允许我们得出正确答案&#xff0c;每个人都是一个答案&#xff0c;当你认知到了所有人&#xff0c;你也就得到了所有正确答案&#xff0c;这时候宇宙智慧采取正确答案的逻辑…

绿色无广告,纯净体验——2024年优质免费视频剪辑软件

如果你习惯一个视频网站的时候&#xff0c;工作上遇到问题也会第一时间在视频网站上进行搜索解决方案。就比如我同事就很喜欢在短视频网站上搜索Office软件的一些操作步骤。如果你也想分享这类视频&#xff0c;那么我们一起探讨下有哪些适合抖音剪辑的视频剪辑工具。 1.福昕视…

Linux下安装Docker-ce ,配置nginx容器

引言 直接在windows系统中使用nginx服务&#xff0c;面临着如下问题&#xff1a; 1.性能瓶颈 高并发处理能力有限&#xff0c;资源利用率不高。 2.兼容性和稳定性问题 Nginx最初是为Linux等Unix-like系统设计的&#xff0c;虽然在Windows上也有版本&#xff0c;但可能不是…

【Redis】Redis 持久化机制详解:RDB、AOF 和混合持久化的工作原理及优劣分析

目录 持久化RDB触发机制流程说明RDB ⽂件的处理RDB 的优缺点 AOF使⽤ AOF命令写⼊⽂件同步重写机制启动时数据恢复 混合持久化小结 持久化 回顾 MySQL 的事务的特性&#xff1a; 原子性一致性持久性&#xff08;持久化&#xff09;隔离性 持久化&#xff1a;把数据存储在硬盘上…

RabbitMQ 02 操作,配置信息,用户权限

01.介绍启动&#xff0c;关闭 02.环境 2.1 MQ是用Erlang语言写的 2.2 一个RabbitMQ 节点 一个 Erlang节点一个Erlang 程序 &#xff08;RabbitMQ程序&#xff09; 2.3 Erlang节点&#xff1a; 这个是Erlang节点集群状态下&#xff1a; 2.4 启动节点 2.5 查看日志信息 …

leetcode97. 交错字符串,二维动态规划

leetcode97. 交错字符串 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 … sn t t1 t2 … tm |n…

Jedis 操作 Redis 数据结构全攻略

Jedis 操作 Redis 数据结构全攻略 一 . 认识 RESP二 . 前置操作2.1 创建项目2.2 关于开放 Redis 端口的问题2.2.1 端口转发?2.2.2 端口配置 2.3 连接到 Redis 服务器 三 . 通用命令3.1 set 和 get3.2 exists 和 del3.3 keys3.4 expire、ttl、type 三 . string 相关命令3.1 mse…

一文说清什么是数据仓库

01 数据仓库的概念 数据仓库的概念可以追溯到20世纪80年代&#xff0c;当时IBM的研究人员开发出了“商业数据仓库”。本质上&#xff0c;数据仓库试图提供一种从操作型系统到决策支持环境的数据流架构模型。 目前对数据仓库&#xff08;Data Warehouse&#xff09;的标准定义&a…

高级组件封装技巧--tree的封装

el-tree是一个经常用到的组件&#xff0c;但是它不支持v-model,使用起来很麻烦&#xff0c;这篇教程封装了el-tree,使得它使用起来很简单&#xff0c;并且支持搜索&#xff0c;支持叶子节点横向排列&#xff0c;这样就算数据多了&#xff0c;也会显的很紧凑,同时它支持提交half…

springboot+mybatis+vue2分页功能开发

前端框架代码 <div class"block"><span class"demonstration">完整功能</span><el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"currentPage4":page-s…

MLM:多模态大型语言模型的简介、微调方法、发展历史及其代表性模型、案例应用之详细攻略

MLM&#xff1a;多模态大型语言模型的简介、微调方法、发展历史及其代表性模型、案例应用之详细攻略 目录 相关文章 AI之MLM&#xff1a;《MM-LLMs: Recent Advances in MultiModal Large Language Models多模态大语言模型的最新进展》翻译与解读 MLM之CLIP&#xff1a;CLIP…