从零开始学习深度学习35.门控循环神经网络之门控循环单元(gatedrecurrentunit,gru)介绍pytorch实现gru并进行训练预测

阿_旭 阿_旭     2023-03-28     426

关键词:

在循环神经网络中,当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。上一篇文章中介绍的裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。因此,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。

为了更好地捕捉时间序列中时间步距离较大的依赖关系,从而提出了门控循环神经网络(gated recurrent neural network)。它可以通过学习的门来控制信息的流动。其中,门控循环单元(gated recurrent unit,GRU)是一种常用的门控循环神经网络 。

目录

1. 门控循环单元设计

门控循环单元的设计在原始RNN的基础上引入了重置门(reset gate)和更新门(update gate)的概念,从而修改了循环神经网络中隐藏状态的计算方式。

1.1 重置门和更新门

如下图所示,门控循环单元中的重置门和更新门的输入均为当前时间步输入 X t \\boldsymbolX_t Xt与上一时间步隐藏状态 H t − 1 \\boldsymbolH_t-1 Ht1,输出由激活函数为sigmoid函数的全连接层计算得到。

假设隐藏单元个数为 h h h,给定时间步 t t t的小批量输入 X t ∈ R n × d \\boldsymbolX_t \\in \\mathbbR^n \\times d XtRn×d(样本数为 n n n,输入个数为 d d d)和上一时间步隐藏状态 H t − 1 ∈ R n × h \\boldsymbolH_t-1 \\in \\mathbbR^n \\times h Ht1Rn×h。重置门 R t ∈ R n × h \\boldsymbolR_t \\in \\mathbbR^n \\times h RtRn×h和更新门 Z t ∈ R n × h \\boldsymbolZ_t \\in \\mathbbR^n \\times h ZtRn×h的计算如下:

R t = σ ( X t W x r + H t − 1 W h r + b r ) , Z t = σ ( X t W x z + H t − 1 W h z + b z ) , \\beginaligned \\boldsymbolR_t = \\sigma(\\boldsymbolX_t \\boldsymbolW_xr + \\boldsymbolH_t-1 \\boldsymbolW_hr + \\boldsymbolb_r),\\\\ \\boldsymbolZ_t = \\sigma(\\boldsymbolX_t \\boldsymbolW_xz + \\boldsymbolH_t-1 \\boldsymbolW_hz + \\boldsymbolb_z), \\endaligned Rt=σ(XtWxr+Ht1Whr+br),Zt=σ(XtWxz+Ht1Whz+bz),

其中 W x r , W x z ∈ R d × h \\boldsymbolW_xr, \\boldsymbolW_xz \\in \\mathbbR^d \\times h Wxr,WxzRd×h W h r , W h z ∈ R h × h \\boldsymbolW_hr, \\boldsymbolW_hz \\in \\mathbbR^h \\times h Whr,WhzRh×h是权重参数, b r , b z ∈ R 1 × h \\boldsymbolb_r, \\boldsymbolb_z \\in \\mathbbR^1 \\times h br,bzR1×h是偏差参数。sigmoid函数可以将元素的值变换到0和1之间。因此,重置门 R t \\boldsymbolR_t Rt和更新门 Z t \\boldsymbolZ_t Zt中每个元素的值域都是 [ 0 , 1 ] [0, 1] [0,1]

1.2 候选隐藏状态

接下来,门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。如下图所示,我们将当前时间步重置门的输出与上一时间步隐藏状态做按元素乘法(符号为 ⊙ \\odot )。如果重置门中元素值接近0,那么意味着重置对应隐藏状态元素为0,即丢弃上一时间步的隐藏状态。如果元素值接近1,那么表示保留上一时间步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输入连结,再通过含激活函数tanh的全连接层计算出候选隐藏状态,其所有元素的值域为 [ − 1 , 1 ] [-1, 1] [1,1]

具体来说,时间步 t t t的候选隐藏状态 H ~ t ∈ R n × h \\tilde\\boldsymbolH_t \\in \\mathbbR^n \\times h H~tRn×h的计算为

