深度学习基础—循环神经网络(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.rhkb.cn/news/461037.html

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

相关文章

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介&#xff1a;自由贸易试验区&#xff08;Free Trade Zone&#xff0c;简称FTZ&#xff09;是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物&#xff0c;被认为在关境以外&#xff0c;免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件&#xff0c;手动创建即可。 运行 常规功能 debug模式 修改内容自动更新&#xff0c;否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接&#xff1a;https://pan.quark.cn/s/febb28f57c01 提取码&#xff1a;fUCQ 链接失效&#xff08;可能会被官方和谐&#xff09;可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中&#xff0c;在wir…

野火鲁班猫4 (RK3588)系统配置

烧写系统 参考文档 &#xff1a; https://doc.embedfire.com/linux/rk3588/quick_start/zh/latest/quick_start/apt/apt.html 先装第一个软件&#xff0c;然后打开第二个软件。点固件&#xff0c;选择Ubuntu最新的固件&#xff0c;这边目前是20240911这个。 我这边直接烧写到…

Servlet 3.0 新特性全解

文章目录 Servlet3.0新特性全解Servlet 3.0 新增特性Servlet3.0的注解Servlet3.0的Web模块支持servlet3.0提供的异步处理提供异步原因实现异步原理配置servlet类成为异步的servlet类具体实现异步监听器改进的ServletAPI(上传文件) Servlet3.0新特性全解 tomcat 7以上的版本都支…

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章&#xff0c;非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会&#xff0c;作为一个经常参加线下探会的博主&#xff0c;每一次体验都有所不同&#xff0c;每一次新技术的突破都让人感到无比兴奋。同时&#xff0c;作为数…

【论文复现】短期电力负荷

作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 论文复现 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案&#xff1a;复现…

Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件

视频链接&#xff1a;16.19 字符流复制文件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p19 1.FileReader类&#xff08;文件字符输出流&#xff09;使用 pac…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐&#xff1a; 随着 AI 技术的不断发展&#xff0c;视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中&#xff0c;图像与文字的交互需求愈发旺盛&#xff0c;很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Python小游戏14——雷霆战机

首先&#xff0c;你需要确保安装了Pygame库。如果你还没有安装&#xff0c;可以使用pip来安装&#xff1a; bash pip install pygame 代码如下&#xff1a; python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛&#xff0c;简称蓝桥杯&#xff0c…

Python3 No module named ‘pymysql‘

在使用python3链接数据库时&#xff0c;总是提示 No module named pymysql 错误&#xff0c;执行pip3 install pymysql后&#xff0c;提示安装成功&#xff0c;但是执行py文件还是提示此错误。 使用python2 执行时&#xff0c;链接数据库正确&#xff0c;百思不得其解 先使用…

SpringBoot调用SOAP接口步骤详解。

1、引入依赖 <dependency><groupId>org.springframework.ws</groupId><artifactId>spring-ws-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</ar…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

107. 阴影范围.shadow.camera

上篇文章2.平行光阴影计算讲解过&#xff0c;通过光源的阴影相机属性.shadow.camera,来控制阴影的渲染范围&#xff0c;本节课继续.shadow.camera的讲解。 平行光阴影相机属性.shadow.camera回顾 平行光DirectionalLight的.shadow属性是平行光阴影对象DirectionalLightShadow…

SpringBoot3+SpringSecurity6基于若依系统整合自定义登录流程

SpringBoot3SpringSecurity6基于若依系统整合自定义登录流程 问题背景 在做项目时遇到了要对接统一认证的需求&#xff0c;但是由于框架的不兼容性&#xff08;我们项目是springboot3&#xff0c;jdk17&#xff0c;springsecurity6.1.5&#xff09;等因素&#xff0c;不得不使…

如何解决品牌商和经销商对接的难题

本文分享知名啤酒商大品牌公司如何和经销商的数据进行对接 某啤酒商业务场景&#xff1a;品牌商例如某啤酒商需要推广自己的订货商城助力全国的各大经销商提高营销竞争力 如何解决核心问题之一&#xff1a;商城打通ERP&#xff1f; 根据调研&#xff0c;经销商ERP系统分布情况&…

书生-第四期闯关:完成SSH连接与端口映射并运行hello_world.py

端口映射完成后&#xff0c;访问127.0.0.1&#xff1a;7860成功展示如下界面&#xff1a; 书生浦语大模型实战营 项目地址&#xff1a;https://github.com/InternLM/Tutorial/