循环神经网络三

一.介绍

在普通的神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,单在一定程度上也减弱了神经网络模型的能力。特别是在现实生活中,网络的输出不仅和当前时刻的输入相关,也过去一段时间的输出相关。此外,普通网络难以处理时序任务,比如语言,视频,文本等等,时序数据的长度一般是不固定的,而前馈神经网络要求和输出的维数都是固定的,不能任意改变。所以处理这一类时序相关的问题时,需要一种能力更强的模型

循环神经网络(Recurrent Neural Network,RNN )是一类具有短期记忆的神经网络。在循环神经网络中,神经元不仅可以接收其他神经元的信息,还可以接收自身的信息,形成具有环路的网络结构。

 可以看到RNN比传统的审计网络多了一个循环,这个循环表示在下一个时间步上会返回作为输入的一部分,把RNN时间点展开就是:

就是在t_0时刻x_0输入后返回h_0的同时将h_0当成输入和下一个时间点的x_1一起输入,如此反复 

或者是:当x_t-1输入后返回的结果h_t-1和x_t一起当作输入后通过tanh计算后输出h_t同时向下一个时间点输入h_t

在不同的时间步中,RNN的输入都与之前的时间状态有关,t_n时刻网络的输出和之前的所有历史共同作用的结果。

 

 图1:固定长度的输入和输出,比如图像分类

图2:序列输入,输入一个数据,逐渐分析结果,比如图像转文字

图3:数列输入,输入一些数据,总结后得出结果,比如文本分类

图4:异步的序列输入和输出,比如文本翻译

图5:同步的序列输入和输出,比如根据视频的每一帧来对视频分类

二.LSTM

1.LSTM的基础介绍

假如现在有一个文本预测,比如天上的云朵漂浮在__,通过间隔不愿的位置可以预测到答案是天上。但是对于有些句子,答案可能在很远的位置,间隔非常大,随着间隔的增大对于RNN来说,效果就不怎么好了。而LSTM(Long Short-Term Memory)可以解决这个问题,LSTM是RNN的一种特殊类型,可以长期依赖信息,而RNN只能短期的依赖。

其中x表示相乘,+表示相加,\sigma表示使用某个函数

2.LSYM的核心

LSTM的核心在于单元中的状态,也就是图中最上边那根弦。

如果只要这跟线,那么就不能对信息增加或者删除,所以在LSTM是通过一个叫做门的结构实现的,门可以选择让信息通过或者不通过

这个门主要是通过sigmoid和点乘实现的

sigmoid函数的结果是在0-1之间的,如果结果为0那么就不让这个信息通过,如果是1就全部通过

3.遗忘门

遗忘门是通过sigmoid函数实现的,用来决定哪些信息保留,哪些信息遗忘。

下图就是h_t-1和x_t进行合并后乘上权重和偏置然后通过sigmoid函数,输入一个0-1之间的值,这个值会和前一个细胞输出的状态c_t-1进行点乘,从而决定是遗忘还是保留

4.输入门

i_i是sigmoid函数后,结果在0-1之间,决定哪些信息会被更新,tanh会创造一个新的候选量C_t如果i_i不是0的话可能会添加到细胞中,比如昨天我吃了苹果,今天我想吃梨,通过遗忘门可以遗忘掉苹果,通过输入门可以输入梨。

经过输入门后就可以更新细胞状态了,C_t-1更新为C_t。怎样更新呢

1.旧的细胞状态和遗忘门的结果相乘

2.然后加上输入门和tanh相乘的结果

5.输出门

最后,我们需要决定哪些信息会被输出,和输入门差不多,线通过sigmoid函数结果来决定哪些细胞状态会被输出

1.前一次的输出结果h_t-1和当前时间步输入的x_t组和通过sigmoid函数进行处理后结果

2.在输入门的时候更新过的细胞状态C_t会经过tanh层的处理将数据转换到(-1,1)之间

3.将1和2的结果点乘后得到结果,一个输入结果,一个输入到下一个时间步的结果

三.GPU

GRU(Gated Recurrent Unit),是一种LSTM的变形版本,它将遗忘门和输入门组合成一个“更新门”。它还合并了单元状态和隐藏状态,并进行了一些更改。

1.z_t就是上一次的结果和这一次的数据通过sigmoid函数后的结果

2.r_t和z_t一样

3.h_t一把是r_t和上一次的结果h_t-1点乘后于x_t组合后通过tanh后的结果

4.h_t是z_t通过1-后点乘上一次的结果后加上z_t点乘上h_t一把的结果

r_t到z_t是更新门,而后面的就是输入出门

四.双向LSTM

结合上面的例子,都是对前面的结果进行计算,而一个词语填空有些时候也要看后面的数据。那么就需要有一种计制,能够使模型不仅能够从前面获得记忆,还要从后获得记忆。此时就要用到双向LSTM了。

从图中可以看出,没给x的输入后不仅得到了结果,这个结果还传到了下一个时间步中计算,而且还生成了一个LSTM_b的结果,因为LSTM_0的箭头是从后往前的,所以使得当前这个时步同时拥有了前后的数据。

都看到这里了,一键三连呗!!!

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

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

相关文章

Typora 伪装 LaTeX 中文样式主题 学习笔记

最近发现一个比较有意思的项目,Typora 伪装 LaTeX 中文样式主题 用来写毕设论文的初稿,格式可以统一控制,比较方便。项目“第五章”源格式是“5 系统测试”靠左,就像5.1一样。搜索了一下获得了一些零散的知识点记下来。 在Typora的…

Linux C 程序 【04】线程分离

