机器学习深度学习——循环神经网络RNN

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er
🌌上期文章:机器学习&&深度学习—语言模型和数据集
📚订阅专栏:机器学习&&深度学习
希望文章对你们有所帮助

循环神经网络RNN

  • 引入
  • 无隐状态的神经网络
  • 有隐状态的循环神经网络
  • 具有循环神经网络的字符级语言模型
  • 困惑度
  • 小结

引入

在之前介绍了n元语法模型,其中单词xt在时间步t的概率仅取决于前n-1个单词。对于时间步t-(n-1)之前的打你,若我们想将其可能产生的影响合并到xt上,需要增加n,模型参数的数量也会指数增长,因为词表V需要存储|V|n个数字,因此我们不如使用隐变量:
P ( x t ∣ x t − 1 , . . . , x 1 ) ≈ P ( x t ∣ h t − 1 ) P(x_t|x_{t-1},...,x_1)≈P(x_t|h_{t-1}) P(xtxt1,...,x1)P(xtht1)
其中h表示隐藏变量,存储到时间步t-1的序列信息。
h t = f ( x t , h t − 1 ) h_t=f(x_t,h_{t-1}) ht=f(xt,ht1)
值得注意的是,隐藏层和隐状态指的是两个截然不同的概念。如上所述,隐藏层是在从输入到输出的路径上(以观测角度来理解)的隐藏的层,而隐状态则是在给定步骤所做的任何事情(以技术角度来定义)的输入,并且这些状态只能通过先前时间步的数据来计算。
RNN是具有隐状态的神经网络

无隐状态的神经网络

对于只有单隐藏层的多层感知机,其隐藏层输出为:
H = φ ( X W x h + b h ) H=φ(XW_{xh}+b_h) H=φ(XWxh+bh)
将隐藏变量H用作输出层的输入,则其输出层为:
O = H W h q + b q O=HW_{hq}+b_q O=HWhq+bq

有隐状态的循环神经网络

有了隐状态后,情况就完全不同了。与多层感知机不同的是, 我们在这里保存了前一个时间步的隐藏变量:
H t − 1 H_{t-1} Ht1
并引入了一个新的权重参数:
W h h W_{hh} Whh
用来描述如何在当前时间步中使用前一个时间步的隐藏变量。
而当前时间步隐藏变量由当前时间步的输入与前一个时间步的隐藏变量一起计算得出:
H t = φ ( X t W x h + H t − 1 W h h + b h ) H_t=φ(X_tW_{xh}+H_{t-1}W_{hh}+b_h) Ht=φ(XtWxh+Ht1Whh+bh)
这些变量捕获并保留了序列直到其当前时间步的历史信息,就如当前时间步下神经网络的状态或记忆,因此这样的隐藏变量被称为隐状态。
由于隐状态使用的定义与前一个时间步中使用的定义相同,因此上式是循环的,基于上式的网络就称为循环神经网络RNN,执行上式的层就叫做循环层。
对于时间步t,输出层的输出类似于多层感知机:
O t = H t W h q + b q O_t=H_tW_{hq}+b_q Ot=HtWhq+bq
值得一提的是,即使在不同的时间步,循环神经网络也总是使用这些模型参数。因此,循环神经网络的参数开销不会随着时间步的增加而增加。
下面展示了RNN计算逻辑:
在这里插入图片描述
在任意时间步,隐状态的计算可以被视为:
1、拼接当前时间步t的输入和前一时间步t-1的隐状态
2、将拼接结果送入带有激活函数的全连接层,全连接层的输出是当前时间步t的隐状态

具有循环神经网络的字符级语言模型

设小批量大小为1,批量中的文本序列为“machine”。使用字符级语言模型,将文本次元化为字符而不是单词,如下图演示,使用当前的和先前的字符预测下一个字符:
在这里插入图片描述
在训练过程中,我们对每个时间步的输出层的输出进行softmax操作, 然后利用交叉熵损失计算模型输出和标签之间的误差。
在实践中,我们使用的批量大小是n>1,每个词元都由一个d维向量表示,因此,我们在时间步t的输入是一个n×d的矩阵。

