【Python机器学习】循环神经网络(RNN)——循环网络的记忆功能

news2024/11/14 16:23:44

文档中的词很少是完全独立的,它们的出现会影响文档中的其他词或者收到文档中其他词的影响:

The stolen car sped into the arena.

The clown car sped into the arena.

这两句话可能会产生两种完全不同的情感感受。这两个句子的形容词、名词、动词、介词短语结构式完全相同的,但位于句首的形容词极大地影响了读者的推断。

如果能有一种方式“记忆”之前时刻发生的事情(尤其是当t+1时刻时,t时刻发生的),我们就能捕获当序列中某些词条出现时,其他词条相对应会出现的模式。循环神经网络RNN)使神经网络能够记住句子中出现过的词。

隐藏层中的单个循环神经元会增加一个循环回路使t时刻隐藏层的输出重新输入到隐藏层中。t时刻的输出会作为t+1时刻隐藏层的输出。而t+1时刻的输出接下来又会被作为t+2时刻的输入,以此类推。

尽管根据时间变化影响状态的思想一开始可能会让人感觉有些困惑,但其基本概念简单明了。对于传入一般前馈完了的每个输入,我们在t时刻得到的网络输入会作为网络的一个额外输入,与下一个t+1时刻的数据一起输入网络。这样,我们就可以告诉前馈网络之前发生了什么和“现在”正在发生什么。

在循环网络中,整个循环是由一个或多个神经元组成的前馈网络层。网络隐藏层的输出和普通输出一样,但它本身会和下一个时刻的正常输入数据一起作为输入回传进网络。这个反馈表示为从隐藏层的输出指向它的输入的箭头。

理解这个过程的更简单的方法是展开这个网络。下图从新的角度,展示了网络随时间变量(t)展开两次的图形,显示了t+1时刻和t+2时刻的网络层。

每个时刻由完全相同的神经网络展开后的一列神经元表示。就像在时刻中查看每个样本的神经网络的剧本或视频帧一样。右侧网络是左侧网络的未来版本。在一个时刻(t)的隐藏层的输出被回传到隐藏层已经用作右侧下一个时刻(t+1)的输入数据,如此循环往复。上图显示了这一展开的两次迭代,因此对于t=0、t=1、t=2,由3列神经元。

这个可视化中的所有垂直路径都是克隆的,或者说是完全相同神经元的视图。它们在时间轴上是单个网络表示的。当讨论信息在反向传播算法中是如何在网络中前向和反向流动时,这种可视化非常有用。但是,当我们观察折3个展开的网络时,要记住它们都是同一个网络的不同快照,只有一组权重。

放大一个循环神经网络展开前的原始表示,可以揭示输入和权重之间的关系,如下图:

处于隐藏状态的每个神经元都有一组权重,它们应用于每个输入向量的每个元素,这和一般的前馈网络一样。但是,现在我们有一组额外的可训练权重,这些权重应用于前一个时刻隐藏层神经元的输出。当我们逐个词条的输入序列时,网络可以学习分配给“过去”的事件多少权重或重要度。

回到数据,假设我们有一组文档,每篇文档都是一个带标签的样本。对于每个样本,不同于一次性将词向量集合传递进卷积神经网络(下左图),这次是从样本中一次取一个词条并将其单独传递到RNN中(下右图)。

在循环神经网络中,我们传入第一个词条的词向量并获得网络的输出,然后传入第二个词条的词向量,同时也传入第一个词条的输出;然后传入第三个词条的词向量以及第二个词条的输出,以此类推。网络中有前后概念和因果关系,以及一些模糊的时间概念。

随时间反向传播算法

循环神经网络也有一个标签(目标变量),但并不是说每个词条都有一个标签,而是每个样本中的所有词条只有一个标签。也就是说,对于样本文档,只有一个标签。

这里,我们开始会在最后一个时刻查看网络的输出,并将该输出与标签进行比较。这就是对于误差的定义,而误差是我们的网络最终想要尽量减小的目标。对于给定的数据样本,我们可以将其分成较小的片段,这些片段按顺序进入网络。但是,我们并不直接处理这些由“子样本”产生的所有输出,而是将其反馈给网络。

我们只关心最终的输出:将序列中的每个词条输入网络,并根据序列中最后一个时刻(词条)的输出计算损失,如下图:

对于给定样本的误差,我们需要确定哪些权重需要更新已经需要更新多少。我们可以输入样本序列中的各个词条,并根据之前时刻的网络输出计算误差,但是这也正是不能在时间序列上引用反向传播算法的原因。

可以这样来考虑:将整个过程视为基于时间的。我们在每个时刻取一个词条,从t=0处的第一个词条开始,将它输入当前的隐藏层神经元(如上图的下一列),当这样做时,网络会展示并揭开下一列,为序列中的下一个词条做好准备。隐藏层的神经元不断展开,一次一个,就像是音乐盒或钢琴的演奏。当我们到达终点,在输入样本的所有片段之后,网络将停止展开并且我们将获得目标变量的最终输出标签。我们可以使用该输出来计算误差并调整权重。这样,我们就完成了这个展开网络计算图的所有环节。

此时可以将整个输入视为静态的。通过计算图我们可以看到各个神经元分别送入了哪个输入。一旦知道各个神经元是如何工作的,我们就可以循着之前的方法,像在标准前馈网络中做的那样运用反向传播。

我们使用链式法则反向传播到前一层。但是,不同于传播到上一层,这里是传播到过去的层,就好像每个展开的网络版本都不同(如下图),数学公式是一样的。

将反向传播在最后一个时刻获得的误差,对于每个“较早”的时刻,都要执行更新时刻的梯度,对于该样本,在计算了所有词条的梯度之后,我们将聚合这些校正值并将它们应用于整套权重的更新,直至回到时刻t=0。

不同时刻的权重更新

通过将看似奇怪的循环神经网络转换为类似于标准前馈网络的东西,权重更新将会变得相当简单。但这里还有个问题:更新过程中棘手的部分是我们正在更新的权重不是神经网络的不同分支,每个分支代表着位于不同时刻的相同网络。各个时刻的权重是相同的。

一个简单的解决方案是计算各个时刻的权重校正值但不立即更新。在前馈网络中,一旦为输入样本计算了所有梯度,所有权重的校正值就会被计算。这对循环神经网络同样适用,但对该输入样本我们必须一直保留这些校正值。直至回到时刻t=0。

梯度计算需要基于权重对误差的贡献值。这里是令人费解的部分:在时刻t一个权重在初次计算时对误差产生了贡献,而该权重在时刻t+1会接收到不同的输入,因此之后对误差的贡献量也会有所不同。

我们可以计算出权重在每个时刻的不同校正值,然后聚合所有校正值并在学习阶段的最后一步将其应用于隐藏层的各个权重。

对于单个数据样本,随时间反向传播算法中的单个权重在一个时刻t可能会在一个方向上进行调整(取决于其在时刻t对输入的反应),然后在时刻t-1在另一个方向上进行调整(取决于其在时刻t-1对输入的反应)。但要记住,不管中间步骤有多复杂,神经网络一般都是通过最小化损失函数来工作的,所以总体来说,它会对这个复杂的函数进行优化。当对每个数据样本应用一次权重更新时,网络将确定对该输入样本来说最适合处理此任务的神经元的权重。

至关重要的输出

有时,还要关心在各个中间时刻生成的整个序列。下图展示了在任意给定时刻捕获误差的路径,并在反向传播期间使用该误差反向调整网络的所有权重。

这个过程类似于在n个时刻执行普通的随时间反向传播。当前例子中,现在正在同时从多个源反向传播误差。权重的校正值是累积的,我们从最后一个时刻一直反向传播到初始时刻,并且对每个权重计算要更新的总数,然后对于在倒数第二个时刻计算出的误差进行同样的处理,并将反向进行处理知道时刻t=0将所有的校正值加起来。重复这个过程,知道回到时刻t=0,然后继续反向传播,此时要聚合的值只有一个。接着,我们可以将更新的总和一次性地应用于相关隐藏层的所有权重。

上图中,可以看到误差从每个输出反向传播到t=0,并在最后对权重应用更新之前进行聚合。与标准的前馈网络一样,对于该输入(或一组输入),只有在计算了整个反向传播步骤中各权重需要更新的校正值之后,我们才会更新权重值。在循环神经网络的情况下,这种反向传播包含了所有时刻到t=0的更新。

较早地更新权重会较早的“污染”反向传播中的梯度计算。要记住梯度是根据特定的权重计算的,所以如果要提前更新它,例如在时刻t,那么当计算时刻t-1的梯度时,权重的值(它在网络中的权重位置是相同的)会发生变化。如果根据时刻t-1的输入计算梯度,计算将是错误的。我们将因为一个权重没有对误差做出贡献而“惩罚”/“奖励”它。

