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

引言

        从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。

1.符号定义


(1)符号定义

        假设建立一个能够自动识别句中人名位置的序列模型,它的输入序列是这样的:“Harry Potter and Herminoe Granger invented a new spell.”,(这些人名都是出自于J.K.Rowling笔下的系列小说Harry Potter)。输出y,使得输入的每个单词都对应一个输出值,同时这个能够表明输入的单词是否是人名的一部分。

        注:这是一个命名实体识别问题,常用于搜索引擎,比如说索引过去24小时内所有新闻报道提及的人名,用这种方式就能够恰当地进行索引。命名实体识别系统可以用来查找不同类型的文本中的人名、公司名、时间、地点、国家名和货币名等等。

        符号定义如下:

        注意:在这个例子中Tx=Ty,但是在其他案例中不一定相等。

(2)序列表示

        序列表示主要是对每个单词进行编码,从而得到序列的编码,我们采用one-hot编码方式。

        Step1:定义词典;

        Step2:索引每个单词在词典的位置;

        Step3:编码单词,在编码向量中,向量中下标等于单词在词典中的位置的元素定义为1,其他下标的元素定义为0;

        Step4:循环Step2-Step3,得到序列中所有单词的编码向量。

        举个例子,如下为输入序列,假设词典有10000个单词,如下所示:

        而Harry在词典中4075下标,因此该单词编码表示4075下标的位置为1,其他为0,得到编码向量,也称为独热向量。序列中其他位置的单词依次得到的内容如上。

        注意:如果遇到了一个不在词表中的单词,那么就是创建一个新的标记,也就是一个叫做Unknow Word的伪造单词,用<UNK>作为标记,来表示不在词表中的单词,我们之后会讨论更多有关这个的内容。

2.循环神经网络模型


(1)标准神经网络的缺点

        可以用标准神经网络学习序列模型,但是效果并不好,原因如下:

        一、输入和输出数据在不同例子中长度不一定相同,不是所有的例子都有着同样输入长度或输出长度。即使每个句子都有最大长度,也许可以填充(padding)使每个输入语句都达到最大长度,但并不是一个好的表达方式。

        二、网络结构并不共享从文本的不同位置上学到的特征。比如,神经网络已经学习到了在位置1出现的Harry可能是人名的一部分,那么如果Harry出现在其他位置,我们也希望能够自动识别其为人名的一部分的话。这就类似卷积网络,垂直卷积可以在图片中不同位置学习到相同的垂直特征,但普通的网络就不行。

        三、假设词典是10000词,则编码向量是10,000维的one-hot向量,因此这会是十分庞大的输入层。如果总的输入大小是最大单词数乘以10,000,那么第一层的权重矩阵就会有着巨量的参数。但循环神经网络就没有上述问题。

(2)循环神经网络

        上图即为一个循环神经网络的结构图,假设我们进行人名识别任务,即识别句子中的词是否是人名的一部分。任务流程为在第一个时间步,我们把第一个词x1输入到第一层,第一层预测出y1;在第二个时间步,我们把第二个词x2输入到第二层,同时第二层接受来自时间步1的信息,即第一层输出的激活值,结合这两部分,第二层预测出y2;持续这种模式输入,到最后一个时间步,输入x<Tx>和上一个时间步的激活值,预测出y<Ty>。所以在每一个时间步中,循环神经网络传递一个激活值到下一个时间步中用于计算,这就是RNN的核心思想。至于第一层接受的激活值a0,通常需要在0时刻构造一个。

        注意:观察上图两个句子,在识别Teddy这个词的时候,Teddy Roosevelt是泰迪罗斯福,而Teddy bears是泰迪熊,根据RNN的结构,Teddy的识别过程只能接受来自前一个时间步的激活值,也就是网络只能学习到Teddy及以前的句子信息,而以后的句子内容无法学习,也就难以识别Teddy究竟是不是人名的一部分。要解决这个问题,我们需要用到双向循环神经网络BRNN,这里先不阐述。

        上图所示即为RNN的前向传播流程图,在第一层中,接受a0激活值和第一个词向量x1,公式如下:

        其中g1()=tanh(),g2()=softmax(),权重矩阵有下标aa、ax和ya,第一位表示计算数据类型,比如a表示计算数据类型为a类型,即激活值,y表示计算数据类型为y类型,即输出值。第二位表示参与运算的数据类型,比如aa表示计算激活值a时权重矩阵需要和上一时间步的激活值a进行运算,ax表示计算激活值a时权重矩阵需要和词向量x进行运算。

        更一般的有:

        为了更加简洁的描述问题和公式,我们做如下公式记号:

        上面两个式子中,下式[]和权重矩阵部分的乘积表示为上式。

        把两个权重矩阵合并为一个表示,如上式所示。

        上面这两个式子,将上式用下式代替。有了上述符号简化,我们可以改写前向传播的公式:

        同理,下式也可以改写:

