动手学深度学习(五)循环神经网络RNN

  一、序列模型

1、统计工具

联合概率分布

假设有一个序列 x=[x1,x2,…,xT],我们可以把序列的联合概率分解为多个条件概率的乘积。

②建模

f(x1​,…,xt−1​) 是一个函数,用于提取前 t−1个序列元素的信息。这意味着我们不需要存储每一个之前的序列元素,而是用函数 fff 来总结之前的状态。 

2、自回归模型

自回归模型假设时间序列的当前值可以用其过去的一些值来表示。对于一个时间序列x_t,自回归模型的数学表达式如下:

在自回归模型中,当前时刻的值 xt是过去几个时刻值的加权和,加上一个随机误差项。这意味着模型假设当前的状态主要受历史状态的线性组合影响,而误差项捕捉了其他未解释的随机波动。

3、马尔可夫模型

序列中的当前状态只依赖于有限数量的过去状态,而不是依赖于所有的历史状态。这个依赖时刻的长度可以用\tau来表示。

一阶马尔科夫模型,是最常见的马尔科夫模型是假设当前状态只依赖于前一个时刻的状态。也就是当前时刻x_t只依赖于x_t-1,与更早的时刻无关。这个假设可以表示为:

4、潜变量模型

二、文本预处理 

1、读取数据集

2、词元化

词元(token)是文本的基本单位,token可以是Word为单位,也可以是字符为单位。

3、词表

①词表

词元的类型是字符串,而模型需要的输入是数字,因此这种类型不方便模型使用。 [构建一个字典,通常也叫做词表(vocabulary), 用来将字符串类型的词元映射到从0开始的数字索引中]。

②语料

我们先将训练集中的所有文档合并在一起,对它们的唯一词元进行统计, 得到的统计结果称之为语料(corpus)。

③词表的构建

先统计整体的语料,再根据每个唯一词元的出现频率,为其分配一个数字索引很少出现的词元通常被移除,这可以降低复杂性。 另外,语料库中不存在或已删除的任何词元都将映射到一个特定的未知词元“<unk>”。 我们可以选择增加一个列表,用于保存那些被保留的词元, 例如:填充词元(“<pad>”); 序列开始词元(“<bos>”); 序列结束词元(“<eos>”)。

三、语言模型