难点

经一个循环神经网络需要学习的权重(参数)可能相对较少,但是从上图中可以看出训练一个循环神经网络的代价很高,尤其是对于较长的序列(如10个词条)。我们拥有的词条越多,每个时刻误差必须反向传播的时间越长。而对于每一时刻,都有更多的导数需要计算。虽然循环神经网络的效果并不比其他网络的效果差,但是计算机的工作里还是非常大的。

神经网络虽然有了基本的记忆能力,但是当它们(网络时刻)变深,就会出现梯度消失问题(及梯度爆炸问题),它们的思想是:随着网络变得更深(更多层)时,误差信号会随着梯度的每一次计算消散或增长。

循环神经网络也面临同样的问题,因为在数学上,时刻的每一次后退都相当于将一个误差反向传播到前馈网络的前一层。由于这个问题,大多数前馈网络往往只有几层深,但是当我们要处理的是5个、10个、甚至更多词条的序列时,要深入到100层网络的底层还是很困难的。不过一个让我们可以继续工作、减轻压力的因素在于:尽管梯度可能会在计算最后一次权重的过程中消失或爆炸,但是实际上只更新了一次权重集,并且每个时刻的权重集都是相同的。仍然有些信息会传递出去,虽然它可能不是我们认为所能创建的理想记忆状态。

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

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

相关文章

算法入门-深度优先搜索2

第六部分:深度优先搜索 104.二叉树的最大深度(简单) 题目:给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:ro…

Tomcat配置及Servlet相关

目录 Eclipse配置Tomcat 1.配置服务器运行环境 2.新建服务器 3.新建动态Web项目 4.创建类继承HttpServlet 5.启动服务器 6.测试访问 请求转发与重定向 请求转发 重定向 Servlet的作用域 Servlet生命周期 这里以Eclipse为例,IDEA配置参考:IDE…

若依框架使用MyBatis-Plus中的baseMapper的方法报错Invalid bound statement (not found):

Invalid bound statement (not found): com.ruoyi.system.mapper.hc.HcOrderMapper.selectList 解决方法 MybatisSqlSessionFactoryBean sessionFactory new MybatisSqlSessionFactoryBean(); 使用 MybatisSqlSessionFactoryBean 而非 SqlSessionFactoryBean 的原因 MyBatis-…

卷轴模式系统源码开发之功能技术分析

随着互联网经济的蓬勃发展,电商平台之间的竞争日益激烈。为了吸引和保留用户,许多电商平台开始探索和采用创新的商业模式。其中,“卷轴模式”作为一种结合了积分奖励和任务兑换机制的新颖模式,逐渐受到了业界的关注。本文将从技术…

智能提醒助理系列-小程序分享到朋友圈

本系列文章记录“智能提醒助理”wx公众号 建设历程,记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍微信小程序如何分享到朋友圈,以及遇到的登录无权限问题和解决方案。 一、需求出发点 智能提醒小程序的推广是一个难点,朋友圈是一个必要…

柯桥外语学习生活日语之与台风有关的日语表达

