(pytorch-深度学习)双向循环神经网络

双向循环神经网络

一般,我们认为循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。
有时候,当前时间步也可能由后面时间步决定
例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。

在这里插入图片描述

  • 给定时间步ttt的小批量输入Xt∈Rn×d\boldsymbol{X}_t \in \mathbb{R}^{n \times d}XtRn×d(样本数为nnn,输入个数为ddd
  • 隐藏层激活函数为ϕ\phiϕ

在双向循环神经网络的架构中, 设

  • 该时间步正向隐藏状态为H→t∈Rn×h\overrightarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}HtRn×h(正向隐藏单元个数为hhh
  • 反向隐藏状态为H←t∈Rn×h\overleftarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h}HtRn×h(反向隐藏单元个数为hhh)。

我们可以分别计算正向隐藏状态和反向隐藏状态:

H→t=ϕ(XtWxh(f)+H→t−1Whh(f)+bh(f)),H←t=ϕ(XtWxh(b)+H←t+1Whh(b)+bh(b))\begin{aligned} \overrightarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(f)} + \overrightarrow{\boldsymbol{H}}_{t-1} \boldsymbol{W}_{hh}^{(f)} + \boldsymbol{b}_h^{(f)}),\\ \overleftarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(b)} + \overleftarrow{\boldsymbol{H}}_{t+1} \boldsymbol{W}_{hh}^{(b)} + \boldsymbol{b}_h^{(b)})\end{aligned} HtHt=ϕ(XtWxh(f)+Ht1Whh(f)+bh(f)),=ϕ(XtWxh(b)+Ht+1Whh(b)+bh(b))

其中权重Wxh(f)∈Rd×h\boldsymbol{W}_{xh}^{(f)} \in \mathbb{R}^{d \times h}Wxh(f)Rd×hWhh(f)∈Rh×h\boldsymbol{W}_{hh}^{(f)} \in \mathbb{R}^{h \times h}Whh(f)Rh×hWxh(b)∈Rd×h\boldsymbol{W}_{xh}^{(b)} \in \mathbb{R}^{d \times h}Wxh(b)Rd×hWhh(b)∈Rh×h\boldsymbol{W}_{hh}^{(b)} \in \mathbb{R}^{h \times h}Whh(b)Rh×h和偏差 bh(f)∈R1×h\boldsymbol{b}_h^{(f)} \in \mathbb{R}^{1 \times h}bh(f)R1×hbh(b)∈R1×h\boldsymbol{b}_h^{(b)} \in \mathbb{R}^{1 \times h}bh(b)R1×h均为模型参数。

然后通过连结两个方向的隐藏状态H→t\overrightarrow{\boldsymbol{H}}_tHtH←t\overleftarrow{\boldsymbol{H}}_tHt来得到隐藏状态Ht∈Rn×2h\boldsymbol{H}_t \in \mathbb{R}^{n \times 2h}HtRn×2h,并将其输入到输出层。

输出层计算输出Ot∈Rn×q\boldsymbol{O}_t \in \mathbb{R}^{n \times q}OtRn×q(输出个数为qqq):

Ot=HtWhq+bq,\boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q,Ot=HtWhq+bq,

其中权重Whq∈R2h×q\boldsymbol{W}_{hq} \in \mathbb{R}^{2h \times q}WhqR2h×q和偏差bq∈R1×q\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}bqR1×q为输出层的模型参数。不同方向上的隐藏单元个数也可以不同。

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

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

相关文章

pytorch实现梯度下降、随机梯度下降-图像直观展示

深度学习与优化算法原理 优化函数与深度学习 在一个深度学习问题中,通常需要预先定义一个损失函数。有了损失函数以后,使用优化算法试图将其最小化。 在优化中,这样的损失函数通常被称作优化问题的目标函数(objective function…

小批量随机梯度下降

小批量随机梯度下降 在每一次迭代中,梯度下降使用整个训练数据集来计算梯度,因此它有时也被称为批量梯度下降(batch gradient descent)。 随机梯度下降在每次迭代中只随机采样一个样本来计算梯度。可以在每轮迭代中随机均匀采样…

动量法解决梯度下降的一些问题

动量法 目标函数有关自变量的梯度代表了目标函数在自变量当前位置下降最快的方向,因此,梯度下降也叫作最陡下降(steepest descent)。在每次迭代中,梯度下降根据自变量当前位置,沿着当前位置的梯度更新自变…

深度学习AdaGrad算法

AdaGrad算法 在一般的优化算法中,目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。 例如,假设目标函数为fff,自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,x2​]⊤,该向量中每一个元素在迭代时都使…

深度学习优化算法:RMSProp算法

RMSProp算法 在AdaGrad算法中,因为调整学习率时分母上的变量st\boldsymbol{s}_tst​一直在累加按元素平方的小批量随机梯度,所以目标函数自变量每个元素的学习率在迭代过程中一直在降低(或不变)。因此,当学习率在迭代…

