动手学习深度学习-现代循环神经网络

news2024/11/17 14:34:26

门控循环单元(GRU)

重置门和更新门
重置门(Reset Gate)和更新门(Update Gate)是循环神经网络(Recurrent Neural Network, RNN)的变体之一,门控循环单元(Gated Recurrent Unit, GRU)中的两个关键概念。GRU被设计用来解决传统RNN在处理长序列数据时的梯度消失问题。这两个“门”的主要功能是控制信息的流动,即决定在序列数据处理中保留多少旧信息(如过去的状态)和接收多少新信息。
重置门(Reset Gate)
重置门负责决定多少过去的信息需要被遗忘。它是一个介于0到1之间的值,通过一个sigmoid激活函数来调节。当重置门接近0时,模型会“忘记”较多的过去信息;而当接近1时,则保留更多的过去信息。这有助于模型在处理序列数据时动态地保留重要的历史信息,同时忘记不重要的信息。
更新门(Update Gate)
更新门则用于控制模型应该多大程度上考虑当前单元的新信息(当前输入)与上一个单元的旧信息(过去的状态)。它同样是一个介于0到1之间的值,并通过sigmoid激活函数得出。更新门帮助模型决定在当前状态下应该保留多少之前的信息和引入多少新的信息,从而使模型在处理不同类型的序列数据时保持灵活性。
重置门和更新门的结合使得GRU在处理例如时间序列数据、自然语言处理等需要记忆长期依赖关系的任务时更加有效和强大。通过这两个门的协调工作,GRU能够更好地捕捉序列数据中的时间动态特征,并减轻梯度消失的问题。
门控循环单元具有下面两个显著特征:
重置门有助于捕获序列中的短期依赖关系。
更新门有助于捕获序列中的长期依赖关系。

门控循环单元代码:
这段代码是一个门控循环单元(GRU)的实现,用于处理序列数据。GRU是一种特殊类型的循环神经网络(RNN),用于处理例如时间序列数据或自然语言等序列化信息。以下是这段代码的逐行解读:
函数定义:

def gru(inputs, state, params):

这定义了一个名为 gru 的函数,接收三个参数:inputs(输入数据序列),state(初始状态),params(GRU层的参数)。
参数解包:

W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = params

这行代码将 params 中的参数解包到GRU的各个权重和偏置中。这些包括更新门(z)的权重和偏置 (W_xz, W_hz, b_z),重置门(r)的权重和偏置 (W_xr, W_hr, b_r),以及候选隐藏状态(h)的权重和偏置 (W_xh, W_hh, b_h)
初始化隐藏状态和输出列表:

H, = state
outputs = []

这里初始化了隐藏状态 H 和用于存储输出的列表 outputs。
循环处理输入序列:

for X in inputs:

对于输入序列中的每个元素 X,执行以下步骤。

Z = torch.sigmoid((X @ W_xz) + (H @ W_hz) + b_z)
R = torch.sigmoid((X @ W_xr) + (H @ W_hr) + b_r)

计算候选隐藏状态(H~)

H_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h)

计算候选隐藏状态 H_tilda,使用tanh激活函数。
更新隐藏状态(H):

H = Z * H + (1 - Z) * H_tilda

使用更新门 Z 来融合旧的隐藏状态 H 和新的候选隐藏状态 H_tilda。
计算输出(Y):

Y = H @ W_hq + b_q
outputs.append(Y)

基于当前的隐藏状态 H 计算当前时间步的输出 Y,并将其添加到输出列表中。

长短期记忆网络(LSTM)

long short-term memory
长短期记忆网络设计的灵感来自于计算机的逻辑门。
长短期记忆中中引入了记忆元,为了控制记忆元,我们需要许多门:输入门,忘记门,输出门

在这里插入图片描述
对上面代码的解读
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在上面这段代码中,变量HC分别表示隐状态和记忆元。
在这里插入图片描述

小结
长短期记忆网络有三种类型的门:输入门,遗忘门,和输出门。
长短期记忆网络的隐藏层输出包括“隐状态“和“记忆元“。只有隐状态会传递到输出层,而记忆元完全属于内部信息。
长短期记忆网络可以缓解梯度消失和梯度爆炸。

深度循环神经网络

简介实现

import torch
from torch import nn
from d2l import torch as d2l
batch_size,num_steps = 32 , 35
train_iter , vocab = d2l.load_data_time_machine(batch_size,num_steps)

vocab_size , num_hiddens , num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = d2l.try_gpu()
lstm_layer = nn.LSTM(num_inpyts, num_hiddens, num_layers)
model = d2l.RNNModel(lstm_layer,len(vocab))
model = model.to(device)

小结
在深度循环神经网络中,隐状态的信息被传递到当前层的下一时间步和下一层的当前时间步。
有许多不同风格的深度循环神经网络,如长短期记忆网络,门控循环单元,或经典循环神经网络。这些模型在深度学习框架的高级api中都有涵盖。

双向循环神经网络

