【深度学习】rnn是什么?循环神经网络是什么?RNN前向传播。

news/2024/5/18 20:10:12/文章来源:https://blog.csdn.net/qq_43158059/article/details/129975399

文章目录

  • 循环神经网络
    • 1.循环神经网络原理
    • 2.使用Numpy实现RNN层的前向传播
    • 3.RNN存在的问题
    • 4.小结

循环神经网络

  通常卷积神经网络 适合处理图像问题,然而通常适合处理自然语言的网络是循环神经网络。rnn是所有基本网络,就像cnn 是很多复杂网络的基本原型。包括目前火热的自然语言处理的模型MLL,GPT等。rnn适合处理序列类数据,在语言模型与文本生成,以及机器翻译和语音识别等场景广泛使用。

1.循环神经网络原理

  循环神经网络能够对前面的信息进行“记忆”并且应用于当前输出的计算中,即隐藏层之间不再无连接。 某一个具体的隐藏层中的神经网络的神经元的输入不仅仅包含上一层的输出,还包括当前层上一个神经元的输出。
  假设给定一个长度为T的输入序列{x0,x1,...,xt,...,xT}\{x_0,x_1,...,x_t,...,x_T\}{x0,x1,...,xt,...,xT},其中xtx_txt表示在t时刻的输入特征向量,这里的t时刻,并不一定真的指的是时间,只是用来表明这是一个序列输入。现在要得到每个时刻的隐含特征{h0,h1,...,ht,...,hT}\{h_0,h_1,...,h_t,...,h_T\}{h0,h1,...,ht,...,hT},这些隐含层特征那个与后面层的层的特征输入。如何采用传统的神经网络只需要进行一下计算。ht=f(Uxt+b)h_t=f(Ux_t+b)ht=f(Uxt+b)其中f为非线性激活函数。但是,这样明显忽略了这是一个序列输入问题,即当丢失了序列中各个元素的依赖关系。对于循环神经网络,其在计算t时刻的特征时,不但考虑当前时刻的输入特征xtx_txt,而且引入了前一个隐含特征ht−1h_{t-1}ht1,计算如下。ht=f(Uxt+Wht−1+b)h_t=f(Ux_t+Wh_{t-1}+b)ht=f(Uxt+Wht1+b).
  显然,这样可以捕捉序列中的依赖关系,可以认为ht−1h_{t-1}ht1是一个记忆特征,其提取了前面t-1个时刻输入的旧特征。可以称ht−1h_{t-1}ht1为旧状态,称hth_{t}ht为新状态。因此,循环神经网络特别适合解决序列问题。从结构上来看,循环神经网络可以看作是有环的神经网络(见图1)。
在这里插入图片描述

图1 循环神经网络结构(左)及其展开形式(右)

  不过,我们可以将其展开成普通的神经网络,准确地说,就是展开成t个普通地神经网络。但是这t个神经网络不是割裂的,他们使用的参数是相同的也是共享的,既权重共享。这样,在每一个时刻,循环神经网络执行的是相同的计算过程。

2.使用Numpy实现RNN层的前向传播

  为了实现RNN的层,通过Numpy包进行模拟一些平台的的构建层。RNN的输入是一个张量序列,我们输入一个形状为(sequence_length,input_feature)的二维张量。它对序列中每一个元素进行遍历,同时它会把前元素和上一个状态放在一起进行计算。对于第一个元素,由于没有上一个状态,所以需要初始化一个全零向量,然后将其作为初始状态。
  此时输入的矩阵为一个20个单词的矩阵,每一个单词的维度为5。状态权重w大小为1010,链接权重为510.输出为10的一个向量大小,表示最后一个隐藏层词语。前向传播输入结果为每一个隐含层的大小维度为20,10.

