当前位置: 首页 > news >正文

深度学习之循环神经网络

视频链接:6 循环神经网络_哔哩哔哩_bilibili

给神经网络增加记忆能力

对全连接层而言,输入输出的维数固定,因此无法处理序列信息

对卷积层而言,因为卷积核的参数是共享的,所以卷积操作与序列的长度无关。但是因为卷积层的后面往往会跟着一些全连接层,从而导致卷积层的输出不能任意改变

这是一个有限状态自动机:遇到不同的输入会跳到另一个状态上去

从这不难看出,当前结果的输出不仅依赖于当前时刻的输入,还依赖于上一时刻所处的状态

这是一个图灵机:一种抽象的数学模型,可以用来模拟任何可计算问题

输出不单单依靠输入,同时也与控制器的行为、纸带上存下来的信息等有关,比起有限状态自动机更加复杂

对于有限状态机,我们可以改造前馈网络实现。但是对于更加复杂的图灵机就不能仅依靠改造前馈网络实现,而是需要引入记忆能力

当前的输入经过z延时单元就得到了上一时刻的信息

第一个隐藏层中的t-2是由输入层中的t-2与t-3得到的,t-1是由t-1、t-2、t-3得到的,t同理

自回归模型:w0是偏置,wk是权重,当前时刻的yt由前k个时刻的yt-k加权得到

非线性自回归模型:自回归模型没有外部输入,只是y自己预测自己。因此非线性自回归模型引入了非线性函数,x是输入,y是输出,做到了通过时间序列的输入与时间序列的输出一起预测

循环神经网络

通过上一时刻的状态与当前时刻的输入计算当前时刻的状态

Q:循环神经网络与时延神经网络和自回归模型在记忆方式上的差异?

A:循环神经网络(RNN)具有短期记忆能力,可以通过递归的方式对序列数据中的依赖关系进行建模。RNN 的记忆能力来源于网络中的递归结构,它能够记住最近几个时间点的输入信息。然而,随着时间的推移,RNN 的记忆能力会逐渐减弱。
时延神经网络(DTNN)具有长期记忆能力,它通过在时间轴上增加延迟连接来实现对长期依赖关系的建模。DTNN 可以在一定程度上克服 RNN 记忆能力有限的问题,但由于其结构复杂,训练和计算成本较高。
自回归模型(AR)是一种基于 AR 过程的线性模型,它通过自回归系数矩阵来描述过去时刻观测值之间的依赖关系。AR 模型可以看作是一种特殊的 DTNN,其记忆能力取决于自回归系数矩阵的规模。


RNN在时间维度上是很深的网络,但是在非时间维度上却是很浅的网络。因为在时间维度上过深,所以需要考虑梯度消失的问题;因为在非时间维度上过浅,所以需要考虑增加模型的复杂度

如果我们认为前馈神经网络可以模拟任何函数的话,那么循环神经网络就可以模拟任何程序

应用到机器学习

序列到类别

两种常见的方法:

情感分类

因为文本是一个变长的序列,把每个字看成不同时刻的输入(一个词向量),所以可以使用RNN

把不同字的状态拼到一起送到分类器中得到不同的结果

同步的序列到序列模式

输入一个序列,输出一个序列,且输入输出之间有对应关系

中文分词

把一句话以词为单位分隔开

示例中的这句话分词应为:他说的,确实,在理

但是在中文中,的确是一个词,实在是一个词,词语分隔存在歧义性

在机器学习中我们把这个任务变成一个序列标注的任务,S表示单个词语,B表示一个词语的开始,E表示一个词语的结束

在RNN中我们直接把词向量输入RNN得到结果就行了

信息抽取

CRF是条件随机场

抽取小米——品牌,雷军——人名,2015年——时间等信息

语音识别

异步的序列到序列模式

左边输入x得到状态,可以看作是编码器encoder

EOS表示上一个序列的结束