困惑度

让我们讨论如何度量语言模型的质量,这将在后续部分中用于评估基于循环神经网络的模型。
我们可以通过一个序列中所有的n个词元的交叉熵损失的平均值来衡量:
1 n ∑ t = 1 n − l o g P ( x t ∣ x t − 1 , . . . , x 1 ) \frac{1}{n}\sum_{t=1}^n-logP(x_t|x_{t-1},...,x_1) n1t=1nlogP(xtxt1,...,x1)
其中,P由语言模型给出,xt是在时间步t从该序列中观察到的实际词元。
而我们使用的是困惑度,是一个指数:
e x p ( − 1 n ∑ t = 1 n l o g P ( x t ∣ x t − 1 , . . . , x 1 ) ) exp(-\frac{1}{n}\sum_{t=1}^nlogP(x_t|x_{t-1},...,x_1)) exp(n1t=1nlogP(xtxt1,...,x1))
困惑度的最好的理解是“下一个词元的实际选择数的调和平均数”。
在接下来,我们将基于循环神经网络实现字符级语言模型,并使用困惑度来评估这样的模型。

小结

1、对隐状态使用循环计算的神经网络称为循环神经网络(RNN)
2、循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息
3、循环神经网络模型的参数数量不会随着时间步的增加而增加
4、我们可以使用循环神经网络创建字符级语言模型
5、我们可以使用困惑度来评价语言模型的质量

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

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

相关文章

ASP.NET Core - 缓存之分布式缓存

分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护。 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时。 与其他将缓存数据存储在单个应用服务器上的缓存方案相比&am…

如何保证数据传输的安全?

要确保数据传输的安全,您可以采取以下措施: 使用加密协议:使用安全的传输协议,如HTTPS(HTTP over SSL/TLS)或其他安全协议,以保护数据在传输过程中的安全性。加密协议可以有效防止数据被窃听或篡改。 强化身份验证&…

克服多语言语音技术的障碍:五大挑战和创新解决方案

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑器的3D应用场景 介绍 在用西班牙语(您的首选语言)向语音助手询问某些内容后,您有多少次不得不暂停,然后用语音助手理解的语言(可能是英语)重述…

Python爬虫(十二)_XPath与lxml类库