import numpy as npclass RNNlayer(object):def __init__(self,sequence_length:int,input_feature:int,output_feature:int):""":param sequence_length: 输入序列长度:param input_feature: 输入序列中每一个元素维度:param output_feature: 输出序列每一个元素维度"""self.sequence_length = sequence_lengthself.input_feature = input_featureself.output_feature = output_feature#初始化0向量,self.state_t=np.zeros((output_feature,))#网络权重初始化self.W=np.random.uniform(size=(output_feature,input_feature))self.U=np.random.uniform(size=(output_feature,output_feature))self.b=np.random.uniform(size=(output_feature,))def _sigmoid(self,inputs:np.ndarray)->np.ndarray:"""因为sigmoid激活函数是内部方法,所以函数名使用_:param inputs:输入特征:return: sigmoid的函数运算结果"""sigm=1./(1.+np.exp(-inputs))return sigmdef forward_propagation(self,inputs:np.ndarray)->np.ndarray:"""前向传播:param inputs: 输入特征:return: 在该层中进行前向传播后的结果"""output=[]#遍历输入特征,逐个计算对应的输出for input_t in inputs:# 有输入特征和前一个状态(前一个输出)计算当前的输出print(self.U,self.W,self.state_t)output_t=np.dot(self.W,input_t)+np.dot(self.U,self.state_t)+self.b#使用激活函数output_t=self._sigmoid(output_t)#将输出的保存到输入列表中output.append(output_t)# 将这次状态保存一边用于下次计算self.state_t=output_treturn np.stack(output,axis=0)if __name__ == '__main__':#初始化一个层rnn=RNNlayer(20,5,10)#随机初始化输入特征input_sequence=np.random.random((20,5))print(input_sequence)#进行前向传播output_sequence= rnn.forward_propagation(input_sequence)print(output_sequence)

3.RNN存在的问题

  虽然rnn处理时间序列效果非常好,但是其存在一定的问题。其中比较严重的问题是:处理长序列时,其容易出现梯度消失或者梯度爆炸。
(1)梯度爆炸:在训练过程梯度变大,大幅度更新网络参数 使得训练不稳定,可以通过截断或者压缩梯度解决。
(2)梯度消失:梯度变得非常小,导致更新网络过程时候变得非常缓慢,甚至停止更新参数。造成无法优化的局面。对于这个问题。通常使用变种网络,长短时间记忆网络lstm。它的出现解决了梯度消失问题。

4.小结

  本文介绍了rnn数据的输入结构以及rnn 用于时间序列的基本单元,并且通过一个numpy的前向传播算法实现了网络的计算。对于rnn如何进行参数更新,后续继续有相关博客进行讲解。

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

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

相关文章

leedcode刷题(3)

各位朋友们大家好,今天是我leedcode刷题系列的第三篇,废话不多说,直接进入主题。 文章目录分割链表题目要求用例输入提示做题思路c语言代码实现Java代码实现相交链表题目要求用例输入提示做题思路c语言实现代码Java代码实现分割链表 leedcod…

《 LeetCode 热题 HOT 100》——无重复字符的最长子串

本期给大家带来的是 LeetCode 热题 HOT 100 第三题关于 无重复字符的最长子串 的讲解。首先,我们还是先从题目入手进行分析思考!!! 题目如下 :👇 给定一个字符串 s ,请你找出其中不含有重复字符…

改进蚁狮优化算法

目录 ​1 主要内容 2 部分程序 3 程序结果 4 程序链接 ​1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型,即原始ALO算法的基础上添加了两种改进策略: - 改进1:将原先的间断性边界收缩因子变为连…

【Android开发经验】-- 如何实现RecyclerView子项的点击事件?

