当前位置: 首页 > news >正文

深度学习基础—循环神经网络(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输出的结构)依次输出要求翻译的结果。

相关文章:

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

引言 从本系列博客开始&#xff0c;我们将来一起学习一下NLP领域的相关基础知识&#xff0c;NLP领域重要的模型是RNN&#xff0c;在此之前&#xff0c;先来了解一些符号的含义。 1.符号定义 &#xff08;1&#xff09;符号定义 假设建立一个能够自动识别句中人名位置的序列模型…...

一二三应用开发平台自定义查询设计与实现系列2——查询方案功能实现

查询方案功能实现 上面实现了自定义查询功能框架&#xff0c;从用户角度出发&#xff0c;有些条件组合可以形成特定的查询方案&#xff0c;对应着业务查询场景。诸多查询条件的组合&#xff0c;不能每次都让用户来设置&#xff0c;而是应该保存下来&#xff0c;下次可以直接使…...

Redis 集群 问题

前言 相关系列 《Redis & 目录》《Redis & 集群 & 源码》《Redis & 集群 & 总结》《Redis & 集群 & 问题》 什么是Redis集群&#xff1f;为什么要集群&#xff1f;Redis集群的优/缺点是什么&#xff1f; Redis集群是指将多台Redis实例进行协…...

PyQt入门指南二十九 QListView列表视图组件

在PyQt中&#xff0c;QListView 是一个用于显示项目列表的视图组件。它可以与 QStandardItemModel 或其他模型一起使用&#xff0c;以显示和编辑数据。以下是一个简单的入门指南&#xff0c;介绍如何使用 QListView 组件。 安装 PyQt 首先&#xff0c;确保你已经安装了 PyQt5…...

cisco网络安全技术第4章测试及考试

测试 以下 ACE 将放置在何处&#xff1f; permit icmp any any nd-na 试题 1选择一项&#xff1a; 在连接到另一个路由器并已启用 IPv6 的路由器接口上 使用下一代防火墙而不是状态防火墙的一个好处是什么&#xff1f; 试题 2选择一项&#xff1a; 主动而不是被动防护互…...

vue下载安装

目录 vue工具前置要求&#xff1a;安装node.js并配置好国内镜像源下载安装 vue 工具 系统&#xff1a;Windows 11 前置要求&#xff1a;安装node.js并配置好国内镜像源 参考&#xff1a;本人写的《node.js下载、安装、设置国内镜像源&#xff08;永久&#xff09;&#xff…...

C++ | Leetcode C++题解之第516题最长回文子序列

题目&#xff1a; 题解&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {int n s.length();vector<vector<int>> dp(n, vector<int>(n));for (int i n - 1; i > 0; i--) {dp[i][i] 1;char c1 s[i];for (int j i 1; j…...

Python中的`update`方法详解及示例

Python中的update方法详解及示例 1. update方法简介2. update方法的应用场景3. 代码示例示例代码代码解释运行结果 4. 总结 在Python编程中&#xff0c;update方法是一个非常实用的工具&#xff0c;尤其是在处理集合&#xff08;Set&#xff09;数据类型时。本文将详细介绍upda…...

Docker本地安装Minio对象存储

Docker本地安装Minio对象存储 1. 什么是 MinIO&#xff1f; MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据&#xff0c;比如文件、图片、视频等&#xff0c;而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用&#xff0c;同时…...

vuex、vue-router实现原理

文章目录 Vuex 实现原理1. 状态管理2. 核心概念3. 数据流4. 实现细节 Vue Router 实现原理1. 路由管理2. 核心概念3. 数据流4. 实现细节 总结 Vuex 和 Vue Router 是 Vue.js 生态系统中非常重要的两个库&#xff0c;分别用于状态管理和路由管理。它们各自的实现原理如下&#x…...

我在命令行下剪辑视频

是的&#xff0c;你不需要格式工厂&#xff0c;你也不需要会声会影&#xff0c;更不需要爱剪辑这些莫名其妙的流氓软件&#xff0c;命令行下视频处理&#xff0c;包括剪辑&#xff0c;转码&#xff0c;提取&#xff0c;合成&#xff0c;缩放&#xff0c;字幕&#xff0c;特效等…...

Rust 力扣 - 643. 子数组最大平均数 I

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 我们遍历长度为k的窗口&#xff0c;我们只需要记录窗口内的最大和即可&#xff0c;遍历过程中刷新最大值 结果为窗口长度为k的最大和 除以 k 题解代码 impl Solution {pub fn find_max_average(nums: Vec<…...

流场主动流动控制

对于流场的主动控制而言&#xff0c;其难点主要集中在强化学习的环境搭建过程&#xff0c;如何建立数值仿真与强化学习的信息交互是研究过程中的拦路虎。经过几个星期的研究&#xff0c;已基本实现由pycharm程序数据端向star ccm端的数据传递。其主要过程包括如下过程&#xff…...

BOOST电感选型(参数详细计算)

上一篇文章我们介绍了BUCK电路中电感的计算与选型&#xff0c;与BUCK类似&#xff0c;这篇来介绍下BOOST BOOST电路原理简析 上图是一个异步BOOST电路拓扑图&#xff0c;我们先来简单回忆一下它是如何工作的&#xff1a; 1.Q闭合&#xff0c;Vin为Rload供电&#xff0c;Vin为L…...

EfficientNet-B6模型实现ISIC皮肤镜图像数据集分类

项目源码获取方式见文章末尾&#xff01; 回复暗号&#xff1a;13&#xff0c;免费获取600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于opencv答题卡识别判卷】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【G…...

Elasticsearch分词器基础安装

简介 Elasticsearch (ES) 是一个基于 Lucene 的搜索引擎&#xff0c;分词器是其核心组件之一&#xff0c;负责对文本数据进行分析和处理。 1. 文本分析 分词器将输入的文本拆分成一个个单独的词&#xff08;tokens&#xff09;&#xff0c;以便后续的索引和搜索。例如&#x…...

Django-邮件发送

邮件相关协议&#xff1a; SMTP&#xff08;负责发送&#xff09;&#xff1a; IMAP&#xff08;负责收邮件&#xff09;&#xff1a; POP3&#xff08;负责收邮件&#xff09;: 两者区别&#xff1a; Django发邮件&#xff1a; 邮箱相关配置&#xff1a; settings中&…...

SchooWeb2--基于课堂学习到的知识点2

SchoolWeb2 form表单input控件中各type中value值含义 默认值 text password hidden 提交给服务器的值 select option radio属性的name含义 name值相同表示是同一组单选框中的内容 script的位置 head标签 在head中使用script可以保证在页面加载时进行加载&#xff…...

Android.mk 写法

目录放在odm/bundled_uninstall_back-app/VantronMdm/VantronMdm.apk LOCAL_PATH : $(my-dir) include $(CLEAR_VARS) LOCAL_MODULE : VantronMdm LOCAL_MODULE_CLASS : APPS LOCAL_MODULE_PATH : $(TARGET_OUT_ODM)/bundled_uninstall_back-app LOCAL_SRC_FILES : $(LOCAL_M…...

精通Javascript 函数式array.forEach的8个案例

JavaScript是当今流行语言中对函数式编程支持最好的编程语言。我们继续构建函数式编程的基础&#xff0c;在前文中分解介绍了帮助我们组织思维的四种方法&#xff0c;分别为&#xff1a; array.reduce方法 帮你精通JS&#xff1a;神奇的array.reduce方法的10个案例 array.map方…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程&#xff1a;如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket&#xff08;服务端和客户端都要&#xff09;2. 绑定本地地址和端口&#x…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...