简单了解RNN循环神经网络

为什么需要RNN(循环神经网络)

将神经网络模型训练好之后,在输入层给定一个x,通过网络之后就能够在输出层得到特定的y,那么既然有了这么强大的模型,为什么还需要RNN(循环神经网络)呢?他们都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。

例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。

一个句子中,前一个单词其实对于当前单词的词性预测是有很大影响的,比如预测苹果的时候,由于前面的吃是一个动词,那么很显然苹果作为名词的概率就会远大于动词的概率,因为动词后面接名词很常见,而动词后面接动词很少见。

所以为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就诞生了。

RNN的结构

一个简单的循环神经网络如图所示,它由输入层、一个隐藏层和一个输出层组成:

在这里插入图片描述

如果把上面有W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。x是一个向量,它表示输入层的值(这里面没有画出来表示神经元节点的圆圈);s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同);

U是输入层到隐藏层的权重矩阵,o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵

那么,现在我们来看看W是什么。循环神经网络隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

如果我们把上面的图展开,循环神经网络也可以画成下面这个样子:
在这里插入图片描述
更细致到向量级的连接图:
在这里插入图片描述

现在看上去就比较清楚了,这个网络在t时刻接收到输入 X t X_t Xt之后,隐藏层的值是 S t S_t St,输出值是 o t o_t ot。关键一点是, S t S_t St的值不仅仅取决于 X t X_t Xt,还取决于 S t − 1 S_{t-1} St1 。我们可以用下面的公式来表示循环神经网络的计算方法:(为了简单说明问题,偏置都没有包含在公式里面):
O t = g ( V ⋅ S t ) S t = f ( U ⋅ X t + W ⋅ S t − 1 ) O_t = g(V \cdot S_t) \\ S_t = f(U \cdot X_t+W \cdot S_{t-1}) Ot=g(VSt)St=f(UXt+WSt1)
总结来说网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNN能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关。

训练算法

RNN 的训练算法为:BPTT

BPTT 的基本原理和 BP(反向传播算法) 算法是一样的,同样是三步:

    1. 前向计算每个神经元的输出值;
    1. 反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;
    1. 计算每个权重的梯度。

最后再用随机梯度下降算法更新权重。

BPTT(back-propagation through time)算法是常用的训练RNN的方法,其实本质还是BP算法,只不过RNN处理时间序列数据,所以要基于时间反向传播,故叫随时间反向传播。BPTT的中心思想和BP算法相同,沿着需要优化的参数的负梯度方向不断寻找更优的点直至收敛。






参考:

不会停的蜗牛 https://www.jianshu.com/p/39a99c88a565

https://zhuanlan.zhihu.com/p/30844905

更细致全面的说明可以参考:

https://blog.csdn.net/bestrivern/article/details/90723524

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

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

相关文章

天文馆元宇宙3d展厅打造沉浸式的参观体验

随着科技的不断发展,元宇宙展厅制作平台正逐渐成为企业展示和营销的新宠。这种创新的技术应用为传统展示方式带来了革命性的变革,为企业带来了前所未有的价值。 传统实体展厅受时间、地点、参与人群等各方面限制,成本高且展示内容有限;传统线…

【论文合集】在非欧空间中的图嵌入方法(Graph Embedding in Non-Euclidean Space)

文章目录 1. Hyperbolic Models1.1 Hyperbolic Graph Attention Network1.2 Poincar Embeddings for Learning Hierarchical Representations.1.3 Learning Continuous Hierarchies in the Lorentz Model of Hyperbolic Geometry1.4 Hyperbolic Graph Convolutional Neural Net…

【改进YOLOv8】融合Context_Grided_Network(CGNet)的晶粒大小分布统计系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 目标检测是计算机视觉领域的一个重要研究方向,它在许多应用中发挥着关键作用,如智能监控、自动驾驶、人脸识别等。目标检测的目标是在图像…

Makefile从零基础到入门到熟练使用

Makefile从零基础到入门到熟练使用 一、了解Makefile作用 1、一个文件从源码到可执行文件的过程:预处理-编译-汇编-链接 2、每个步骤都可以单独执行 3、使用过程中会压缩成两步 4、一步执行并且打印详细日志信息 gcc -o hello hello.c -v5、有多个源码文件需要…

【小白专用】MySQL入门(详细总结)

3. 创建数据库 使用 create database 数据库名; 创建数据库。 create database MyDB_one; create database DBAliTest; 创建数据库成功后,数据库的数量变成了6个,多了刚才创建的 dbalitest 。 4. 创建数据库时设置字符编码 使用 create database 数据…

【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa)

分片(500MB)进度效果展示 效果展示,一个分片是 500MB 的 分片(10MB)进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路:将大文件切分成多个小文件,然后并发给后端。 页面构建 先在页…

【算法题】拼接URL(js)

自己的解法: 2x2 种情况判断 function solution(urlStr) {const pre urlStr.split(",")[0];const after urlStr.split(",")[1];if (pre.endsWith("/")) {if (after.startsWith("/")) {return pre after.slice(1);} else…

如何跑AI模型—ultralytics

这里以跑 ultralytics 为示例,记录了如何从 0-1 跑个简单的模型,包括环境搭建。我的是 Window 系统,其他系统也类似。 主要流程是环境搭建,找个官网的 demo,收集好所需素材(模型,图片等&#x…

“四位一体”引领企业数据治理新模式

数字化时代,数据作为新的生产要素受到了前所未有的关注和重视。 随着企业业务的发展,数据积累越来越多。怎么管理好数据?如何利用好数据?数据价值如何挖掘?成为很多企业面临的难题! 面对这些棘手的问题&am…

做好这三点,有效提升项目的成功率

近期,大家都在做年度工作总结的准备了,在互相交流的时候,提到了一个值得思考的话题——“如何能提高项目的成功率?”。对于项目经理来说,都希望能找到一些通用的经验直接复制粘贴在自己的项目上,促进项目的…

鸿蒙原生应用开发【分布式数据对象】

01、什么是分布式数据对象 在可信组网环境下,多个相互组网认证的设备将各自创建的对象加入同一个 sessionId,使得加入的多个数据对象之间可以同步数据,也就是说,当某一数据对象属性发生变更时,其他数据对象会检测到这…

优秀软件测试工程师必备的“8个能力”

首先要说,做软件测试不难,难的是做好软件测试。 结合自己这些年的工作经验,自己也总结出来8个方面的能力,可能有些方面感觉要求暂时还达不到,但这些确实是做软件测试工作所必备的能力,掌握了这8个方面的能力…