现代循环神经网络-门控循环单元(GRU)

2023-11-08

理论

门控隐状态

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

重置门和更新门 (R Z)

重置门(reset gate)和更新门(update gate)。
我们把它们设计成(0,1)区间中的向量, 这样我们就可以进行凸组合。 重置门允许我们控制“可能还想记住”的过去状态的数量; 更新门将允许我们控制新状态中有多少个是旧状态的副本。
下图 描述了门控循环单元中的重置门和更新门的输入, 输入是由当前时间步的输入和前一时间步的隐状态给出。 两个门的输出是由使用sigmoid激活函数的两个全连接层给出。
在这里插入图片描述

候选隐状态(与R有关)

在这里插入图片描述

隐状态(与上面的候选隐状态有关)

在这里插入图片描述
在这里插入图片描述

从零开始实现

import torch
from torch import nn
from d2l import torch as d2l

# 1. 加载数据
batch_size, num_steps = 32, 35
train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)

#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

# 3. 定义模型
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,)

# 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)

简洁实现

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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现代循环神经网络-门控循环单元(GRU) 的相关文章

  • C++中的map

    1 简介 2 pair类型 2 1 pair类型的定义和初始化 2 2 pair对象的一些操作 3 map基本操作 3 1 头文件 3 2 创建map对象 3 3 map元素访问 3 3 1 使用下标 访问 3 3 2 使用 at 方法访问
  • matlab——三元二次函数求最值

    fmincon函数 今天晚上帮姐姐求一个方程的最值 果断用matlab啊 刚开始想得挺简单的 就是for循环 后来一想计算量太大 百度了一下都是用fmincon这个函数 可是算出来的是最小值 然后又找求最大值的函数 可是找了半天没找到 最后
  • 右键菜单添加命令行,右键菜单增加editplus

    我们在运行中输入cmd命令 默认的输入路径是 C Documents and Settings Administrator 而我们所用工具的安装路径常常不在这个路径下 这样会为一些命令的输入造成麻烦 下面通过修改注册表解决这个麻烦 运行 r
  • 机器学习——KNN算法

    机器学习 KNN算法 文章目录 机器学习 KNN算法 前言 一 KNN原理基础 二 sklearn的基本建模流程 三 KNN算法调优 选取最优的K值 四 KNN中距离的相关讨论 1 KNN使用的是什么距离 2 距离类模型的归一化需求 五 K
  • 快速对比UART、SPI、I2C通信的区别与应用

    参考 带你快速对比SPI UART I2C通信的区别与应用 作者 一口Linux 网址 https mp weixin qq com s 4 RSM2jk2W6nTboO1W8HCw 电子设备之间的通信就像人类之间的交流 双方都需要说相同的

