【动手学深度学习笔记】--门控循环单元GRU

这篇具有很好参考价值的文章主要介绍了【动手学深度学习笔记】--门控循环单元GRU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

门控循环单元GRU

学习视频:门控循环单元(GRU)【动手学深度学习v2】

官方笔记: 门控循环单元(GRU)

【动手学深度学习笔记】--门控循环单元GRU,深度学习,深度学习,笔记,gru

思考一下这种梯度异常在实践中的意义:

  • 我们可能会遇到这样的情况:早期观测值对预测所有未来观测值具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是否正确。 在这种情况下,第一个词元的影响至关重要。 我们希望有某些机制能够在一个记忆元里存储重要的早期信息。 如果没有这样的机制,我们将不得不给这个观测值指定一个非常大的梯度, 因为它会影响所有后续的观测值。
  • 我们可能会遇到这样的情况:一些词元没有相关的观测值。 例如,在对网页内容进行情感分析时, 可能有一些辅助HTML代码与网页传达的情绪无关。 我们希望有一些机制来跳过隐状态表示中的此类词元。
  • 我们可能会遇到这样的情况:序列的各个部分之间存在逻辑中断。 例如,书的章节之间可能会有过渡存在, 或者证券的熊市和牛市之间可能会有过渡存在。 在这种情况下,最好有一种方法来重置我们的内部状态表示。

在学术界已经提出了许多方法来解决这类问题。 其中最早的方法是“长短期记忆”(long-short-term memory,LSTM), 门控循环单元(gated recurrent unit,GRU)是一个稍微简化的变体,通常能够提供同等的效果,并且计算的速度明显更快。

1.门控隐状态

门控循环单元与普通的循环神经网络之间的关键区别在于: 前者支持隐状态的门控。 这意味着模型有专门的机制来确定应该何时更新隐状态, 以及应该何时重置隐状态。 这些机制是可学习的,并且能够解决了上面列出的问题。 例如,如果第一个词元非常重要, 模型将学会在第一次观测之后不更新隐状态。 同样,模型也可以学会跳过不相关的临时观测。 最后,模型还将学会在需要的时候重置隐状态。 下面我们将详细讨论各类门控。

1.1重置门和更新门

我们首先介绍重置门(reset gate)和更新门(update gate)。 我们把它们设计成(0,1)区间中的向量, 这样我们就可以进行凸组合。 重置门允许我们控制“可能还想记住”的过去状态的数量; 更新门将允许我们控制新状态中有多少个是旧状态的副本。

【动手学深度学习笔记】--门控循环单元GRU,深度学习,深度学习,笔记,gru

1.2候选隐状态

【动手学深度学习笔记】--门控循环单元GRU,深度学习,深度学习,笔记,gru

1.3隐状态

【动手学深度学习笔记】--门控循环单元GRU,深度学习,深度学习,笔记,gru

门控循环单元具有以下两个显著特征:

  • 重置门有助于捕获序列中的短期依赖关系
  • 更新们有助于捕获序列中的长期依赖关系

2.从零开始实现

2.1读取数据

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)

2.2初始化模型参数

下一步是初始化模型参数。 我们从标准差为0.01的高斯分布中提取权重, 并将偏置项设为0,超参数num_hiddens定义隐藏单元的数量, 实例化与更新门、重置门、候选隐状态和输出层相关的所有权重和偏置。

def get_params(vocab_size, num_hiddens, device):
    num_inputs = num_outputs = vocab_size

    def normal(shape):
        return torch.randn(size=shape, device=device)*0.01

    def three():
        return (normal((num_inputs, num_hiddens)),
                normal((num_hiddens, num_hiddens)),
                torch.zeros(num_hiddens, device=device))

    W_xz, W_hz, b_z = three()  # 更新门参数
    W_xr, W_hr, b_r = three()  # 重置门参数
    W_xh, W_hh, b_h = three()  # 候选隐状态参数
    # 输出层参数
    W_hq = normal((num_hiddens, num_outputs))
    b_q = torch.zeros(num_outputs, device=device)
    # 附加梯度
    params = [W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q]
    for param in params:
        param.requires_grad_(True)
    return params

2.3定义模型

现在我们将定义隐状态的初始化函数init_gru_state,与之前定义的init_rnn_state函数一样, 此函数返回一个形状为(批量大小,隐藏单元个数)的张量,张量的值全部为零。

def init_gru_state(batch_size, num_hiddens, device):
    return (torch.zeros((batch_size, num_hiddens), device=device), )

现在我们准备定义门控循环单元模型, 模型的架构与基本的循环神经网络单元是相同的, 只是权重更新公式更为复杂。

def gru(inputs, state, params):
    W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = params
    H, = state
    outputs = []
    for X in inputs:
        Z = torch.sigmoid((X @ W_xz) + (H @ W_hz) + b_z)
        R = torch.sigmoid((X @ W_xr) + (H @ W_hr) + b_r)
        H_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h)
        H = Z * H + (1 - Z) * H_tilda
        Y = H @ W_hq + b_q
        outputs.append(Y)
    return torch.cat(outputs, dim=0), (H,)

2.4训练与预测

训练和预测的工作方式与之前一样

vocab_size, num_hiddens, device = len(vocab), 256, d2l.try_gpu()
num_epochs, lr = 500, 1
model = d2l.RNNModelScratch(len(vocab), num_hiddens, device, get_params,
                            init_gru_state, gru)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

3.简洁实现