双向循环神经网络(Bidirectional Recurrent Neural Network, BiRNN)是循环神经网络(RNN)的一种变体,它的核心思想是在处理序列数据时,网络不仅从前到后(正向)处理信息,同时也从后到前(反向)处理信息。这种结构使得双向RNN能够在每个时间点上同时获得过去和未来的信息。

基本概念
双向处理在双向RNN中,序列数据被两个独立的RNN同时处理。一个RNN沿着时间正向传播,另一个沿着时间反向传播。
信息合并:每个时间点上,两个方向的RNN的输出被结合起来,以便于捕捉序列中的前后依赖关系。

工作原理
在每个时间步,正向RNN处理当前元素及之前的历史信息,而反向RNN处理当前元素及之后的未来信息。
然后,这两个方向的信息被结合起来,形成该时间步的最终输出。

优点
更丰富的信息:由于能够同时考虑到序列中的前文和后文信息,双向RNN在很多任务中比单向RNN表现得更好。
适用于各类序列数据:特别适合于需要同时考虑上下文信息的任务,如文本分类、语言建模、语音识别等。
挑战
计算成本更高:双向RNN需要更多的计算资源,因为它实际上是同时训练两个RNN。
训练数据要求:双向RNN在计算每个时间步的输出时需要整个序列的信息,这意味着它不能像单向RNN那样适用于实时或在线处理任务。

双向循环神经网络不适合做推理,适合对句子做特征提取。

隐马尔可夫模型中的动态规划

在马尔可夫模型中引入动态规划主要是让模型避免对所有可能状态的穷举搜索,使得计算变得可行和高效。

双向循环神经网络利用过去的信息和未来的信息来预测当前的信息。

小结

  • 双向循环神经网络中,每个时间步的隐状态由当前时间步的前后数据同时决定。
  • 双向循环神经网络与概率图模型中的“前向-后向“算法具有相似性。
  • 双向循环神经网络重要用于序列编码和给定双向上下文的观测预计。
  • 由于梯度链更长,因此双向循环神经网络的训练代价很高。

机器翻译与数据集

在机器翻译中,一般使用单词级词元化。

  • 机器翻译指的是将文本序列从一种语言自动翻译成另一种语言。
  • 使用单词级词元化时的词表大小,将明显大于使用字符级词元化时的词表大小。为了缓解这一问题,我们可以将低频词元视为相同的未知词元。
  • 通过截断和填充文本序列,可以保证所有的文本序列都具有相同的长度,以便以小批量的方式加载。

编码器-解码器架构

  • "编码器-解码器"架构可以将长度可变的序列作为输入和输出,因此适用于机器翻译等序列转换问题。
  • 编码器将长度可变的序列作为输入,并将其转换为具有固定形状的编码状态。
  • 解码器将具有固定形状的编码状态映射为长度可变的序列。

序列到序列学习(seq2seq)

使用两个循环神经网络的编码器和解码器,将其应用于序列到序列类的学习任务。

  • 根据“编码器-解码器“架构的设计,我们可以使用两个循环神经网络来设计一个序列到序列学习的模型。
  • 在实现编码器和解码器时,我们可以使用多层循环神经网路。
  • 我们可以使用遮蔽来过滤不相关的计算,例如在计算损失时。
  • 在"编码器-解码器"训练中,强制教学方法将原始输出序列(而非预测结果)输入解码器。
  • BLEU是一种常用的评估方法,它通过测量预测序列和标签序列之间的元语法的匹配度来评估预测。

束搜索

  • 序列搜索策略包括贪心搜索,穷举搜索和束搜索。
  • 贪心搜索所选取序列的计算量最小,但精度相对较低。
  • 穷举搜索所选取序列的精度最高,但计算量最大。
  • 束搜索通过灵活选择束款。在正确率和计算代价之间进行权衡。

束搜索每一步都有一个束宽,就是候选状态的数量,每次计算出一个值(可能是概率或者其他值)。
选取这个值的前几名作为候选状态。
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

qiankun中子系统变化透传到主系统调用主系统方法

1、首先在主系统中qiankun启动前把变动的参数初始化 2、初始化之后就可以通过全局状态通信把参数透传为全局 3、在微应用子系统main.js的qiankun的mount中获取到全局设备参数属性并是设置为子系统全局 4、在微应用子系统中需要去调主系统方法时就在那个地方改变透传过来的参数 …

Rust语言基础语法使用

1.安装开发工具: RustRover JetBrains: Essential tools for software developers and teams 下载: RustRover: Rust IDE by JetBrains 下载成功后安装并启动RustRover 安装中文语言包插件 重启RustRover生效

Java毕业设计—vue+SpringBoot图书借阅管理系统

图书管理系统 1. 开发目的 实现图书的智能化、信息化和简单化;实现图书信息的增加、删除、修改、查找、借阅、还书、收藏的显示操作及实时数据库的提交和更改和对普通用户的增、删、改、查;提高图书管理员工作信息报送及反馈的工作效率,减轻…

【文末送书】拥抱人工智能

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

