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

循环神经网络(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.mfbz.cn/a/872170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenSCAD 基础教程

OpenSCAD 基础教程 文章目录 OpenSCAD 基础教程1. 引言2. 安装与设置3. OpenSCAD 基本概念与语法3.1 基础形状3.2 变换操作3.4 布尔运算3.4 控制流3.5 特殊功能 4. 实践案例:创建一个简单的机械部件5. 高级技巧6. 导出与3D打印7. 常见问题与解决方案8. 结语 1. 引言…

虚拟机的安装-详细教程

目录 新建虚拟机 选择典型 安装操作系统 选择CentOS7 64位版本 虚拟机存放位置 磁盘容量 完成 编辑虚拟机 修改内存大小 设置处理器个数 选择镜像 开启虚拟机 进入界面,回车 选择语言 安装类型 磁盘分区 开启网络 设置密码和用户 重启 接受许可…

python进阶篇-day07-进程与线程

day06进程与线程 一. 进程 每个软件都可以看作是一个进程(数据隔离) 软件内的多个任务可以看作是多个线程(数据共享) 单核CPU: 宏观并行, 微观并发 真正的并行必须有多核CPU 多任务介绍 概述 多任务指的是, 多个任务"同时"执行 目的 节约资源, 充分利用CPU资源, …

unreal engine 5.4.4 runtime 使用PCG

Unreal PCG Runtime runtime环境下控制PCG PCG Graph 这里简单的在landscape上Spawn Static Mesh 和 Spawn Actor GraphSetting 自定义的参数,方便修改 场景 这里新建了一个蓝图Actor PCG_Ctrl, 用来runtime的时候控制PCG生成 Construct 获取场景中的PCGVolum…

开源还是封闭?人工智能的两难选择

这篇文章于 2024 年 7 月 29 日首次出现在 The New Stack 上。人工智能正处于软件行业的完美风暴中,现在马克扎克伯格 (Mark Zuckerberg) 正在呼吁开源 AI。 关于如何控制 AI 的三个强大观点正在发生碰撞: 1 . 所有 AI 都应该是开…

易保全出席人工智能应用场景高峰论坛,发布AI-数据资产管理平台2.0应用成果

2024年9月5日,由上海合作组织国家多功能经贸平台、重庆市科技发展基金会指导,重庆市渝中区商务委员会等相关部门主办、华智未来(重庆)科技有限公司承办,重庆民营经济国际合作商会协办的“智驭未来创想无界人工智能应用场景高峰论坛暨成果发布…

区块链-P2P(八)

前言 P2P网络(Peer-to-Peer Network)是一种点对点的网络结构,它没有中心化的服务器或者管理者,所有节点都是平等的。在P2P网络中,每个节点都可以既是客户端也是服务端,这种网络结构的优点是去中心化、可扩展…

linux(ubuntu)安装QT-ros插件

Linux下的qt安装ros插件 查看qt版本和对应的ros插件版本查看qt版本查看 qt creator 版本 qt creator进行更新升级下载版本对应的ros_qtc_plugin 插件插件安装安装成功 查看qt版本和对应的ros插件版本 想要qt与ros联合开发,我门需要在qt creator中添加ros的插件&…

Docker Hub 仓库国内无法拉取镜像,如何应对?

Docker Hub 仓库国内无法拉取镜像,如何应对? 描述:早上起来发现交流群中有童鞋在说无法在Docker Hub中正常拉取镜像,然后在公司的服务器上拉取最新的nginx:latest镜像发现确实无法拉取。 注册一个阿里云账户 由于前面作者发布过两篇同步国外…

Android平台RTSP|RTMP播放器(SmartPlayer)集成必读

技术背景 好多开发者拿到大牛直播SDK的Android平台RTSP、RTMP播放模块,基本上不看说明,测试后,就直接集成到自己系统了。不得不说,我们的模块虽然接口很多,功能支持全面,但是上层的demo设计逻辑确实简单&a…

安装Android Studio及第一个Android工程可能遇到的问题,gradle下载过慢、sync失败?

Android Studio版本众多,电脑操作系统、电脑型号、电脑硬件也是多种多样,幸运的半个小时内可以完成安装,碰到不兼容的电脑,一天甚至更长时间都无法安装成功。 Android安装及第一个Android工程分为4个步骤,为什么放到一…

echarts进度

echarts图表集 const data[{ value: 10.09,name:制梁进度, color: #86C58C,state: }, { value: 66.00,name:架梁进, color: #C6A381 ,state:正常}, { value: 33.07,name:下部进度, color: #669BDA,state:正常 }, ];// const textStyle { "color": "#CED6C8&…

【whisper】使用whisper实现语音转文字

whisper需要ffmpeg支持 官网下载ffmpeg https://www.gyan.dev/ffmpeg/builds/下载完毕后解压放到合适的位置 添加环境变量 在cmd中输入以下 ffmpeg -version出现下面结果代表成功 安装whisper pip install openai-whisper在vscode中运行 测试代码 import whisperif __n…

SAP 生产订单工序删除状态撤回简介

SAP 生产订单工序删除状态撤回简介 一、业务场景二、处理办法三、系统控制一、业务场景 生产订单正常没有按工序分配物料,系统会自动会把物料分配到第一道工序中 生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配…

软件测试基础面试题11问(带答案)

1、编写测试用例有哪些? 答:等价类、边界值、错误推测法、场景法,我个人常用的方法就是这些 2、Beta测试与Alpha测试的区别? 答:两者的主要区别是测试的场所不同。Alpha测试是指把用户请到开发方的场所来测试,beta测试…

Tomato靶场渗透测试

1.扫描靶机地址 可以使用nmap进行扫描 由于我这已经知道靶机地址 这里就不扫描了 2.打开网站 3.进行目录扫描 dirb http://172.16.1.113 发现有一个antibot_image目录 4.访问这个目录 可以看到有一个info.php 5.查看页面源代码 可以发现可以进行get传参 6.…

C#文件的输入和输出

一个文件是一个存储在磁盘中带有指定名称和目录路径的数据集合.当打开文件进行读写时,它变成一个流.从根本上说,流是通过通信路径传递的字节序列.有两个主要的流:输入流和输出流.输入流用于从文件读取数据,输出流用于向文件写入数据. C#I/O类 System.IO命名空间有各种不同的类…

Unity Xcode方式接入sdk

入口 创建 GameAppController 类 继承 UnityAppController 并且在类的实现之前 需要 加 IMPL_APP_CONTROLLER_SUBCLASS(GameAppController),表明这个是程序的入口。UnityAppController 实现了 UIApplicationDelegate。 可以简单看下 UIApplicationDelegate 的生命周…

拍卖新纪元:Spring Boot赋能在线拍卖解决方案

需求分析 1.1技术可行性:技术背景 在线拍卖系统是在Windows操作系统中进行开发运用的,而且目前PC机的各项性能已经可以胜任普通网站的web服务器。系统开发所使用的技术也都是自身所具有的,也是当下广泛应用的技术之一。 系统的开发环境和配置…

docker实战基础一 (Docker基础命令)

一、docker安装 # step 1: 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Doc…