3.通过时间的反向传播


        当前向传播的流程结束后,需要计算损失,然后进行反向传播,由于RNN的反向传播和时间步有关(每一层均是一个时间步的计算流程),因此反向传播更像通过时光机穿越到过去进行计算,于是RNN的反向传播又叫通过时间反向传播。下面让我来看看具体的流程:

        首先定义模型的损失函数,模型的损失函数为交叉熵损失函数:

        需要把每一时间步的损失都计算出来,最后加在一起得到总损失L。而反向传播的流程如下:

        红色箭头所示的方向即为反向传播的方向,通过下图导数的相关参数,按照反向传播的方向传递参数信息,即可进行梯度的计算。

        如图上所示,列了一些梯度计算的有关公式,这是一个时间步(一层)的梯度计算。当然目前所讨论的RNN基于输入序列的长度和输出序列的长度一致,下面介绍一些其他RNN的结构。

4.不同类型的循环神经网络


        目前常见的RNN结构有4种:一对一、一对多、多对一、多对多,除去注意力机制,多对多结构也分为两种(编号4和编号5)。下面我来一一举例说明这些结构的应用:

        一对一(编号1):这个并不重要,给定输入x,输出y,如果去掉初始激活值a0,这就是标准的神经网络。

        一对多(编号2):音乐生成,比如给定想要生成的音乐风格(可能是一个整数),然后每一层依次输出一些值并把值输入给下层进行合并,最终输出一个曲子,可以理解为每一层生成一个音符,但是音符又不能独立,下一层输出的音符要依靠上一层的音符从而确保曲子的连贯性。

        多对一(编号3):类似评价类或者情感分类问题,给定一段文本,要求输出一个评价或者语句的情感。比如“These is nothing to like in this movie.”(“这部电影没什么还看的。”),所以输入x就是一个序列,而输出y可能是从1到5的一个数字(代表电影是1星,2星,3星,4星还是5星),或者是0或1(这代表正面评价和负面评价)。

        多对多(编号4):这个例子就是上文提到的人名识别任务案例,对于输入序列的每一个词都需要输出是否是人名的一部分。

        多对多(编号5):机器翻译,输入序列和输出序列长度不一致。比如输入英语,翻译成汉语,那么每个词依次输入到网络中,输入部分构成编码器(x输入的结构)。而网络读取所有的词后,解码器(y输出的结构)依次输出要求翻译的结果。

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

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

相关文章

Web测试和APP测试的区别

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近听到有些朋友说&#xff0c;移动端要比web端稍微难一些&#xff0c;涉及到的细节笔记要多&#xff0c;有转去做web测试的想法&#xff0c;看看在具体测试的时…

Linux TCP CC状态机

万字详文&#xff1a;TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map 拥塞算法历史 1974年&#xff0c;3次握手被提出&#xff1b;1978年&#xff0c;TCP和IP拆分成TCP/IP&…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召&#xff0c;视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽&#xff0c;视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

深度数据修复软件哪个好?盘点2024年好用的4个数据恢复工具。

深度数据修复软件可以帮助用户深入存储设备&#xff0c;找回丢失的数据。它们可以有效解决很多场景下的数据丢失问题&#xff0c;如果大家平时会有数据丢失的情况&#xff0c;可以用这几个工具去尝试一些自己进行数据恢复。 1、福昕深度恢复软件 直通车&#xff1a;http://www…

leetcode-73-矩阵置零

题解&#xff1a; 1、初始化变量ls_row与ls_col分别用来存储元素0的所在行与列&#xff1b; 2、获取矩阵的行数M与列数N&#xff1b; 3、遍历矩阵matrix的每一个元素。如果这个元素为0&#xff0c;则将该元素所在行数append到ls_row&#xff0c;所在列append到ls_col。 4、…

树莓派基本设置--2. raspi-config工具介绍

raspi-config是树莓派操作系统Raspberry Pi OS中预装的配置工具&#xff1b;raspi-config提供了一种简单便捷的命令行界面来管理树莓派系统的配置&#xff0c;使用户可以轻松地定制和优化其系统设置。 如果使用的是树莓派桌面系统&#xff0c;可以直接在桌面左上角的应用菜单&…

五、鸿蒙开发-组件状态管理

提示&#xff1a;本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、状态管理入门1.1 State1.2 Prop1.3 Link1.4 Provide和Consume 二、状态管理深入2.1 …