右边的状态是通过上一时刻的状态与上一时刻的输出得到的,没有输入x,可以看作是解码器decoder

右边y影响h,是自回归的方法,h影响h是RNN的方法

机器翻译

参数学习与长程依赖问题

随时间反向传播

对误差在时间维度上求和就得到了总误差,因此反向传播时也可分为不同时刻的反向传播结果U的结果求和

Lt对U求偏导,就是第t时刻的loss对(第k时刻的zk的导数)*(上一时刻隐藏状态的转置)求和

按照链式法则展开为上图所示

长程依赖问题

将链式法则求出的式子继续展开得到(t-k个激活函数的导数的对角矩阵乘U的转置)再乘Lt对zt的偏导

由于f'(zτ)是一个有界函数,U是共享的参数,所以把他们近似看作γ

因此δt,k近似等于γ^t-kδt,t,当γ>1时,若t时刻距离k时刻很长,则会梯度爆炸,反之则会梯度消失,所以实际上只能学到短周期的时间依赖关系

如何解决长程依赖问题

我们希望γ=1,首先把f的非线性f去掉,也就是让ht=Uht-1+Wxt+b,这样使得f’为1。接下来把U变成1也就是单位矩阵,因此ht=ht-1+Wxt+b,此时的γ=1

如图所示,激活函数g是对Wxt+b引入非线性,但是由于ht-1与ht之间变成了线性关系,导致模型能力变差

进一步改进,后面的g(xt,ht-1;θ)其实就是原来的f(Uht-1+Wxt+b),这样改进既保留了非线性,又解决了梯度的问题

当激活函数g选取sigmoid、relu等一直为正的激活函数,加上ht-1是一个累计的状态(不断增大)

例如当激活函数为sigmoid时,由于h不断累计,导致g(xt,ht-1;θ)趋近0或1而出现梯度消失,从而导致难以向网络增加新的信息。因此我们可以在ht-1中选择性地丢弃一些信息,接下来会给大家介绍两种基于门控的方法

残差:如果把g(xt,ht-1;θ)中的xt去掉,得到ht = g(ht-1;θ),这个式子与残差网络是十分相似的,都解决了梯度消失的问题

GRU与LSTM

GRU

zt是一个与h维度相同的向量,每一维都在0~1之间,用sigmoid激活函数

g用得到是tanh激活函数,将0~1变成-1~1,且梯度更大一些

当zt接近1时,ht的信息更多来自于ht-1;当zt接近0,ht的信息更多来自于xt

若想要ht的信息只来源于xt,则可以加一个rt在ht-1之前

LSTM

引入了内部记忆单元c,通过c进行记忆线性的传递,把h释放出来更好地去做非线性

i是input gate,决定加入多少新信息

f是forget gate,决定遗忘多少旧信息

o是output gate,决定输出多少信息

深层循环神经网络

虽然循环神经网络在时间维度上可以认为是一个非常深的网络,但在非线性维度上是非常浅的,我们希望把它加深,看看模型能力有没有提升

堆叠循环神经网络

时间维度上是对齐的

变式

可以使某个状态来自于下一层所有时刻的状态

也可以使某个状态来自于上一时刻的所有层

双向循环神经网络

对输入的时序数据,既可以从左往右建模,也可以从右往左建模,好处是得到了双向的信息与趋势,模型效果更好

Q:如何增加循环神经网络的并行能力?

A:

双向循环神经网络(BRNN):BRNN 通过在输入层引入未来信息,使得网络可以同时利用过去和未来的数据。这种结构在处理自然语言处理、语音识别等任务时具有较好的性能。BRNN 可以在一定程度上提高并行计算能力,但仍然受到循环连接的限制。
增加网络层数:通过增加网络层数,可以降低梯度消失和梯度爆炸的问题,提高模型性能。同时,深度循环神经网络具有较强的并行计算能力,因为大部分计算可以在各层之间并行进行。
跳步连接(skip connection):在循环神经网络中引入跳步连接,可以使得网络在训练过程中更快地收敛,并提高模型的并行计算能力。跳步连接使得网络可以在不同层之间直接传递信息,减少了梯度消失问题,同时提高了并行处理能力。
分离式循环神经网络(Separable Recurrent Neural Network,SRNN):SRNN 将循环神经网络的内部循环结构分离成两个独立的子网络,一个负责处理过去信息,另一个负责处理未来信息。这种结构在训练和预测过程中可以实现部分并行计算,提高网络的性能。
准并行循环神经网络(Quasi-Parallel Recurrent Neural Network,QPRNN):QPRNN 采用一种准并行的结构,将循环神经网络中的递归关系用多个并行子网络表示。这种结构可以在一定程度上提高并行计算能力,但仍然受到梯度消失和梯度爆炸问题的限制。
内存增强神经网络(Memory-Augmented Neural Network,MANN):MANN 在循环神经网络中引入了一种新型内存模块,用于存储和检索相关信息。这种结构可以提高网络的并行计算能力,同时增强了对长序列数据的处理能力。
转换器架构(Transformer):转换器架构是一种基于自注意力机制的深度神经网络,其在自然语言处理等领域取得了显著的成果。虽然转换器并非典型的循环神经网络,但其在并行计算方面具有很强的能力。通过将循环神经网络与转换器相结合,可以进一步提高网络的并行能力。

循环神经网络应用

扩展到图结构

树结构

递归神经网络把循环神经网络从序列结构扩展到树结构

应用到自然能语言上:

先将red与bike组合,再与a组合

图结构

在实际应用中,很多数据是图结构的,比如知识图谱、社交网络、分子网络等。而前馈网络和循环网络很难处理图结构的数据

v是结点向量、e是边向量、u是全局向量

图的更新步骤为:

(1)更新边:通过边所连的两点与u更新

(2)更新点:通过所有指向该点的边与u更新

(3)更新u

mt(v)是指v收到的信息,ht-1是上一时刻的状态,u是v的所有邻居结点

相关文章:

深度学习之循环神经网络

视频链接:6 循环神经网络_哔哩哔哩_bilibili 给神经网络增加记忆能力 对全连接层而言,输入输出的维数固定,因此无法处理序列信息 对卷积层而言,因为卷积核的参数是共享的,所以卷积操作与序列的长度无关。但是因为卷积…...

与原有视频会议系统对接

要实现与原有视频会议系统对接,需要确保通信协议的一致性。连通宝视频会议系统可与第三方视频会议系统对接。实现与第三方会议系统对接还可以使用会议室连接器,可以确保不同系统之间的数据传输和交互。 具体对接流程可能因不同品牌和类型的视频会议系统而…...

C# Serilog--可记录异常完整路径