高级API包含了前文介绍的所有配置细节, 所以我们可以直接实例化门控循环单元模型。 这段代码的运行速度要快得多, 因为它使用的是编译好的运算符而不是Python来处理之前阐述的许多细节。文章来源地址https://www.toymoban.com/news/detail-709155.html

num_inputs = vocab_size
gru_layer = nn.GRU(num_inputs, num_hiddens)
model = d2l.RNNModel(gru_layer, len(vocab))
model = model.to(device)
d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

到了这里,关于【动手学深度学习笔记】--门控循环单元GRU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【长短时记忆网络(LSTM)和门控循环单元(GRU)】

    长短时记忆网络(LSTM)和门控循环单元(GRU)都是为了解决传统循环神经网络(RNN)在处理长序列数据时遇到的梯度消失问题而设计的。它们通过引入门控机制,有效地保持长期依赖信息,同时避免了梯度在时间反向传播过程中消失的问题。 LSTM通过使用三个门(输入门、遗

    2024年04月09日
    浏览(32)
  • 故障诊断模型 | Maltab实现GRU门控循环单元故障诊断

    故障诊断模型 | Maltab实现GRU门控循环单元故障诊断 利用各种检查和测试方法,发现系统和设备是否存在故障的过程是故障检测;而进一步确定故障所在大致部位的过程是故障定位。故障检测和故障定位同属网络生存性范畴。要求把故障定位到实施修理时可更换的产品层次(可

    2024年02月08日
    浏览(32)
  • 回归预测 | MATLAB实现GRU门控循环单元多输入多输出

    预测效果 基本介绍 MATLAB实现GRU门控循环单元多输入多输出,数据为多输入多输出预测数据,输入10个特征,输出3个变量,程序乱码是由于版本不一致导致,可以用记事本打开复制到你的文件,运行环境MATLAB2020b及以上。命令窗口输出MAE和R2,可在下载区获取数据和程序内容。

    2024年02月12日
    浏览(24)
  • GRU门控循环单元神经网络的MATLAB实现(含源代码)

    在深度学习领域,循环神经网络(RNN)因其在处理序列数据方面的卓越能力而受到广泛关注。GRU(门控循环单元)作为RNN的一种变体,以其在捕捉时间序列长距离依赖关系方面的高效性而备受推崇。在本文中,我们将探讨如何在MATLAB环境中实现GRU网络,以及该实现在处理各类

    2024年01月21日
    浏览(34)
  • 分类预测 | MATLAB实现PCA-GRU(主成分门控循环单元)分类预测

    预测效果 基本介绍 Matlab实现基于PCA-GRU主成分分析-门控循环单元多输入分类预测(完整程序和数据) Matlab实现基于PCA-GRU主成分分析-门控循环单元多输入分类预测(完整程序和数据) 基于主成分分析-门控循环单元分类预测,PCA-GRU分类预测,多输入分类预测(Matlab完整程序和

    2024年02月09日
    浏览(29)
  • 时序预测 | MATLAB实现Attention-GRU时间序列预测(注意力机制融合门控循环单元,TPA-GRU)

    效果一览 基本介绍 Matlab实现Attention-GRU时间序列预测(时间注意力机制融合门控循环单元,也可称呼TPA-GRU,时间注意力机制结合门控循环单元),将注意力机制( attention mechanism) 引入GRU( gated recurrent unit) 模型之中,最后,将特征数据集划分为训练集、验证集和测试集,训练集用

    2024年02月11日
    浏览(32)
  • 回归预测 | MATLAB实现GRU(门控循环单元)多输入单输出(不调用工具箱函数)

    预测效果 基本介绍 GRU神经网络是LSTM神经网络的一种变体,LSTM 神经网 络是在RNN的基础上发展起来的。RNN是一种成熟的机器学习方法,在处理时序数列方面具有着很大优势。RNN中包含信号反馈结构,能将t时刻的输出信息与t时刻之前的信息相关联,具有动态特征和记忆功能。

    2024年02月16日
    浏览(37)
  • 时序预测 | MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测

    预测效果 基本介绍 1.MATLAB实现TCN-GRU时间卷积门控循环单元时间序列预测; 2.运行环境为Matlab2021b; 3.单变量时间序列预测; 4.data为数据集,excel数据,单变量时间序列,MainTCN_GRUTS.m为主程序,运行即可,所有文件放在一个文件夹; 5.命令窗口输出R2、MSE、RMSE、MAE、MAPE多指标评

    2024年02月09日
    浏览(32)
  • 回归预测 | MATLAB实现Attention-GRU多输入单输出回归预测(注意力机制融合门控循环单元,TPA-GRU)

    效果一览 基本介绍 MATLAB实现Attention-GRU多输入单输出回归预测(注意力机制融合门控循环单元,也可称呼TPA-GRU,时间注意力机制结合门控循环单元),将注意力机制( attention mechanism) 引入GRU( gated recurrent unit) 模型之中,最后,将特征数据集划分为训练集、验证集和测试集,训练

    2024年02月16日
    浏览(40)
  • 时序预测 | MATLAB实现PSO-GRU(粒子群优化门控循环单元)时间序列预测

    预测效果 基本介绍 Matlab基于PSO-GRU粒子群算法优化门控循环单元的时间序列预测(完整程序和数据) Matlab基于PSO-GRU粒子群算法优化门控循环单元的时间序列预测,PSO-GRU时间序列预测(完整程序和数据) 优化参数为学习率,隐藏层节点个数,正则化参数,要求2020b及以上版本,

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包