与台风有关的日语表达: 台風が近づいている (たいふうがちかづいている) - 台风正在靠近 台風が上陸する (たいふうがじょうりくする) - 台风登陆 台風の進路 (たいふうのしんろ) - 台风的路径 強い台風 (つよいたいふう) - 强烈的台风 台風の目 (たいふうのめ…

深度学习的模型知识点介绍和总结

关注公众号:『AI学习星球』 算法学习、4对1辅导、论文辅导或核心期刊可以通过公众号滴滴我 文章目录 1. 神经网络基础1.1 人工神经网络(ANN)1.2 介绍下激活函数 2. 卷积神经网络(CNN)2.1 卷积层2.2 池化层2.3 全连接层…

GoogleTest安装以及使用

文章目录 介绍Ubuntu安装centos7 安装gtest使用方法包含gtest/gtest.h头文件使用TEST()宏定义测试用例使用Google Test断言进行值检查使用RUN_ALL_TESTS()宏运行测试 测试代码 介绍 Google Test(也称为gtest)是Google开发的一个用于C的单元测试库。 它允…

OPenCV结构分析与形状描述符(5)查找图像中的连通组件的函数connectedComponents()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 connectedComponents 函数计算布尔图像的连通组件标签图像。 该函数接受一个具有4或8连通性的二值图像,并返回 N,即标签…

算法入门-深度优先搜索3

第六部分:深度优先搜索 112.路径总和(简单) 题目:给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果…

【QT Creator】基本使用

一、常见问题 解答可见以下链接: https://www.cnblogs.com/xia-weiwen/p/10074882.html#title3.1 ** 有关控制台选择构建套件缺失的解决方法可见以下链接 https://blog.csdn.net/xuxu_123_/article/details/131257928 二、如何创建第一个QT项目 第一步&#xf…

一文解答Swin Transformer + 代码【详解】

文章目录 1、Swin Transformer的介绍1.1 Swin Transformer解决图像问题的挑战1.2 Swin Transformer解决图像问题的方法 2、Swin Transformer的具体过程2.1 Patch Partition 和 Linear Embedding2.2 W-MSA、SW-MSA2.3 Swin Transformer代码解析2.3.1 代码解释 2.4 W-MSA和SW-MSA…

Elasticsearch入门安装

1、下载安装 (1)安装Elasticsearch 下载地址:https://www.elastic.co/cn/downloads/elasticsearch 解压后运行 /bin/elasticsearch.bat 运行后访问 http://127.0.0.1:9200/即可 ps1:若无法访问且控制台打印 received plaintex…

计算机基础之-TCP 别再问我啦

TCP 协议 格式及部分含义根据端口号找到上一层的进程如何解包-整个包长度 ACK应答机制序号-确认序号-实现TCP的可靠传输和流量控制:为什么要有两个字段(序号和确认序号)? 16位窗口大小-缓冲区流量控制16位紧急指针三次握手四次挥手为啥 TIME_WAIT 滑动窗口 协议 格式…

代码随想录冲冲冲 Day40 动态规划Part8

121. 买卖股票的最佳时机 dp[i][0] 代表第i天持有股票手上的金额 dp[i][1] 代表第i天不持有股票手上的金额 初始化: dp[0][0] 持有所以是-prices[0] dp[0][1] 不持有所以是0; 递推公式: dp[i][0] 既然是i天时持有,那么就是之前就持有&…

开放式耳机具备什么特点?2024排行前十的四款百元蓝牙耳机推荐

开放式耳机具有以下特点: 佩戴舒适: 开放式耳机通常不需要插入耳道,能减少对耳道的压迫和摩擦,长时间佩戴也不易产生闷热、疼痛或瘙痒等不适,对于耳道敏感或不喜欢入耳式耳机压迫感的人来说是很好的选择。 这类耳机…

无线通信里的一些参数(dB dBm RSRP RSRQ RSSI SIN) / 天线增益

目录 历史由来dB和dBmRSRP RSRQ RSSI SNRRSSI在实际测试环境中的应用天线增益 详细阅读: 一文搞懂dB、dBm、dBw、dBi的来龙去脉 无线通信中 RSRP RSRQ RSSI SINR的定义和区别 RSRP RSRQ RSSI SNR的含义和区别 历史由来 dB展开应写为decibel,其中“deci…

【震撼】8岁女孩用Cursor编程,你还在等什么

1. Cursor: 革新性的AI代码编辑器 1.1 Cursor的崛起 近期,AI驱动的代码编辑器Cursor在开发者社区中引起了广泛关注。其火爆程度不仅源于AI大咖Andrej Karpathy在社交平台X上的推荐,更因一则令人惊叹的新闻:一位年仅8岁的小女孩利用Cursor和其…

金士顿NV2 2TB假固态硬盘抢救记,RL6577/RTS5765DL量产工具,RTS5765DL+B47R扩容开卡修复

之前因为很长时间不买固态硬盘,没注意到NVME的固态盘也有了假货和扩容盘,花200多块买了个2TB的金士顿NV2固态硬盘,我原本以为NV1的假货最多是用黑片冒充正片,结果没想到NV2居然有扩容的。后来发现是扩容盘的时候,已经过…

C++ 音频

一、采样频率 当前主流的采样频率为22.05KHz、44.1KHz、48KHz 22.05KHz:为FM广播声音品质 44.1KHz:为理论上最高的CD声音品质(直播,录像,acc) 48KHz:人耳可分辨的最高采样频率 (…