机器学习--循环神经网络(RNN)1

一、简介

循环神经网络(Recurrent Neural Network)是深度学习领域中一种非常经典的网络结构,在现实生活中有着广泛的应用。以槽填充(slot filling)为例,如下图所示,假设订票系统听到用户说:“我想在 6 月 1 日抵达上海。”,系统有一些(slot):目的地和到达时间,系统要自动知道这边的每一个单词是属于哪一个槽,比如“上海”属于目的地槽,“6 月 1 号”属于到达时间槽。
在这里插入图片描述
这个问题可以用一个前馈神经网络(feedforward neural network)解决,如下图所示,输入是一个单词,把“上海”变成一个向量,“丢”到这个神经网络里面。要把一个单词丢到一个神经网络里面去,就必须把它变成一个向量。
在这里插入图片描述
把单词变成一个向量,我们又需要用到我们之前介绍过很多次的独热编码(向量的大小是词
典大小。每一个维度对应词典的一个单词。对应单词的维度为 1,其他为 0。)
在这里插入图片描述
这里会有一个问题:因为很多单词可能都没有见过,所以需要在独热编码里面多加维度,用一个维度代表 other,如下图所示。如果不是在词表中,有的单词就归类到 other 里面去。
在这里插入图片描述

我们可以用每一个单词的字母来表示它的向量,比如单词是 apple,apple 里面有出现 app、ple、ppl,在这个向量里面对应到 app、ple、ppl 的维度就是 1,其他都为 0。
在这里插入图片描述

假设把单词表示为向量,把这个向量丢到前馈神经网络里面去,在该任务里面,输出是一个概率分布,该概率分布代表着输入单词属于每一个槽的概率,比如“上海”属于目的地的概率和“上海”属于出发地的概率。
在这里插入图片描述

但是前馈网络会有问题,如下图所示,假设用户 1 说:“在 6 月 1 号抵达上海”。用户 2 说:“在 6 月 1 号离开上海”,这时候“上海”就变成了出发地。
在这里插入图片描述

但是对于神经网络,输入一样的东西,输出就应该是一样的东西。在例子中,输入“上海”,输出要么让目的地概率最高,要么让出发地概率最高。不能一会让出发地的概率最高,一会让目的地概率最高。

如果神经网络有记忆力的,它记得它看过“抵达”,在看到“上海”之前;或者它记得它已经看过“离开”,在看到“上海”之前。通过记忆力,它可以根据上下文产生不同的输出。如果让神经网络是有记忆力,其就可以解决输入不同的单词,输出不同的问题。

二、循环神经网络(RNN)

这种有记忆的神经网络称为循环神经网络。在 RNN 里面,每一次隐藏层的神经元产生输出的时候,该输出会被存到记忆元(memory cell)(可简称为单元),图中的蓝色方块表示记忆元。
在这里插入图片描述
下一次有输入时,这些神经元不仅会考虑输入 x1, x2,还会考虑存到记忆元里的值。x1, x2以及存在记忆元里的值 a1, a2 都会影响神经网络的输出。

举个例子,假设下图中的神经网络所有的权重都是 1(w=1),所有的神经元没有任何的偏置(bias)(b=0)。假设所有的激活函数都是线性的(y=x),输入是序列 [1, 1]T, [1, 1]T, [2, 2]T, · · · ,所有的权重都是 1。
把这个序列输入到神经网络里面去会发生什么事呢?要使用这个循环神经网络的时候,必须要给记忆元初始值,设初始值都为是 0。输入第一个 [1, 1]T,对左边的神经元(第一个隐藏层),其除了接到输入的 [1, 1]T,还接到了记忆元 (0 跟 0),输出就是 2。
简单解释一下计算过程:激活函数全是y=x,左边的神经元的输出等于两个输入经过激活函数得到的y,再加上两个记忆元中记录的值。
在这里插入图片描述
同理,右边神经元的输出为 2,第二层隐藏层输出(第一个隐藏层通过激活函数也是y=x,两个y相加)为 4。
接下来循环神经网络会将绿色神经元的输出存在记忆元里去,所以记忆元里面的值被更新为2。

如下图所示,接下来再输入 [1, 1]T,接下来绿色的神经元输入为 [1, 1]T、[2, 2]T,输出为 [6, 6]T,第二层的神经元输出为 [12, 12]T。所以因为循环神经网络有记忆元,就算输入相同,输出也可能不一样。
在这里插入图片描述