深度学习-参数与超参数

参数(parameters)/模型参数 由模型通过学习得到的变量比如权重、偏置 超参数(hyperparameters)/算法参数 根据经验进行设定,影响到权重和偏置的大小比如迭代次数、隐藏层的层数、每层神经元的个数、学习速率等

深度学习优化算法-AdaDelta算法

AdaDelta算法 除了RMSProp算法以外,另一个常用优化算法AdaDelta算法也针对AdaGrad算法在迭代后期可能较难找到有用解的问题做了改进 [1]。 不一样的是,AdaDelta算法没有学习率这个超参数。 它通过使用有关自变量更新量平方的指数加权移动平均的项来替代…

深度学习优化算法-Adam算法

Adam算法 Adam算法在RMSProp算法基础上对小批量随机梯度也做了指数加权移动平均。Adam算法可以看做是RMSProp算法与动量法的结合。 算法内容 Adam算法使用了动量变量vt\boldsymbol{v}_tvt​和RMSProp算法中小批量随机梯度按元素平方的指数加权移动平均变量st\boldsymbol{s}_…

pytorch命令式和符号式混合编程

命令式和符号式编程 命令式编程 命令式编程使用编程语句改变程序状态,如下: def add(a, b):return a bdef fancy_func(a, b, c, d):e add(a, b)f add(c, d)g add(e, f)return gfancy_func(1, 2, 3, 4) # 10在运行语句e add(a, b)时,P…

深度学习-自动并行计算

自动并行计算 异步计算 默认情况下,PyTorch中的 GPU 操作是异步的。当调用一个使用 GPU 的函数时,这些操作会在特定的设备上排队但不一定会在稍后立即执行。这就使我们可以并行更多的计算,包括 CPU 或其他 GPU 上的操作。 一般情况下&…

pytorch多GPU计算

pytorch多GPU计算 如果正确安装了NVIDIA驱动,我们可以通过在命令行输入nvidia-smi命令来查看当前计算机上的全部GPU 定义一个模型: import torch net torch.nn.Linear(10, 1).cuda() netoutput: Linear(in_features10, out_features1, biasTrue)要想…

深度学习-计算机视觉--图像增广

图像增广 大规模数据集是成功应用深度神经网络的前提。图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。 图像增广的另一种解释是,随机改…

pytorch深度学习-微调(fine tuning)

微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户。一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然后在收集到的图像…

c语言封闭曲线分割平面_高手的平面课堂:8种常用的设计排版方式,告别通宵加班...

重复、对比、对齐以及亲密性是传统平面排版的四大原则,即将元素重复运用(包括颜色、形状、材质、字体、空间关系等)以增加画面的条理性和整体性;避免页面上的元素形态与关系构建过于相似;画面上的每一元素都应该与另一个元素存在某种视觉联系…

我的世界java版和基岩版对比_基岩版Beta1.11.0.1发布

本帖来自好游快爆-我的世界精选推荐原帖作者:好游快爆用户3302482我的世界基岩版1.11.0.1测试版发布了,Minecraft基岩版1.11仍未发布,1.11.0.1为测试版本,Beta版本可能不稳定,并不代表最终版本质量,请在加入测试版之前…

机器人电焊电流电压怎么调_【华光】HG1000型电焊机现场校准仪

机器简介HG-1000型电焊机现场校准仪是依据检定规程JJG124-2005《电流表、电压表、功率表和电阻表检定规程》、JJG(航天)38-1987《直流标准电流源检定规程》、JJG(航天)51-1999《交流标准电流源检定规程》的要求而设计的校准设备。主要用来校验各种用电焊机(如交流手…

循环机换变速箱油教程_变速箱油用循环机换还是重力换更好?一次讲清楚,新手司机学学...

现在换变速箱油有些只要几百块钱,有些要一两千,之所以差价这么大是因为这里面涉及到换变速箱油时用什么方法去换油的问题。目前比较常见换油法是重力换油法和循环换油法。重力换油法就跟平时换机油是一样的,把变速箱底部的螺丝拧开之后让油滴…

mongodb python 存文件_Python保存MongoDB上的文件到本地的方法介绍

本文实例讲述了Python保存MongoDB上的文件到本地的方法。分享给大家供大家参考,具体如下:MongoDB上的文档通过GridFS来操作,Python也可以通过pymongo连接MongoDB数据库,使用pymongo模块的gridfs方法操作文档。以下示例是把MongoDB…

mongodb 监控权限_MongoDB - 监控

随着MongoDB中保存的数据越来越多,对MongoDB服务状态的监控也越来越重要,经常关注服务是否健康,才能防止故障以及优化。1.静态监控db.serverStatus()使用mongo命令进入shell客户端后输入以下命令可以查看MongoDB服务的状态,有助于…

pytorch深度学习-机器视觉-目标检测和边界框简介

机器视觉之目标检测和边界框简介 在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体…