H ~ t = tanh ( X t W x h + ( R t ⊙ H t − 1 ) W h h + b h ) , \\tilde\\boldsymbolH_t = \\texttanh(\\boldsymbolX_t \\boldsymbolW_xh + \\left(\\boldsymbolR_t \\odot \\boldsymbolH_t-1\\right) \\boldsymbolW_hh + \\boldsymbolb_h), H~t=tanh(XtWxh+(RtHt1)Whh+bh),

其中 W x h ∈ R d × h \\boldsymbolW_xh \\in \\mathbbR^d \\times h WxhRd×h W h h ∈ R h × h \\boldsymbolW_hh \\in \\mathbbR^h \\times h WhhRh×h是权重参数, b h ∈ R 1 × h \\boldsymbolb_h \\in \\mathbbR^1 \\times h bhR1×h是偏差参数。从上面这个公式可以看出,重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间步的隐藏状态可能包含了时间序列截至上一时间步的全部历史信息。因此,重置门可以用来丢弃与预测无关的历史信息。

1.3 隐藏状态

最后,时间步 t t t的隐藏状态 H t ∈ R n × h \\boldsymbolH_t \\in \\mathbbR^n \\times h HtRn×h的计算使用当前时间步的更新门 Z t \\boldsymbolZ_t Zt来对上一时间步的隐藏状态 H t − 1 \\boldsymbolH_t-1 Ht1和当前时间步的候选隐藏状态 H ~ t \\tilde\\boldsymbolH_t H~t做组合:

查看详情

循环神经网络rnn从零开始实现动手学深度学习v2pytorch

1.循环神经网络RNN2.从零开始实现3.简洁实现4.Q&AGPT3,BERT都是基于Transformer模型的改进,目前也是最火的。voice和image融合算法,用多模态模型。比如自动驾驶领域的运用。RNN批量大小乘以时间长度t,相当于做t次分类... 查看详情

学习深度学习网址

1.从零开始学习深度学习的网址,包括全连接神经网络、卷积神经网络、循环神经网络等等:https://www.zybuluo.com/hanbingtao/note/4854802.python2学习的网址:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000  查看详情

深度学习与图神经网络核心技术实践应用高级研修班-day2循环神经网络(rnn)

RNN循环神经网络1.RNN循环神经网络1.1循环神经网络(RNN)——网络结构1.2反向传播算法——链式法则1.3反向传播算法——参数更新1.4随时间反向传播(BPTT)2.RNN循环神经网络改进2.1长短期记忆网络(LSTM)——网络结... 查看详情

从零开始学深度学习编译器十四,mlirtoytutorials学习笔记之部分lowering(代码片段)

0x0.前言这篇笔记是阅读ToyTutorials的第五章之后总结的,这一节主要讲的是将ToyDialectLowering的部分OperationLowering到AffineDialect,MemRefDialect和StandardDialect,而toy.print操作保持不变,所以又被叫作部分Lowering。通过这个Low... 查看详情

keras深度学习实战(24)——从零开始构建单词向量(代码片段)

...单词向量0.前言1.单词向量1.1Word2Vec原理1.2构建单词向量1.3神经网络架构2.使用Keras从零开始构建单词向量3.测量单词向量之间的相似度小结系列链接0.前言在解决文本相关问题时,传统方法通常需要对单词进行独热编码。但是,如... 查看详情

keras深度学习实战(24)——从零开始构建单词向量(代码片段)

...单词向量0.前言1.单词向量1.1Word2Vec原理1.2构建单词向量1.3神经网络架构2.使用Keras从零开始构建单词向量3.测量单词向量之间的相似度小结系列链接0.前言在解决文本相关问题时,传统方法通常需要对单词进行独热编码。但是&#... 查看详情

keras深度学习实战(27)——循环神经详解与实现(代码片段)

...实战(27)——循环神经详解与实现0.前言1.循环神经网络(RecurrentNeuralNetwork,RNN)架构简介1.1传统文本处理方法的局限性1.2RNN架构简介1.3RNN内存存储机制2.从零开始构建RNN2.1模型分析2.2使用Python从零开始构建RNN模型2.3验证RNN... 查看详情