目录 实例 实现思路 实现代码 进一步需求:数据库存储 实例 假设现在需要完成一个以下需求的任务,下面两个图左边是点击前未完成,右边是点击后已完成,如何实现点击图标切换另一个图标?(矩形框中的内容是…

医药产品经理渠道资源获取的方法有哪些?

收集渠道信息是医药产品经理非常重要的工作之一,以下是一些可行的方法: 与销售人员和客户服务团队交流 销售人员和客户服务团队是企业与患者、医生和医院进行联系的主要渠道。他们可以提供很多有关市场需求和竞争对手情况的信息。产品经理可以通过与销…

机械臂动力学参数辨识学习笔记

1、为什么需要动力学参数辨识? 图1 电机三环控制图 通常情况下,标准的工业控制器通过机械臂内部的PID进行调节控制机械臂的运动,即用PID输出力矩,涉及到经典的图一所示的电机三环控制(位置环、速度环、电流环&#xff…

用机器学习sklearn+opencv-python过古诗文网4位数字+字母混合验证码

目录 获取验证码图片 用opencv-python处理图片 制作训练数据集 训练模型 识别验证码 编写古诗文网的登录爬虫代码 总结与提高 源码下载 在本节我们将使用sklearn和opencv-python这两个库过掉古诗文网的4位数字字母混合验证码,验证码风格如下所示。 验证码获…

DM的学习心得和知识总结(三)|DM数据库DBMS_WORKLOAD_REPOSITORY 包及其性能分析工具AWR

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、达梦数据库产品及解决方案,点击前往 2、达梦技术文档,点击前往 3、武汉达梦数据库有限公司 官网首页,点击前往 1、本文内容全部…

【软考备战·希赛网每日一练】2023年4月10日

文章目录一、今日成绩二、错题总结第一题第二题三、知识查缺题目及解析来源:2023年04月10日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 本题属于专业英语,大体了解意思即可。 题目大意: 第二题 解析&#xff1a…

ORACLE创建表空间、用户、授权和Navicat创建序列和触发器及解决ORA-00942、ORA-01219错误

问题描述:因为每次Oracle删除数据库的时候磁盘文件还没删除,然后自己手动停止Oracle,删除磁盘里的.DBF文件导致数据库重启后无法连接。 cmd sqlplus sys as sysdba执行alter database open;查看你报错的数据文件(就是你停止Orac…

ESP32 分区表

ESP32 分区表 1. 分区表概述 ESP32 针对 flash 进行划分,划分为不同的区域用作不同的功能,并在flash的 0x8000 位置处烧写了一张分区表用来描述分区信息。 分区表可以根据自己的需要进行配置,每一个分区都有其特定的作用,可根据…

Jetpack Compose之选择器

选择器是啥 选择器主要是指Checkbox复选框,单选开关Switch,滑杆组件Slider等用于提供给用户选择一些值和程序交互的组件,比如像复选框Checkbox,可以让用户选择一个或者多个选项,它可以将一个选项打开或者是关闭,通常用…

【JavaEE】ConcurrentHashMap与Hashtable有什么区别?

博主简介:努力的打工人一枚博主主页:xyk:所属专栏: JavaEE初阶Hashtable、ConcurrentHashMap是使用频率较高的数据结构,它们都是以key-value的形式来存储数据,且都实现了Map接口,日常开发中很多人对其二者之间的区别并…

STM32F4_窗口看门狗精讲(WWDG)

目录 1. 窗口看门狗WWDG简介 2. 窗口看门狗和独立看门狗的区别 3. WWDG主要特性 4. WWDG功能 4.1 窗口看门狗框图(重要) 4.2 看门狗超时计算 5. WWDG寄存器 5.1 控制寄存器 WWDG_CR 5.2 配置寄存器 WWDG_CFR 5.3 状态寄存器 WWDG_SR 6 库函数配置窗口看门狗(采用中断…

Mybatis(五)------Mybatis执行Mapper接口的方法流程

前面几篇文章我们介绍了JDBC、Mybatis的工具类等,下面我们开始对于mybatis的各个机制开始解析。 前面我们知道,mybatis对excutor进行封装成sqlsession提供给开发人员进行数据库的增删改查,我们先从Mybatis最顶层的API入手。 SQLSession的创…

爬虫日常练习-艾图网单页面图片爬取

文章目录爬虫练习分析网站代码设计下载图片完整代码爬虫练习 hello,大家好。好久不见了,无聊的网友今天开始更新关于爬虫的一些日常练习。每次学习完一个新的知识后没有多的案例给自己练习真的很不舒服,希望该系列文章能够让刚刚开始学习爬虫…

常见面试题之Redis篇

1.1.Redis与Memcache的区别? redis支持更丰富的数据类型(支持更复杂的应用场景):Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache支持…

腾讯云CVM云服务器评测:标准型S5、S6

一、腾讯云CVM云服务器评测:标准型S5、S6 腾讯云服务器CVM标准型S5是次新一代云服务器规格,标准型S6是最新一代的云服务器,S6实例的CPU处理器主频性能要高于S5实例,同CPU内存配置下的标准型S6实例要比S5实例性能更好一些&#xf…

【C语言】for 关键字

🚩WRITE IN FRONT🚩 🔎介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四"🔎🏅荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TOP100…

小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了 一、注意:代码加入了常规的防爬技术 如果不加,如果网站有防爬技术,比如频繁访问,后面…