STM32学习笔记-GPIO

参考江科大32单片机学习相关知识 GPIO基本构造 APB2&#xff08;Advanced Peripheral Bus 2&#xff09;是STM32微控制器架构中的一个外设总线&#xff0c;用于连接一些高性能外设&#xff0c;如定时器、USART、ADC和GPIO等。这些外设通常对性能要求较高&#xff0c;需要更快的…

java陕西民俗网源码(springboot)

项目简介 陕西民俗网实现了以下功能&#xff1a; 中国陕西民俗网的主要使用者分为&#xff1a; 管理员增删改查商品信息和商品信息资料&#xff0c;审核商品信息预订订单&#xff0c;查看订单评价和评分&#xff0c;通过留言功能回复用户提问。 &#x1f495;&#x1f495;作…

【python】OpenCV—WaterShed Algorithm

文章目录 1、功能描述2、代码实现3、完整代码4、效果展示5、涉及到的库函数5.1、cv2.pyrMeanShiftFiltering5.2、cv2.morphologyEx5.3、cv2.distanceTransform5.4、cv2.normalize5.5、cv2.watershed 6、更多例子7、参考 1、功能描述 基于分水岭算法对图片进行分割 分水岭分割…

选择最佳SCRM系统的综合指南

内容概要 在如今竞争激烈的市场中&#xff0c;企业不能仅仅依靠传统的客户管理方式&#xff0c;需要借助现代化的SCRM系统来提升效率和服务水平。SCRM系统&#xff0c;就是“社交客户关系管理”系统&#xff0c;旨在通过社交媒体等渠道与客户进行更深层次的互动。在选择合适的…

学习threejs,导入OBJ格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.OBJLoader OBJ模型加…

动态规划 —— 路径问题-下降路径最小和

1. 下降路径最小和 题目链接&#xff1a; 931. 下降路径最小和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-falling-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到…

ubuntu20.04 加固方案-设置限制su命令用户组

一、编辑/etc/pam.d/su配置文件 打开终端。 使用文本编辑器&#xff08;如vim&#xff09;编辑/etc/pam.d/su文件。 vim /etc/pam.d/su 二、添加配置参数 在打开的配置文件的中&#xff0c;添加以下参数&#xff1a; auth required pam_wheel.so 创建 wheel 组 并添加用户 …

ElementUI学习笔记

一、ElementUI概述 官网&#xff1a;https://element.eleme.cn/#/zh-CN &#xff08;一&#xff09;定义 Element&#xff0c;一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。是基于Vue的一个UI框架&#xff0c;该框架基于Vue开发了很多相关组件&#xf…

JS面试八股文(四)

&#x1f60a;JS面试八股文&#xff08;四&#xff09; 31.精灵图和base64的区别是什么&#xff1f;32.svg格式了解多少&#xff1f;33.了解过JWT吗&#xff1f;34.npm的底层环境是什么&#xff1f;35.HTTP协议规定的协议头和请求头有什么&#xff1f;36.说一下浏览器的缓存策略…

Android平台RTSP|RTMP播放器高效率如何回调YUV或RGB数据?

技术背景 我们在做Android平台RTSP、RTMP播放器的时候&#xff0c;经常遇到这样的技术诉求&#xff0c;开发者希望拿到播放器解码后的YUV或RGB数据&#xff0c;投递给视觉算法&#xff0c;做AI分析&#xff0c;本文以ffmpeg和大牛直播SDK的SmartPlayer为例&#xff0c;介绍下相…

深度学习常见面试题及答案(41~45)

关注公众号&#xff1a;『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号或➕v&#xff1a;codebiubiubiu滴滴我 文章目录 41、解释一下神经网络中的激活函数的作用是什么&#xff1f;常见的激活函数有哪些&#xff1f;一、激活函数的作用二、常见的激活…

Ethernet 系列(5)-- 物理层测试::PMA Test::MDI

车载以太网物理层PMA &#xff08;Physical Media Attachment--物理媒质接入层&#xff09;主要评估车载以太网的电气特性&#xff0c;针对PMA测试方面&#xff0c;OPEN联盟于2014年6月发布“ BroadR-Reach Physical Layer Transceiver Specification For Automotive Applicati…

史上最清晰的uniap安卓ios热更新,附带每一步截图,亲测可用

uniap安卓ios热更新 插件市场导入到你的项目里1新建项目如图2关联服务空间项目3然后运行起来&#xff0c;将代码上传到托管中心4 新建一个应用项目5 发版测试 官方文档&#xff0c;我是看了几遍没看懂 自己弄一遍回头来看终于懂了&#xff0c;若果对你有用&#xff0c;点个赞就…