Python学习指南 有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素。 什么是XML XML指可扩展标记语言(E…

前后端分离------后端创建笔记(06)新增接口页面布局

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…

【C++精华铺】6.C++类和对象(下)类与对象的知识补充及编译器优化

目录 1. 再谈构造 1.1 成员变量的初始化(初始化列表) 1.2 初始化列表的行为 1.3 explicit关键字 2. 类中的static成员 2.1 静态成员变量 2.2 静态成员函数 3. 友元 3.1 友元函数 3.1 友元类 4. 内部类 5. 匿名对象 6. 对象拷贝时候的编译器优化…

C++入门基础(万字详解!!!)

文章目录 前言1.C关键字2.命名空间3.C的输入输出4.缺省参数4.1 全缺省4.2 半缺省 5.函数重载6. 引用6.1 引用的特性6.2 引用的使用场景6.3 引用和指针 7.内联函数7.1 特性 8.auto关键字8.1 注意事项 9. 基于范围的for循环9.1 使用条件 10.指针控制nullptr10.1 注意事项 11.总结…

并发编程面试题2

并发编程面试题2 一、AQS高频问题: 1.1 AQS是什么? AQS就是一个抽象队列同步器,abstract queued sychronizer,本质就是一个抽象类。 AQS中有一个核心属性state,其次还有一个双向链表以及一个单项链表。 首先state…

8.15黄金能否跌破千九?日内如何稳健布局

近期有哪些消息面影响黄金走势?黄金多空该如何研判? ​黄金消息面解析:周二(8月15日)亚洲时段,现货黄金延续低位徘徊,目前交投于1906.01美元/盎司附近,美国财长称耶伦称美国经济处于…

Linux与安卓安全对抗

导读大家都知道安卓是基于Linux内核,而且大家也知道Linux的安全性是公认的,那为什么和Linux有着类似嫡系关系的安卓却一直被人诟病不安全呢?要想说清楚这个问题,我们需要了解一下安卓和Linux到底是什么关系,而且这两个…

4WRZ25E3-220-5X/6A24NZ4/D3M不带位移反馈比例阀放大器

该先导阀是一个由比例电磁铁控制的三通减压阀,它的作用是将一个输入信号转化为一个与其成比例的压力输出信号,可用于所有的4WRZ...和5WRZ...型比例阀的控制。比例电磁铁是可调试,湿式直流电磁铁结构,带中心螺纹,线圈可…

机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?

一、引言 在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。 特征选择在实践中具有以…

快手商品详情数据API 抓取快手商品价格、销量、库存、sku信息

快手商品详情数据API是用来获取快手商品详情页数据的接口,请求参数为商品ID,这是每个商品唯一性的标识。返回参数有商品标题、商品标题、商品简介、价格、掌柜昵称、库存、宝贝链接、宝贝图片、商品SKU等。 接口名称:item_get 公共参数 名…

【JavaEE进阶】SpringBoot 日志

文章目录 一. 日志有什么用?二. 自定义日志打印1. 日志的使用与打印 三. 日志级别1. 日志级别有什么用?2. 日志级别的分类及使用 四. 日志持久化五. 更简单的日志输出---Lombok1. Lombok的使用2. lombok原理解释2.1 Lombok更多注解说明 一. 日志有什么用? 在Java中&#xf…

SpringSecurity结合电商项目

pom <!--SpringSecurity及JWT依赖配置--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</ artifactId></dependency> <!--Hutool Java工具包--> <dependency>&l…

Vue3组件库

Vue组件库 ViteVue3TypescriptTSX 1、项目搭建 1.1、创建项目&#xff08;yarn&#xff09; D:\WebstromProject>yarn create vite yarn create v1.22.19 [1/4] Resolving packages... [2/4] Fetching packages... [3/4] Linking dependencies... [4/4] Building fresh pa…

idea报错:java: 程序包org.springframework.web.bind.annotation不存在

这个错误通常都是maven仓库的问题&#xff0c;试了网上很多方法&#xff0c;都没有解决&#xff0c;如果大家有遇到这个问题&#xff0c;且试了很多方法之后都没有解决&#xff0c;不妨可以试试我这个方法 先编译一下已经写好的代码&#xff0c;这时候会出现以上报错&#xff…

文本分类实战-NLP

数据集及任务分析 项目主题&#xff1a;新闻的主题分类&#xff0c;10分类任务 一般对于NLP项目来说的话需要进行数据预处理的&#xff0c;但是由于本项目的数据是经过处理过的&#xff0c;所以就不需要进行数据预处理了&#xff0c;但是数据预处理对NLP项目是重中之重的。 TH…

Linux上安装温度监控软件

文章目录 Linux上安装温度监控软件IDRAC设置 Linux上安装温度监控软件 服务器的温度是影响服务器性能重要条件&#xff0c;怎么监控机器的温度呢&#xff0c;这里知道的有两种方式 通过管理界面&#xff0c;查看机器的温度通过机器上安装监监控软件来监控温度 在物理机上怎么…

微软电脑surface键盘无法使用问题解决

昨天下班后&#xff0c;正常关掉电脑&#xff0c;今天来上班发现键盘无法使用了 打人工找到了解决方法 开机->到锁屏页面->使用屏幕键盘输入密码进入电脑 然后右键左下角的win图标 找到设备管理器->键盘 全部右键卸载 再找到设备管理->系统设备 把这个DTX也卸…