1.Serilog安装 2.控制台代码 --设置日志记录器的最小级别为 Debug,即只记录 Debug 级别及以上的日志信息 --.WriteTo.File("logs\\log.txt", rollingInterval: RollingInterval.Day):将日志信息写入到指定路径的文件中(这里的路径…...

鉴源实验室 | 汽车网络安全攻击实例解析(三)

作者 | 张璇 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言:随着现代汽车技术的迅速发展,车辆的进入和启动方式经历了显著的演变。传统的物理钥匙逐渐被无钥匙进…...

php 中生成订单号

字母日期。。。。。。。 function setOrderNo($year 2011) {$yCode array(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);$orderSn $yCode[intval(date(Y)) - $year] . strtoupper(dechex(date(m))) . date(d) . substr(time(), -5) . s…...

Jmeter工具+ant+jenkins实现持续集成

jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具,并配置好环境变量;参考: jmeter默认保存的是.jtl格式的文件,要设置一下bin/jmeter.properties,文件内容,保存jmeter.save.saveservice.output_f…...

基于SSM的经典电影推荐网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...

JavaScript中使用JSON的基本操作示例

简介 JSON(JavaScript Object Notation)是一种数据交换格式,也是JavaScript中处理数据的常见方式之一。JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于解析和生成。在JavaScript中,可以使用内…...

上拉、下拉电阻的作用

上拉、下拉电阻的作用 (1)一般作为单键触发使用,如果芯片本身没有内接电阻,为了使单键维持在不被触发的状态或触发后回到原状态,必须在芯片外部接一个电阻,即保持芯片引脚高电平(或低电平)输入,这样单击按键…...

docker部署elasticsearch+kibana+head

前言 最近,项目需要使用elasticsearch,所以就想快速安装一个使用,最开始是docker安装了7.10.1版本。 后面计划使用Java开发,发现有 RestHighLevelClient 和 Elasticsearch Java API Client两种客户端连接方式。 然后网上查阅了一…...

Linux:vim的简单使用

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、vim的基本概念二、vim的基本操作三、vim正常模式命令集四、vim底行模式命令集五、.xxx.swp的解决总结 前言 本文是对Linux中vim使用的总结 一、vim的基本概念 …...

Python---文件和文件夹操作

os模块 在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下: 第一步:导入os模块 import os 第二步:调用os模块中的相关方法 os.函数名() 与文件操作相关方法 编号函数功能1os.rename(目标文件名称&…...

electron-vue运用及案例代码

前言 Electron是一个使用JavaScript, HTML和CSS构建跨平台桌面应用程序的开源库。它允许开发者使用纯web技术创建原生应用程序,这使得web开发者能够利用他们已经掌握的web技术来构建桌面应用。 以下是一个简单的Electron应用程序的代码示例: // 引入Electron的主模块 co…...

视频字幕处理+AI绘画,Runway 全功能超详细使用教程(4)

runway的视频字幕处理、AI绘图功能介绍,感觉完全就是为了做电影而布局,一整套功能都上线了!想系统学习的必收藏! 在深度研究Runway各个功能后,无论是AI视频生成及后期处理技术,还是AI图像生成技术&#xff…...

令人疑惑的Promise相关问题

令人疑惑的Promise相关问题 问题1 const promise new Promise((resolve, reject) > {reject(Error(Error occurred)); });promise.catch(error > console.log(error.message)); promise.catch(error > console.log(error.message));输出: Error occurr…...

Spring 多数据源搭建

目录 前言 正文 1.Druid 介绍和使用 2.其他多数据源解决方案 总结 前言 对于复杂的业务和项目,可能在一个单体项目中存在需要连接多个数据库的情况。这时,就会使用到多数据源,实际中遇到的可能性比较大。 正文 如果一个项目中需要连…...

【二分查找】LeetCode1970:你能穿过矩阵的最后一天

本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你一个下标从 1 开始的二进制矩阵,其中 0 表示陆地,1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。 一开始在第 0 …...

利用python连接MySQL数据库并执行相关sql操作

一、新建MySQL数据库 1.启动MySQL服务 打开phpstudy,开启MySQL服务。如果开启失败的话,可以打开任务管理器,把正在运行的mysqld服务的进程进行关闭,再次打开MySQL服务即可启动。 2.新建MySQL数据库 选择数据库,点击…...

jenkins配置

branch: "dev" 切换分支 $WORKSPACE: /var/lib/jenkins/workspace/jenkins任务名 dest_passwd服务器密码 变量 sudo sshpass -p $dest_passwd ssh root192.168.211.319 -tt rm -rf /data/patent/*:删除文件/data/patent/* sudo sshpa…...

LeNet对MNIST 数据集中的图像进行分类--keras实现

我们将训练一个卷积神经网络来对 MNIST 数据库中的图像进行分类,可以与前面所提到的CNN实现对比CNN对 MNIST 数据库中的图像进行分类-CSDN博客 加载 MNIST 数据库 MNIST 是机器学习领域最著名的数据集之一。 它有 70,000 张手写数字图像 - 下载非常简单 - 图像尺…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...