深度学习——循环神经网络RNN(笔记)

news2024/11/27 2:32:48

循环神经网络RNN:对于序列模型的神经网络

 1.回顾:潜变量自回归模型

使用潜变量ht总结过去的信息

①xt跟当前的ht和x(t-1)相关

②ht跟ht-1和xt-1相关

③n元语法模型中,单词xt在时间t的条件概率取决于前面n-1个单词

隐藏层和隐藏状态的区别是什么

①隐藏层是输入到输出的路径上(观测角度)隐藏的层

②隐藏状态是给定步骤所做的任何事情(技术角度)的输入,这些状态只能通过先前的时间步的数据计算

2.循环神经网络:具有隐状态的神经网络

假设有一个观察x和隐变量ht。根据ht输出ot

 

①t时刻的输出ot是根据ht输出的,ht是使用的是x(t-1)的内容

②计算损失的时候,比较ot和xt之间的损失

③xt是更新ht使得观察xt向后移动

④隐状态:捕获并保留序列直到当前时间步的历史信息

3.循环神经网络在三个相邻时间步的计算逻辑:

 

①拼接当前时间步t的输入xt和前一时间步t-1的隐状态H(t-1)

②将拼接的结果送入带有激活函数的全连接层

③全连接层的输出就是当前时间步t的隐状态Ht

循环神经网络与多层感知机的区别是多了一个时间轴,没有时间关系的话,循环神经网络会退化成MLP多层感知机。

①保存了前一个时间步的隐状态h(t-1)

②引入了一个新的权重参数Whh是前一个时间步的隐藏变量

4.循环神经网络如何更新

 

①ht是一个隐状态,Whx是隐藏层的权重

②Whh是前一个时间步的隐藏变量

③循环神经网络是在MLP的基础上加上Whh*h(t-1)使得能够前一时刻h(t-1)产生关联

④循环神经网络没有对x进行建模,所有的x之间的时序信息存储在潜变量h,Whh中

5.循环神经网络在语言模型的使用

①基于循环神经网络的字符级语言模型

Ⅰ语言模型的目标是 根据过去和当前的词元预测下一个词元,所有把原始序列移位一个词元作为标签

Ⅱ简化训练,使用的是字符级语言模型,将文本词元化为字符而不是单词

②训练步骤

输入序列“machine”

标签是“achine”

 

 

在训练过程中,对每个时间步的输出层的输出进行softmax操作,使用交叉熵损失计算模型输出和标签之间的误差

①O3通过隐藏层的隐状态循环计算,O3由文本序列’m’,’a’,’c’确定

②训练数据中输入文本序列的下一个字符是‘h’。第三个时间步的损失将取决于下一个字符的概率分布,而下一个字符是基于特征序列 “m”、“a”、“c” 和这个时间步的标签 “h” 生成的

6.困惑度:下一个词的候选数量

语言模型实际上是分类模型。假设字典大小是m,语言模型是m类的分类问题,每次预测下一个词的时候,实际上在预测下一个词的类别。

①衡量一个语言模型的好坏可以用平均交叉熵

N是序列长度,P是语言模型的预测概率,xt是真实词

②NLP使用困惑度exp(Π)来衡量,是平均每次可能选项,指数运算结果变大。

    1表示完美,无穷大是最差情况

7.梯度剪裁

①迭代中计算这T个时间步上的梯度,在反向传播过程中产生为O(T)的矩阵乘法链,导致数值不稳定。一连串的矩阵相乘的话会导致结果要么很小,要么很大:如果结果很小的话可能会导致训练不动;如果结果很大的话,可能会发生梯度爆炸导致结果出错。

②梯度裁剪有效防止梯度爆炸

    如果梯度长度超过θ,那么拖影回长度θ

① g是所有层的梯度全部放在向量g当中

②假设g的长度L太长导致超过θ,需要将长度L降回到θ

只要g的长度是正常的不需要做操作了,g长度超出范围就要裁剪到范围中,有效的避免梯度爆炸

 

 8.应用

 

①一对一

也就是最简单的 MLP :给定一个样本,然后输出一个标签

一对多

②文本生成:给定一个词,然后生成一个一个的词

多对一

③文本分类:给定一个序列,在最后的时刻输出,得到具体的分类