齐普夫定律(Zipf's Law) 是一种描述自然语言中词频分布的经验法则。它表明,在一个足够大的语料库中,单词的出现频率与其频率排名呈反比关系

 1、语言模型的目的

x1,...,x_t是文本序列中的词元。

 2、用计数来建模

①存在的问题

  • 序列很长:给定的序列很长时,n(序列)可能会很小甚至于是0,表明这个序列并不存在于文本库中,此时会出现问题。
  • 文本量不够大:文本量不够大,n都很小。

②问题解决思路

可以通过引入平滑方法(如拉普拉斯平滑)来避免词频为 0 的问题。即使某个词没有在训练集中出现,也为它赋予一个非零的最小概率

③仍然存在的问题

首先,需要存储所有的计数。

 其次,这完全忽略了单词的意思。例如,“猫”(cat)和“猫科动物”(feline)可能出现在相关的上下文中, 但是想根据上下文调整这类模型其实是相当困难的。

最后,长单词序列大部分是没出现过的。

3、N元语法 

①一元语法

只考虑每个词的单独概率,完全忽略上下文。

例子:P(人工智能 是 未来 的 发展 方向)P(人工智能) * P(是) * P(未来) * P(的) * P(发展) * P(方向)

②二元语法

考虑当前词与前一个词之间的关系。

例子:P(人工智能 是 未来 的 发展 方向)P(人工智能) * P(是|人工智能) * P(未来|是) * P(的|未来) * P(发展|的) * P(方向|发展)

③三元语法

考虑当前词与前两个词的关系。

例子:P(人工智能 是 未来 的 发展 方向)P(人工智能) * P(是|人工智能) * P(未来|人工智能 是) * ...

4、 随机抽样小批量子序列

①解决的问题

  • 计算资源问题:整个序列长度可能很长,直接处理会占用大量的内存和计算资源。
  • 梯度消失或爆炸:对于 RNN 等模型,序列过长时,反向传播过程中的梯度可能会逐渐变小(梯度消失)或变大(梯度爆炸),导致训练过程中的数值不稳定。
  • 训练效率低:使用完整的序列进行训练,可能导致每个批次的训练速度变慢。

②优点

  • 提高训练效率:小批量采样子序列可以更快速地迭代模型训练,每个批次只处理一部分数据,减少了计算量。
  • 防止模型过拟合:随机采样使模型每次看到不同的子序列,增强了训练数据的多样性,有助于防止过拟合。
  • 避免序列过长导致的问题:通过对序列进行分段,降低了 RNN 等模型的梯度消失或梯度爆炸的可能性。
  • 让模型看到更多的上下文组合:每次从不同的位置采样,可以让模型在训练过程中学习到更多不同的上下文关系。

③步骤

  • 首先,设定一个超参数 num_steps,表示每个子序列的长度。这个超参数决定了你想要采样的子序列的大小。
  • 然后,通过随机选择序列中的起始位置来获取不同的子序列。每次的随机性体现在每个小批量子序列的第一个词元的起始位置不同。
  • 最后,将采样到的子序列打乱顺序,划分成若干个批次,以供训练时使用。通过这样随机采样和打乱顺序的方式,确保模型不会只见到固定的序列,而是能看到更多的组合,提升模型的泛化能力。

5、顺序分区小批量子序列

不打乱子序列,而是保留数据的原始顺序,逐步从序列中按照顺序提取小批量的子序列。这样做的优点确实是可以让模型在训练时观察到更长的上下文序列,并保持数据的顺序性。

四、循环神经网络RNN

1、最简单的RNN的结构

①输入层

图中的 x 表示输入序列,像 "你好,世界!" 这样的文本序列,每个时间步输入一个单词的向量表示。

②隐藏层

h 表示隐藏状态,是 RNN 中的核心部分,用来存储历史信息。隐藏状态在每个时间步更新,表示当前时间步 t 时对之前所有输入的记忆

③输出层

在每个时间步,RNN 都会基于隐藏状态h_t生成一个输出o_t,并通过某种激活函数来得到最终输出:

 2、评估语言模型好坏

①使用交叉熵评估

②困惑度

3、梯度剪裁

①梯度剪裁针对的问题

迭代中计算这T个时间步上的梯度,在反向传播过程中产生长度为 O(T)的矩阵乘法链,导致数值不稳定。

  • T是当前处理序列的长度,每个序列元素对应上一个时间步。
  • 反向传播的过程中,由于每个时间步都依赖于它前面的一个时间步,因此从最后一个时间步传递到第一个时间步会产生O(T)大小的矩阵乘法链。

②梯度剪裁优点

有效防止梯度爆炸,但与与梯度消失问题无关。

长时间步或深度网络会使梯度在反向传播过程中逐渐累积。如果梯度过大,模型的权重更新会很剧烈,导致训练不稳定或失败。梯度剪裁可以有效限制梯度的增长,防止模型失控。

③梯度剪裁实现

梯度剪裁的基本思想是设置一个阈值\theta当梯度的范数(即梯度向量的长度)超过该阈值时,将梯度缩放到不超过这个阈值的范围。

4、更多RNN的应用

  • One-to-One(单输入单输出):模型从单个输入(如句子或单词)生成单个输出。最常见的场景是文本生成,比如给定一句话生成相关的句子。
  • One-to-Many(单输入多输出):从一个输入生成多个输出。用于生成类任务,例如给定一个主题生成多个相关句子。
  • Many-to-One(多输入单输出):多个时间步的输入(如一句话中的多个单词)映射到一个输出。适用于文本分类任务。例如,给定一段文字,模型输出一个分类结果(如情感分类:积极、消极、中立)。
  • Many-to-Many(多输入多输出):多个时间步的输入对应多个时间步的输出。非常适用于机器翻译问答系统等任务。例如,给定一句话(源语言),生成相应的翻译(目标语言),或者在给定问题时生成答案。
  • Many-to-Many(不同长度)(多输入多输出,输入输出长度不等):不同的是输入序列和输出序列的长度不一致。输入序列长度较短,但输出可能较长,或者相反。这个结构通常用于标签生成(如序列标注任务)。例如,给定一段文本,模型为每个词生成一个标签(如命名实体识别任务:标注人名、地名等)。

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

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

相关文章

关于群里脱敏系统的讨论2024-09-20

群里大家讨论脱敏系统&#xff0c;傅同学&#xff1a;秦老师&#xff0c;银行数据脱敏怎么做的&#xff0c;怎么存储的&#xff1f; 采购了脱敏系统&#xff0c;一般是硬件&#xff08;厂商直接卖的一体机&#xff09;。这个系统很复杂&#xff0c;大概卖50-100万一台。 最核…

Springboot常见问题(bean找不到)

如图错误显示userMapper bean没有找到。 解决方案&#xff1a; mapper包位置有问题&#xff1a;因为SpringBoot默认的包扫描机制会扫描启动类所在的包同级文件和子包下的文件。注解问题&#xff1a; 比如没有加mapper注解 然而无论是UserMapper所在的包位置还是Mapper注解都是…

HelpLook VS GitBook,在线文档管理工具对比

在线文档管理工具在当今时代非常重要。随着数字化时代的到来&#xff0c;人们越来越依赖于电子文档来存储、共享和管理信息。无论是与团队合作还是与客户分享&#xff0c;人们都可以轻松地共享文档链接或通过设置权限来控制访问。在线文档管理工具的出现大大提高了工作效率和协…

echarts 散点图tooltip显示一个点对应多个y值

tooltip&#xff1a;显示 tooltip: {trigger: "axis",extraCssText: max-width:50px; white-space:pre-wrap,formatter: function (params) {let arr []params.forEach(v > {arr.push(v.data[1])});return params[0].data[0]":<br>["arr.toStr…

leetcode刷题3

文章目录 前言回文数1️⃣ 转成字符串2️⃣ 求出倒序数再比对 正则表达式匹配[hard]1️⃣ 动态规划 盛最多水的容器1️⃣ 遍历分类2️⃣ 双指针贪心 最长公共前缀1️⃣ 遍历&#xff08;zip解包&#xff09; 三数之和1️⃣ 双指针递归 最接近的三数之和1️⃣ 迭代一次双指针 电…

PCL addLine可视化K近邻

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 本文将介绍如何使用PCL库中…

Unreal Engine 5 C++: 编辑器工具编写入门(中文解释)

目录 准备工作 1.创建插件 2.修改插件设置 快速资产操作&#xff08;quick asset action) 自定义编辑器功能 0.创建编辑器button&#xff0c;测试debug message功能 大致流程 详细步骤 1.ctrlF5 launch editor 2.创建新的cpp class&#xff0c;derived from AssetAction…

基于PHP的CRM管理系统源码/客户关系管理CRM系统源码/php源码/附安装教程

源码简介&#xff1a; 这是一款基于PHP开发的CRM管理系统源码&#xff0c;全称客户关系管理CRM系统源码&#xff0c;它是由php源码开发的&#xff0c;还附带了一整套详细的安装教程哦&#xff01; 功能亮点&#xff1a; 1、公海管理神器&#xff1a;不仅能搞定公海类型&…

【自然语言处理】补充:布尔模型

【自然语言处理】补充:布尔模型 布尔检索是指针对查询的检索,布尔查询是指利用AND,OR或者NOT操作符将词项连接起来的查询,例如:信息AND检索、信息OR检索、信息AND检索AND NOT教材 Google的高级搜索/布尔查询 Google的AND—百度 “ 手机 报价 ”Google的NOT—百度 “ 手机…

关于MATLAB计算3维图的向量夹角总是不正确的问题记录

文章目录 问题描述解决方法完整代码 问题描述 因为最近在做无人机的一个项目&#xff0c;所以需要画出无人机的轨迹&#xff0c;然后再提取特征值&#xff0c;我这里在计算夹角的时候发现为什么在视觉上明明看的是钝角但是实际计算出来却是锐角的角度。 如下图所示&#xff0c…

Spring面试题合集

Spring 1.谈谈你对Spring的理解 首先Spring是一个轻量级的开源框架&#xff0c;为Java程序的开发提供了基础架构支持&#xff0c;简化了应用开发&#xff0c;让开发者专注于开发逻辑&#xff1b; 同时Spring是一个容器&#xff0c;它通过管理Bean的生命周期和依赖注入&#…

无处不在的人工智能

文章目录 引言科幻电影中的AI《她》&#xff1a;人工智能的爱情《我&#xff0c;机器人》&#xff1a;AI的觉醒 人工智能的发展现状专用人工智能的突破通用人工智能的起步 结语 引言 在21世纪的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经成为推动社会发展的关键…

英集芯IP5902:集成电压可调异步升压转换充电管理功能的8位MCU芯片

英集芯IP5902是一款集成了9V异步升压转换、锂电池充电管理及负端NMOS管的8-bit MCU芯片&#xff0c;外壳采用了SOP16封装形式&#xff0c;高集成度和丰富的功能使其在应用时只需很少的外围器件&#xff0c;就能有效减小整体方案的尺寸&#xff0c;降低BOM成本&#xff0c;为小型…

dockercompose指定配置文件

dockercompose指定配置文件 文件名字必须是以下的集中形式&#xff1a; docker-compose.yaml docker-compose.yml compose.yaml compose.yml 其他名字就失败的。 一般白眉大叔都是用 compose.yaml 这个格式&#xff0c; 用习惯了。 但是我们必须知道它有几种格式都是可以…

聚焦于 Web 性能指标 TTI

在优化网站性能的过程中&#xff0c;我们经常遇到一个“为指标而优化”的困境。指标并不能真正反映用户体验&#xff0c;而应该最真实地反映用户行为。 在本节中&#xff0c;我们将研究 TTI&#xff08;Time to Interactive&#xff09;。在深入探讨这个话题之前&#xff0c;我…

信奥初赛解析:1-3-计算机软件系统

知识要点 软件系统是计算机的灵魂。没有安装软件的计算机称为“裸机”&#xff0c;无法完成任何工作硬件为软件提供运行平台。软件和硬件相互关联,两者之间可以相互转化&#xff0c;互为补充 计算机软件系统按其功能可分为系统软件和应用软件两大类 一、系统软件 系统软件是指…

HTTP中的event-stream,eventsource,SSE,chatgpt,stream request,golang

我们都知道chatgpt是生成式的&#xff0c;因此它返回给客户端的消息也是一段一段的&#xff0c;所以普通的HTTP协议无法满足&#xff0c;当然websocket是能满足的&#xff0c;但是这个是双向的通信&#xff0c;其实 SSE&#xff08;Server-Sent Events&#xff09; 正好满足这个…

【操作教程】视频监控系统EasyCVR视频汇聚管理平台如何添加用户和角色?

视频监控平台/视频监控系统EasyCVR视频汇聚管理平台以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力&#xff0c;为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作&#xff0c;用户可以轻松地进行远程视频监控、存储和查看&#xf…

永磁同步电机谐波抑制算法(8)——基于神经网络的傻瓜式(无需知道谐波频率)谐波抑制

1.简介 前面的内容已经介绍了很多谐波抑制的方法&#xff1a;多同步、PIR、陷波器等等。也介绍了比较多的谐波来源&#xff1a;死区&#xff08;5、7、11、13等次相电流谐波&#xff09;、绕组不对称&#xff08;基波不等幅值、3次相电流谐波&#xff09;等等。 上述的方法都…

vue3集成google第三方登陆

网上资源很多&#xff0c;但乱七八糟&#xff0c;踩坑几小时后&#xff0c;发现下面的方式没问题。 npm install vue3-google-login 插件文档&#xff1a;vue3-google-登录 (devbaji.github.io) 修改main.js import ./assets/main.css import { createApp } from vue impor…