同样的过程,[6, 6]T 存到记忆元里去,接下来输入是 [2, 2]T,输出为 [16, 16]T;第二层隐藏层为 [32, 32]T。在做循环神经网络时,它会考虑序列的顺序,输入序列调换顺序之后输出不同。
在这里插入图片描述

三、RNN架构

还是用之前的例子,用户说:“我想在 6 月 1 日抵达上海”,“抵达”就变成了一个向量“丢”到神经网络里面去,神经网络的隐藏层的输出为向量 a1,a1产生“抵达”属于每一个槽填充的概率 y1。

接下来 a1 会被存到记忆元里面去,“上海”会变为输入,这个隐藏层会同时考虑“上海”这个输入和存在记忆元里面的 a1,得到 a2。根据 a2 得到y2,y2 是属于每一个槽填充的概率。(三次使用的相同的神经网络)
在这里插入图片描述

有了记忆元以后,输入同一个单词,希望输出不同的问题就有可能被解决。
如下图所示,同样是输入“上海”这个单词,但是因为红色“上海”前接了“离开”,绿色“上海”前接了“抵达”,“离开”和“抵达”的向量不一样,隐藏层的输出会不同,所以存在记忆元里面的值会不同。
虽然 x2的值是一样的,因为存在记忆元里面的值不同,所以隐藏层的输出会不同,所以最后的输出也就会不一样。
在这里插入图片描述

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

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

相关文章

关于vue3使用prop传动态参数时父子数据不同步更新问题

子: <template><div><h3>子组件</h3><input :value"modelValue" input"$emit(update:modelValue, $event.target.value)"></div> </template><script setup> import { defineProps, defineEmits } from …

P5635 【CSGRound1】天下第一

题目背景 天下第一的 cbw 以主席的身份在 8102 年统治全宇宙后&#xff0c;开始了自己休闲的生活&#xff0c;并邀请自己的好友每天都来和他做游戏。由于 cbw 想要显出自己平易近人&#xff0c;所以 zhouwc 虽然是一个蒟蒻&#xff0c;也有能和 cbw 玩游戏的机会。 题目描述 …

揭秘接口测试:完整流程指南!

在讲接口测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试&#xff0c;一般也是面试笔试必问。为方便大家更好的…

logstash和elasticsearch的几种交互接口

Logstash与Elasticsearch是两个非常流行的开源工具&#xff0c;用于处理和存储大量的日志数据。它们之间的集成非常重要&#xff0c;因为Logstash用于收集、处理和转换日志数据&#xff0c;而Elasticsearch用于存储、搜索和分析这些数据。在本文中&#xff0c;我们将详细介绍Lo…

【C/C++】常量指针与指针常量的深入解析与区分(什么是const int * 与 int * const ?)

目录 一、前言 二、const 的简单介绍 三、常量指针 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 四、指针常量 &#x1f50d;介绍与分析 &#x1f4f0;小结与记忆口诀 五、总结与提炼 六、共勉 一、前言 在【C/C】的编程中&#xff0c;指针与const关键字的组合…

防御保护IPSEC实验

要求&#xff1a;在FW5和FW3之间建立一条IPSEC通道&#xff0c;保证10.0.2.0/24网段可以正常访问到192.168.1.0/24. 因为是双机热备状态则只需要配置FW1主设备。 新建ACL待加密数据流 安全建议&#xff1a; IPSec参数配置 FW3配置如下与FW1类似&#xff1a; FW1中新建安全策略…

链表|19.删除链表的倒数第N个节点