多对多

问答、机器翻译:给定一个序列,先不输出,然后在序列输入完毕之后输出答案

Tag 生成:给定一个序列,然后输出每个词的 Tag ,比如输入一个句子,然后输出句子中每个词是名词、动词还是形容词等

【总结】

1、对隐藏状态使用循环计算的神经网络称为循环神经网络(RNN),循环神经网络的输出取决于当下输入和前一时间的隐变量

循环神经网络的隐藏状态可以捕获当前时间步序列的历史信息

隐变量是用来存储历史信息和下一个历史信息的转换规则,所以在拿到过去的输入和当前的隐藏状态就能够预测当前的输出

Whh 拥有一定的时序预测目的

2、应用到语言模型中时,循环神经网络根据当前词预测下一次时刻词根据当前的输入更新当前时刻的隐藏状态就能够预测下一个时刻的输出RNN 是一个隐变量模型,隐变量是一个向量

3、通常使用困惑度来衡量语言模型的好坏

取平均值,然后进行指数操作,就得到了困惑度

困惑度实际上衡量了语言模型对下一个词的预测所选取的候选词数量,这个候选词的数量越少越好

4、为了解决梯度爆炸的问题,RNN 一般是需要进行梯度裁剪的,这也是最简单的方法

5、循环神经网络模型的参数数量不会随着时间步的增加而增加

6、使用循环神经网络可以创建字符级语言模型

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

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

相关文章

【ESP32Cam项目1】:ESP32Cam人脸检测(ArduinoESP32底层、Python版opencv)

人脸检测项目效果图: 人脸检测效果视频: 暮年的主页 - 抖音 (douyin.com) 人脸检测项目目标: 大家好!近期拿到了便宜的ESP32Cam开发板,摄像头让我想起来人脸识别,于是ESP32Cam人脸检测项目由此诞生。后期还…

一文总结ACE代码框架

一、前言ACE_Engine框架是OpenAtom OpenHarmony(简称“OpenHarmony”)的UI开发框架,为开发者提供在进行应用UI开发时所必需的各种组件,以及定义这些组件的属性、样式、事件及方法,通过这些组件可以方便进行OpenHarmony…

JavaScript面试题

目录1.★★ 介绍一下JS的内置类型有哪些?2.★★★★ 介绍一下 typeof 区分类型的原理3.★★★ 介绍一下类型转换4.★★★★ 说说你对 JavaScript 的作用域的理解。什么是作用域链?5.★★ 解释下 let 和 const 的块级作用域6.★★★★ 说说你对执行上下文…

用Vue+Nodejs+Axios+express连接Sqlserver做一个动态网页demo