1.开发背景 Linux 线程区分于FreeRTOS,线程的属性形态有2中,在 pthread.h 中有注解,如下。 /* Detach state. */ enum {PTHREAD_CREATE_JOINABLE, #define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLEPTHREAD_CREATE_DETACHED #defin…

Jenkins保姆笔记(2)——基于Java8的Jenkins插件安装

前面我们介绍过: Jenkins保姆笔记(1)——基于Java8的Jenkins安装部署 本篇主要介绍下基于Java8的Jenkins插件安装。为什么要单独讲一个插件安装?因为一些原因,Jenkins自带的插件源下载几乎都会失败,如图…

【vulhub靶场之thinkphp】——(5-rce)

第一步:打开靶场 输入开启命令 cd vulhub/thinkphp/5-rce docker-compose up -d docker-compose ps//查看开启的端口 第二步: 访问网址 第三步:漏洞利用 漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖&am…

24/8/6算法笔记 支持向量机

支持向量机(Support Vector Machine, SVM)是一种监督学习算法,主要用于分类和回归任务。它基于统计学习理论中的结构风险最小化原理,通过找到数据点之间的最优边界来实现模型的泛化能力。 import numpy as np import matplotlib.…

Android 下载安装配置

文章目录 Android Studio 下载安装配置1. 下载JDK2. JDK环境配置:3. 测试JDK是否安装成功:4. 下载Android Studio:5. 配置Android Studio:6. android studio提速方法1(不行)方法2:(很行) Android Studio 下…

STL容器之vector

1.vector的介绍及使用 1.1vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可…

快速基于 ClickHouse + Grafana 搭建可观测性解决方案 - 分布式链路追踪篇(ClickHouse 官方博客)...

引言 在 ClickHouse,我们认为可观测性仅仅是另一个实时分析问题。作为一款高性能的实时分析数据库,ClickHouse 被用于多种场景,包括时间序列数据的实时分析。其应用场景的多样性推动了大量分析函数的发展,这些函数有助于查询大多数…

【Python】PyWebIO 初体验:用 Python 写网页

目录 前言1 使用方法1.1 安装 Pywebio1.2 输出内容1.3 输入内容 2 示例程序2.1 BMI 计算器2.2 Markdown 编辑器2.3 聊天室2.4 五子棋 前言 前两天正在逛 Github,偶然看到一个很有意思的项目:PyWebIo。 这是一个 Python 第三方库,可以只用 P…

Atcoder Beginner Contest 366

传送门 A - Election 2 时间限制:2秒 内存限制:1024MB 分数:100分 问题描述 在 AtCoder 市举行市长选举。候选人是 Takahashi 和 Aoki。 目前有 N 张有效选票投给了这两个候选人,并且计票正在进行中。这里&#xff0…

配置Cuttlefish 虚拟 Android 设备

google 参考资料: https://source.android.com/docs/setup/start?hlzh-cn https://source.android.com/docs/devices/cuttlefish/get-started?hlzh-cn Cuttlefish 开始 验证 KVM 可用性 Cuttlefish 是一种虚拟设备,依赖于宿主机上可用的虚拟化。 …

Laravel 使用Excel导出的文件中,指定列数据格式为日期,方便后期的数据筛选操作

背景 最近,后台运营人员要求导出的 Excel 文件, 要求能够满足对于 [下单日期] 的筛选操作,即满足在年份、月份上的选择 通过了解,发现: 先前导出的文件,默认列数据都是字符串(文本)格…

bia文件中码偏差对实时PPP解算分析

1. 码偏差对定位影响 码偏差对未知收敛时间有影响,对最终精度影响不大(权比1000:1)

前端工程化14-git merge 以及 git rebase。

rebase会把当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像从公共分支又重新拉出来这个分支一样。 举例: 如果从 master 拉个feature分支出来,然后提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的…

【Hot100】LeetCode—295. 数据流的中位数

目录 1- 思路① 添加元素实现② 计算实现 2- 实现⭐295. 数据流的中位数——题解思路 原题链接:295. 数据流的中位数 1- 思路 利用优先级队列实现一个大顶堆和一个小顶堆大顶堆用来存放较小的元素,小顶堆用来存放较大的元素 ① 添加元素实现 如果当前…

JVM知识总结(双亲委派机制)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 双亲委派机制 双亲委派类加载过程 当App尝试加载一个类时&#x…

haproxy基础

HAProxy (High Availability Proxy) 是一款强大的开源负载均衡器和代理服务器。它主要用于提高 Web 应用程序和服务的可用性和性能。HAProxy 可以在 TCP 和 HTTP 层面上工作,并且支持多种负载均衡算法,广泛应用于高流量网站和大型分布式系统中。 社区版…

【数学建模】简单的优化模型-6 血管分支

背景:机体提供能量维持血液在血管中的流动,给血管壁以营养;克服血液流动的阻力,能量消耗与血管的几何形状有关。在长期进化中动物血管的几何形状已经在能量消耗最小原则下达到最优化。 问题:在能量消耗最小原则下&…

现代卷积神经网络

经典的CNN架构 一、早期的CNN架构 LeNet LeNet,(也称为LeNet-5,5代表使用了2个卷积层和3个全连接层)是一个经典的卷积神经网络架构,最初由Yann LeCun等人开发用于MNIST数据集手写数字(灰度图像 输入通道…

nuPlan环境配置和开环及闭环评测

环境配置 下载nuplan mini 数据集 nuPlan Maps nuPlan Mini Split 解压并按照制定目录结构存储 ./nuplan/ |-- maps -- nuplan-v1.1-- splits-- mini为了不修改代码, 需软链目录 ln -s ./nuplan /data/sets/ 下载nuplan镜像 docker pull horizonrobotics/nuplan:cuda11.8.0…