随机推荐

  • webpack进阶--01--环境变量的设置

    环境变量的设置 在用webpack作为打包工具的项目中 环境变量共有三种 node运行时的环境变量 webpack配置对象的环境变量 js运行时的环境变量 node运行时的环境变量 在node环境中 通过process env可以获取nod
  • 【Redux】通过示例和简化源码深入了解Redux原理

    createStore 作用 创建一个包含程序完整 state 树的 Redux store 应用中应有且仅有一个 store Store 就是用来维持应用所有的 state 树 的一个对象 改变 store 内 state 的惟一途径是对
  • 梯度下降算法3维图像示例

    import numpy as np import matplotlib pyplot as plt import matplotlib pylab as mpl from mpl toolkits mplot3d import Axes3
  • 华为MSTP负载均衡配置示例

    华为MSTP负载均衡配置示例 https www cnblogs com zhuimengle p 5906806 html MSTP负载均衡配置示例 本示例拓扑结构如图8 38所示 SwitchA SwitchB SwitchC和Swit
  • WEB-INF下的jsp不能访问的问题

    放在Tomcat WEB INF目录下的文件 image png 当浏览器访问Result jsp时 无法正常显示 通过了解才得知 原来Tomcat WEB INF目录下的文件 浏览器一般无法直接方法 只能通过重定向后才可以访问 如果需要直
  • 象棋对战js代码实现

    象棋对战js代码实现 思路 1 将棋盘设置为背景图片 对背景图片进行分割 分为9行10列的div块 每一块都是棋子的一个位置 2 对每一个div块设置onclick点击事件 每次点击div块都会调用判断棋子的走法是否合理的函数 pandua
  • Spark2.0特征提取、转换、选择之一:数据规范化,String-Index、离散-连续特征相互转换

    数据规范化 标准化 在数据预处理时 这两个术语可以互换使用 不考虑标准化在统计学中有特定的含义 下面所有的规范化操作都是针对一个特征向量 dataFrame中的一个colum 来操作的 首先举一个例子 MaxAbsScaler例子 参考后面
  • Unity基于C#事件委托机制

    事件委托是一种用于实现观察者模式的设计模式 它允许对象在发生特定事件时通知其他对象 在Unity中 事件委托机制为开发者提供了一种简单而有效的方式来处理游戏中的事件和交互 对啦 这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白
  • python算术运算符

    运算符 描述 实例 加 1 1 2 减 3 2 1 乘 2 3 6 除 4 2 2 取整除 返回除法的整数部分 商 9 2 4 取余数 返回除法的余数 9 2 1 幂 又称次方 乘方 2 3 8 算术运算符的优先级 运算符 描述 幂 最高优
  • 区块链的优缺点

    区块链的优点 一是难以篡改 更加安全 在传统信息系统的安全方案中 安全依赖于层层设防的访问控制 通过区块链技术 记录交易的数据库任何人都可以访问 但由于巧妙的设计并辅以密码学和共识机制 区块链的数据记录方式使得修改某一数据需要变更所有的后续
  • TypeError: cannot unpack non-iterable NoneType object

    python报错如下 TypeError cannot unpack non iterable NoneType object 解决方法 报错的原因是函数返回值得数量不一致 查看函数返回值数量和调用函数时接收返回值的数量是不是一致 修改一致
  • Java出现"此时不应有......."的错误

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今晚在安装weblogic的时候 双击运行startWebLogic cmd dos窗口一闪而过 随后将 startWebLogic cmd 拖进cmd窗口运行 显示 此时
  • Android 不同版本通过mk拷贝并安装APK

    目录 前景 解决思路 注意事项 Android 11 Android 9 前景 工作中 有时APK通过系统编译的方式包进系统会丢失so库或者lib包 导致APK无法正常运行 但手动安装就不会出现这个问题 解决思路 可以使用一个取巧的方式解决
  • 无桥PFC的家族推演

    1 组合法构建无桥PFC PFC是一种AC DC变换器 将交流输入电压分成正负半周 输出电压是直流 因此AC DC变换器可以当做是两个DC DC变换器的组合 在PFC的拓扑推演中 就是设计两个DC DC变换器的工作模式 以下内容是基于对陈正
  • 遗传编程(GA,genetic programming)算法初探,以及用遗传编程自动生成符合题解的正则表达式的实践...

    1 遗传编程简介 0x1 什么是遗传编程算法 和传统机器学习算法有什么区别 传统上 我们接触的机器学习算法 都是被设计为解决某一个某一类问题的确定性算法 对于这些机器学习算法来说 唯一的灵活性体现在参数搜索空间上 向算法输入样本 算法借助不
  • i2c-core module could not be probed怎么解决啊

    求大佬帮忙看看 root PandoraBox A983 lib modules 3 14 79 uname a Linux PandoraBox A983 3 14 79 0 SMP Sat Sep 7 12 52 27 2019 arm
  • postman GET请求传Java实体,实体中又有对象实体数组

    controller代码接收参数如下 GetMapping getList ApiOperation 获取列表 public Object getList SearchListParam searchListParam return nul
  • 使用 Docker 运行简单的 python 程序

    以下是一个简单的 python 程序 用户输入一个最小值和最大值 输出二者之间的随机数 from random import randint min number int input Please enter the min number
  • 利用chatgpt实现三分钟快速制作自定义PPT

    目录 利用ChatGPT MindShow三分钟生成PPT 机器人 道合顺 莓用ai 百晓生 aichat 结合提词器以达到更好地提问效果 更好地提问ChatGPT 常用prompt表 小黄同学LL的博客 CSDN博客 举个栗子 利用Cha
  • 现代循环神经网络-门控循环单元(GRU)

    理论 门控隐状态 门控循环单元与普通的循环神经网络之间的关键区别在于 前者支持隐状态的门控 这意味着模型有专门的机制来确定应该何时更新隐状态 以及应该何时重置隐状态 这些机制是可学习的 并且能够解决了上面列出的问题 例如 如果第一个词元非常