文章目录一、主要工具二、流程2.1. 安装Node2.2. 新建Vue工程并启动2.3. 前后端通信2.3.1. 修改前端2.3.2. 用axios来发起请求2.3.3. 创建服务端程序一、主要工具 Vue做前端页面Nodejs做服务器后端(Nodejs是一个JS的运行环境,可以让JS像其它后端语言一样…

使用超体素上下文和基于图的优化从MLS点云对城市地区的树木进行实例分割

Abstract 在本文中,开发了一种用于从城市场景中的 MLS 数据集中提取树木的实例分割方法。所提出的方法利用超体素结构来组织点云,然后从超体素的局部上下文中提取去除趋势的几何特征。结合局部上下文的去趋势特征,将采用随机森林&#xff08…

Qt基于CTK Plugin Framework搭建插件框架--创建插件

文章目录一、前言二、工程搭建2.1、新建Qt工程2.2、CTK环境配置三、CTK Plugin Framework使用3.1、主函数启动插件框架3.2、插件的创建3.3、插件的使用一、前言 CTK保姆级编译教程:https://blog.csdn.net/Mr_robot_strange/article/details/128547331?spm1001.201…

JavaGUI:多功能计算器(五)--Swing实现双语数据包+菜单切换(完整源码)

JavaGUI:多功能计算器(五)–Swing实现双语数据包菜单切换(完整源码) 【背景提示】 “软件国际化”就是实现多种语言显示切换。 1.在前端网页上,可通过探测本地化语言环境实现自动切换; 2.在操…

C++ 20 原子引用 (一)

C 20 原子引用 (一) std::atomic_ref{} std::atomic_ref类型对其引用的对象进行原子操作。 使用std::atomic_ref 进行多线程读写时不会造成数据争用。被引用对象的生命周期必须超过std::atomic_ref 。操作std::atomic_ref 的子对象是未定义行为。 错…

Docker版RabbitMQ安装延迟队列插件及延迟队列项目应用实战

前言 在项目中经常有延迟业务处理的背景,此时可以借助于Rabbitmq的延迟队列进行实现,但Rabbitmq本身并不支持延迟队列,但可以通过安装插件的方式实现延迟队列 环境准备 首先确认目前项目使用的Rabbitmq的版本,这里博主的版本是3.…

STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

前言 本篇主要讲解如何使用ESP8266-01S物联网模块连接Onenet云平台,并上报DHT11模块的温湿度数据。本文单片机主控采用STM32F405RGT6,使用其他主控的话基本要求有2个串口,一个串口用于调试使用,另一个用于ESP模块通讯。 一、前…

SOLIDWORKS 2023工程图和出详图新功能 创建更智能化 更高精度的工程详图

工程图是传达您设计意图的重要文档,您设计的产品越复杂,越需要详细注释说明。SOLIDWORKS 2023增强的工程图和出详图功能将帮助您创建更智能化、更高精度的工程详图,并且扩展新功能使您的设计工作延伸到更多的业务领域。您现在可以从更高层级的…

C 程序设计教程(15)—— 选择结构程序设计练习题

C 程序设计教程(15)—— 选择结构程序设计练习题 该专栏主要介绍 C 语言的基本语法,作为《程序设计语言》课程的课件与参考资料,用于《程序设计语言》课程的教学,供入门级用户阅读。 目录C 程序设计教程(1…

20230110配置ubuntu18.04为开机自动登录

20230110配置ubuntu18.04为开机自动登录 百度搜索:ubuntu 18.04 开机自动登录 https://blog.csdn.net/yang1994/article/details/124446319 通过配置文件启用/禁用Ubuntu 18.04自动登录 超级用户可以通过编辑custom.conf配置文件的方式,来为自己或任何其…

计算机如何存储浮点数和定点数?

1 浮点数的不精确性 能不能用二进制表示所有实数,然后在二进制下计算它的加减乘除呢? 打开Chrome Console,输入0.3 0.6: 简单加法在js算出结果居然不是准确的0.9,而是0.8999999999999999,why&#xff1…

火山语音丨AI创作惊艳四方 诸多挑战仍在路上

2022年8月,一幅名为《太空歌剧院》的数字画作获得冠军同时引发了巨大争议,AIGC(AI产生内容:AI-Generated Content)出圈的事件便频频出现在大众视野。同年11月30日OpenAI发布的聊天机器人模型ChatGPT免费开放&#xff0…

从0到1完成一个Vue后台管理项目(二十、地图涟漪、线图)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…

缓存穿透、布隆过滤器、布谷鸟过滤器

1.概述 缓存穿透: 当查询的数据在缓存(redis)中没有时,一般业务上就会去查询数据存储(数据库),这种情况称为缓存穿透。穿透的数量太大会造成数据存储撑不住(数据库)而宕…

基于控制器软件需求事项进行单元测试和单元测试规范

基于需求事项的单元测试是什么? ​ 大多数汽车行业都遵循 ISO 26262 中定义的标准,这是 ISO 制定的汽车功能安全国际标准。 根据 ISO 26262 标准软件单元测试 (ISO 26262-6-9),单元验证是验证要验证的单元(功能或功能&#xff09…

智能优化算法应用:基于蜣螂优化算法的工程优化案例

智能优化算法应用:基于蜣螂算法的工程优化案例 文章目录智能优化算法应用:基于蜣螂算法的工程优化案例1.蜣螂算法2.压力容器设计问题3.三杆桁架设计问题4.拉压弹簧设计问题5.Matlab代码6.Python代码摘要:本文介绍利用蜣螂搜索算法&#xff0c…

MyBatis框架知识点总结

一、引言1.1 什么是框架?框架:框架使用你的,而不是你在使用框架的。框架让我们提供什么信息,配置信息,数据库连接用户名密码等,你必须提供,还得按照框架要要求的方式提供,否则你就别…