vcpkg下载及安装

文章目录 vcpkg是什么vcpkg的优势Windows环境下的下载及安装1.下载 Linux环境下的下载及安装常用命令介绍1.1.1 设置默认安装的平台1.1.2可选步骤,将vcpkg与Visual Studio配合使用(需要管理员权限)1.1.3 软件包升级1.1.4 查找安装软件包1.1.5…

linux下time与dd命令结合测试存储器速度

在Linux中,"time"和"dd"命令是两个独立的命令,它们可以结合使用来测量"dd"命令执行的时间。 下面是它们的简要说明: time命令: "time"命令用于测量命令执行的时间和资源使用情况。它可以…

数据库传奇:MySQL创世之父的两千金My、Maria

《数据库传奇:MySQL创世之父的两千金My、Maria》 一、前言 MySQL是一款备受欢迎的关系型数据库管理系统(RDBMS),最初由瑞典公司MySQL AB开发,目前隶属于Oracle Corporation。在DB-Engines的排名中,MySQL稳…

计网Lesson9 - 链路协议和网络概述

文章目录 数据链路层协议Ethernet V2标准Ethernet V2帧格式Ethernet V2帧长度标准以太网帧 MAC 帧协议 PPP 协议PPP 概述PPP 帧 网络层网络层的设计选择 数据链路层协议 Ethernet V2标准 Ethernet V2帧格式 以太网帧格式说明: 6 6 6 字节目标地址 6 6 6 字节源地…

【广州华锐视点】物流数字孪生三维可视化系统打造更高效、智能的物流管理体验

在当今快速发展的物流行业中,传统的管理和监控方法往往难以满足复杂运营的需求。为了解决这个问题,广州华锐互动提供物流数字孪生三维可视化系统定制开发服务,打造更为高效、智能的物流管理体验。 物流数字孪生三维可视化系统是一种基于虚拟现…

【算法与数据结构】455、LeetCode分发饼干

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:因为大饼干可以满足大胃口的孩子也必然可以满足小胃口的孩子,如果要尽可能的满足孩子的胃口…

Git篇---第八篇

系列文章目录 文章目录 系列文章目录前言一、如果本次提交误操作,如何撤销?二、你使用过git stash命令吗?你一般什么情况下会使用它?三、如何查看分支提交的历史记录?查看某个文件的历史记录呢?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住…

B站武sir-django教程(1)

day15 初识Django Python知识点:函数、面向对象。前端开发:HTML、CSS、JavaScript、jQuery、BootStrap。MySQL数据库。Python的Web框架: Flask,自身短小精悍 第三方组件。Django,内部已集成了很多组件 第三方组件。…

【头歌系统数据库实验】实验7 SQL的复杂多表查询-1

目录 第1关:求各颜色零件的平均重量 第2关:求北京和天津供应商的总个数 第3关:求各供应商供应的零件总数 第4关:求各供应商供应给各工程的零件总数 第5关:求重量大于所有零件平均重量的零件名称 第6关&#xff1…

IT新闻资讯系统,使用mysql作为后台数据库,此系统具有显示数据库中的所有信息和删除两大功能。

表的准备: -- MySQL Administrator dump 1.4 -- -- ------------------------------------------------------ -- Server version 5.1.40-community /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET OLD_CHARACTER_SET_RESULTSCHAR…

GLB/GLTF 模型压缩轻量化

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 1、具有 Draco 压缩的 GLTF 和 GLB 文件格式 随着对沉浸式 3D 体验的…

Linux 防病毒软件:CentOS有哪些付费的防病毒软件

CentOS是一个基于开源的Linux发行版,通常不像Windows那样普遍需要使用付费的防病毒软件。大多数Linux系统侧重于使用开源和免费的安全工具来保护系统。一些常见的免费和开源的防病毒软件和安全工具包括ClamAV、Sophos Antivirus for Linux、rkhunter、chkrootkit等。 如果你非…

Leetcode—89.格雷编码【中等】

2023每日刷题(五十九) Leetcode—89.格雷编码 算法思想 套公式法实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int gray(int n) {return n ^ (n >> 1); } int* grayCode(int n, int* returnSize) {…

磁盘坏道修复工具-是一款非常方便实用的磁盘坏道修复软件-供大家学习研究参考

1、支持磁盘数据擦除。 2、杜绝因硬盘坏道,而产生个人隐私数据泄露的问题。 3、支持对该磁盘格式化。 下载:https://download.csdn.net/download/weixin_43097956/88625682

一文读懂Java中应用最广泛的策略模式

策略模式 策略模式是应用最为广泛也是最基础的设计模式。策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法&#xff0…

c++原子变量

原子变量 概述 ​ C11提供了一个原子类型std::atomic<T>&#xff0c;通过这个原子类型管理的内部变量就可以称之为原子变量&#xff0c;我们可以给原子类型指定bool、char、int、long、指针等类型作为模板参数&#xff08;不支持浮点类型和复合类型&#xff09;。 ​ …