力扣题目链接 struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {//定义虚拟头节点dummy 并初始化使其指向headstruct ListNode* dummy malloc(sizeof(struct ListNode));dummy->val 0;dummy->next head;//定义 fast slow 双指针struct ListNode* f…

论文汇总:Rectifying the Shortcut Learning of Background for Few-Shot Learning

原文解读&#xff1a; 论文解读&#xff1a;Rectifying the Shortcut Learning of Background for Few-Shot Learning-CSDN博客 文章汇总 问题&动机&解决方法 图像背景是一种有害知识的来源&#xff0c;这是少数镜头学习模型容易吸收的(问题) 通过在训练和评估中提…

TI IWR6843ISK ROS驱动程序搭建

1、设备准备 1.1 硬件设备 1&#xff09;TI IWR 6843 ISK 1块 2&#xff09;Micro USB 数据线 1条 1.2 系统环境 1&#xff09;VMware Workstation 15 Player 虚拟机 2&#xff09;Ubuntu18.04 并安装有 ROS1 系统 如若没有安装 ROS 系统&#xff0c;可通过如下指令进行…

uni-app navigateTo路由传参传递对象

传递参数 先通过JSON.stringify将对象转成字符串 toNextPage(obj) {uni.navigateTo({url:/pages/nextpage/index?obj${JSON.stringify(obj)}}); },接收参数 再通过JSON.parse将传递过来的字符串转成对象 onLoad(options) {this.obj JSON.parse(options.obj) }

【分库分表】基于mysql+shardingSphere的分库分表技术

目录 1.什么是分库分表 2.分片方法 3.测试数据 4.shardingSphere 4.1.介绍 4.2.sharding jdbc 4.3.sharding proxy 4.4.两者之间的对比 5.留个尾巴 1.什么是分库分表 分库分表是一种场景解决方案&#xff0c;它的出现是为了解决一些场景问题的&#xff0c;哪些场景喃…

微信小程序 - 组件wxml中slot

在组件的 wxml 中可以包含 slot 节点&#xff0c;用于承载组件使用者提供的 wxml 结构。 默认情况下&#xff0c;一个组件的 wxml 中只能有一个 slot 。需要使用多 slot 时&#xff0c;可以在组件 js 中声明启用。 Component(options: {multipleSlots: true // 在组件定义时的…

P1611 循环的数字

题目描述 你曾经因为看见一样的东西一遍又一遍地重复、循环而对电视节目感到厌烦么&#xff1f;好吧&#xff0c;虽然我并不关心电视节目的好坏&#xff0c;不过有时却也很像那样不断循环的数字。 让我们假定两个不同的正整数 (n,m) 是循环的&#xff0c;当且仅当你能通过将 …

Solidity攻击合约:“被偷走的资金”

在以太坊智能合约开发中&#xff0c;Solidity是最常用的编程语言。然而&#xff0c;由于代码编写不当或缺乏安全意识&#xff0c;合约可能面临各种攻击。本文将通过一个简单的Solidity合约示例&#xff0c;展示一个潜在的攻击合约&#xff0c;并分析其相对于原本合约的危害以及…

计算机设计大赛 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

024—pandas 将一列数据等份变形

前言 今天我们将一个 Series 序列数据转为 DataFrame结构。我们将用么 pd.cut() 对数据进行分箱&#xff0c;也会用到 NumPy 的 np.reshape() 对阵列数据进行变形。接下来我们看看具体的需求&#xff0c;再分析一下解决思路&#xff0c;最后用代码实现它。 需求&#xff1a; …

[MS5146T替代ADS1246T、MS5147替代ADS1247、MS5148T替代ADS1248] 2kSPS、24bit Σ-Δ ADC

[MS5146T替代ADS1246T、MS5147替代ADS1247、MS5148T替代ADS1248] 2kSPS、24bit Σ-Δ ADC 主要特点 ◼ 可编程转换速率&#xff1a;最高 2kSPS ◼ 集成输入多路选择器 ◼ PGA 噪声&#xff1a; 70nV(RMS)PGA128 ◼ 集成双路匹配可编程电流源 ◼ 集成低温漂 2.048…

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

GEE图像可视化常用函数

目录 图层操作Map.addLayer&#xff08;&#xff09;Map.centerObject&#xff08;&#xff09; 直方图ui.Chart.image.histogram&#xff08;&#xff09; 图层操作 Map.addLayer&#xff08;&#xff09; Map.addLayer 是 Google Earth Engine 中用于向地图添加图层的方法。…

C语言:数组、字符串知识点整理:

数组&#xff1a;&#xff08;长度的计算&#xff09; 补充&#xff1a;数组长度sizeof(arr)/sizeof(arr[0]) 注意&#xff1a;&#xff01;&#xff01;&#xff01;不适用于当arr 充当形参时&#xff08;函数传参&#xff09;&#xff01;&#xff01;&#xff01; 因为函数…