keras深度学习实战(27)——循环神经详解与实现(代码片段)

...实战(27)——循环神经详解与实现0.前言1.循环神经网络(RecurrentNeuralNetwork,RNN)架构简介1.1传统文本处理方法的局限性1.2RNN架构简介1.3RNN内存存储机制2.从零开始构建RNN2.1模型分析2.2使用Python从零开始构建RNN模型2.3验证RNN... 查看详情

本科生学深度学习-gru最简单的讲解,伪代码阐述逻辑,实例展示效果(代码片段)

...:6、总结RNN写了几期了,今天写下最后一个RNN的神经网络GRU,废话不多说,直接走起。1.gru是什么GRU是LSTM的一种简单的变体,比LSTM网络的结构更加简单,而且效果也不差,运行效率更高,因此也是... 查看详情

从零实现深度学习框架——学习率调整策略介绍

...:https://github.com/nlp-greyfoss/metagrad/blob/master/metagrad/optim.py神经网络优化中的挑战我们已经了解了梯度下降法,后文还会再次总结。图1.只有一个参数的损失函数图像我们先来看最简单的情况,如图1,只有一个 查看详情

搞定《动手学深度学习》-(李牧)pytorch版本的所有内容

...学习简介2.预备知识3.深度学习基础4.深度学习计算5.卷积神经网络6.循环神经网络7.优化算法8.计算性能9.计算机视觉10.自然语言处理环境参考(大家可以在这里下载代码)原书地址(大家可以在这里阅读电子版PDF内容&#... 查看详情

从零开始搭建深度学习验证码识别模型(代码片段)

文章目录从零开始搭建深度学习验证码识别模型CNN模型与图像识别验证码数据集介绍生成数据集生成EasyCaptcha生成Kcaptcha搭建模型EasyNet模型KCapNet模型模型训练与参数选择优化方法与超参数数据集划分模型分析EasyNet算力计算KCap算... 查看详情

多维时序|matlab实现gto-cnn-gru人工大猩猩部队优化卷积门控循环单元多变量多步时间序列预测(代码片段)

...于GTO-CNN-GRU(convolutionalneuralnetworks-gaterecurrentunit)神经网络的电力系统短期负荷预测方法。结果表明:与单独的CNN-GRU网络相比,GTO-CNN-GRU网络对电力系统短期负荷的预测误差更小,预测精度更高。模型描述GTO优... 查看详情

从零开始搭建深度学习环境(代码片段)

开始深度学习调参之路不能没有一个趁手的环境安装基础环境我使用的机器环境是:Ubuntu18.04安装显卡驱动1.2.按照cuda所需的版本安装3.sudoubuntu-driversautoinstall安装pipsudoapt-getinstallpython-pip下载anaconda3地址:https://www.anaconda.co... 查看详情

吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(rnn)

...一个问题:在处理序列学习问题时,为什么不使用标准的神经网络(建立多个隐藏层得到最终的输出)解决,而是提出了RNN这一新概念?标准神经网络如下图所示:标准神经网络在解决序列问题时,存在两个问题:难以解决每个... 查看详情

吴恩达深度学习笔记(deeplearning.ai)之循环神经网络(rnn)

导读本节内容介绍如何使用RNN训练语言模型,并生成新的文本序列。语言模型(Languagemodel)通过语言模型,我们可以计算某个特定句子出现的概率是多少,或者说该句子属于真实句子的概率是多少。正式点讲,一个序列模型模... 查看详情

keras深度学习实战(15)——从零开始实现yolo目标检测(代码片段)

Keras深度学习实战(15)——从零开始实现YOLO目标检测0.前言1.YOLO目标检测模型1.1锚框(anchorboxes)1.2YOLO目标检测模型原理2.从零开始实现YOLO目标检测2.1加载数据集2.2计算锚框尺寸2.3创建训练数据集2.4实现YOLO目标检测模型2.5... 查看详情