【Pytorch神经网络理论篇】 18 循环神经网络结构:LSTM结构+双向RNN结构

同学你好!本文章于2021年末编写,获得广泛的好评!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

1 深层循环神经网络的构建

在深层网络结构中,会将简单的RNN模型从两个角度进行改造,具体如下。

  1. 使用更复杂的结构作为RNN模型的基本单元,使其在单层网络上提取更好的记忆特征。
  2. 将多个基本单元结合起来,组成不同的结构(多层RNN、双向RNN等)。有时还会配合全连接网络、卷积网络等多种模型结构,一起组成拟合能力更强的网络模型。其中,RNN模型的基本单元称为Cell,它是整个RNN的基础。

2 常见的cell结构:LSTM

长短记忆(Long Short Term Memory,LSTM)单元是一种使用了类似搭桥术结构的RNN单元。它可以学习长期序列信息,是RNN网络中最常使用的Cell之一。

2.1 了解LSTM结构

2.1.1 循环神经网络(RNNs)

通过不断将信息循环操作,保证信息持续存在,从而解决不能结合经验来理解当前问题的问题。

从图中可看出A允许将信息不断的在内部循环,这可以使其保证每一步的计算都能保存以前的信息。

2.1.1 循环神经网络(RNNs)在长序列上的弊端

把RNNs自循环结构展开,可以看成是同一个网络复制多次并连成一条线,把自身信息传递给下一时刻的自己。

这种链式的结构揭示了RNNs与序列和列表类型的数据密切相关。好像他们生来就是为了处理序列类型数据的。

但是在处理长依赖问题时,RNNs虽然在理论上可行,但实践发现RNNs无法实现。

2.1.3 循环神经网络中cell的LSTM结构

RNNs中有一个特殊的网络结构,叫LSTMs,全称为Long Short Term Memory networks,可翻译为长短时记忆神经网络,这个网络的设计初衷就是为了解决长依赖问题。

所有循环神经网络都具有神经网络的重复模块链的形式。

LSTMs的结构如下:

 它内部有四个网络层,这不同于标准RNN网络里只有一个网络层的单元。

  • Neural Network Layer:激活函数操作
  • Pointwise Operation:点操作
  • Vector Transfer:数据流向
  • Concatenate:表示向量的合并(concat)操作
  • Copy:向量的拷贝

LSTMs核心是细胞状态,用贯穿细胞的水平线表示。细胞状态像传送带一样,它贯穿整个细胞却只有很少的分支,这样能保证信息不变的流过整个RNNs,细胞状态如下图所示:

2.3 LSTM结构的门结构

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或者添加信息。

门能够有选择性的决定让哪些信息通过。门的结构为一个sigmoid层和一个点乘操作的组合:

2.3.1 忘记门

忘记门决定模型会从细胞状态中丢弃什么信息。忘记门会读取前一序列模型的输出,和当前模型的输入,来控制细胞状态中的每个数字是否保留。

例如,在一个语言模型的例子中,假设细胞状态会包会当前主语的性别,于是根据这个状便可以选择正确的代词。当我们看到新的主语时,应该把新的主语在记忆中更新。忘记]的功能就是先去记忆中找到以前的那个旧的主语,并没有真正执行忘掉操作,只是找到而己。

在图中,代表忘记门的输出结果,σ代表激活函数,代表忘记门的权重,代表当前模型的输入,代表前一个序列模型的输出,代表忘记门的偏置。  

2.3.2 输入门

输入门其实可以分成两部分功能,一部分是找到那些需要更新的细胞状态,另一部分是把需要更新的信息更新到细胞状态里。

1、在下图1中,代表要更新的细胞状态,σ代表激活函数,代表当前模型的输入,代表前一个序列模型的输出,所代表计算的权重,代表计算it的偏置,代表使用tanh所创建的新细胞状态,代表计算的权重,代表计算的偏置。
    忘记门找到了需要忘掉的信息ft后,再将它与旧状态相乘,丢弃确定需要丢弃的信息。然后将结果加上×使细胞状态获得新的信息。这样就完成了细胞状态的更新,如图所示。

 2、输入门更新在下图中,代表更新后的细胞状态,代表忘记门的输出结果,代表前一个序列模型的细胞状态,代表要更新的细胞状态,代表使用tanh所创建的新细胞状态。

2.3.4 输出门

如图7-34所示,在输出中,通过一个激活函数层(实际使用的是Sigmoid激活函数)来确定哪个部分的信息将输出,接着把细胞状态通过tah进行处理(得到一个在-1~1的值),并将它和Sigmoid门的输出相乘,得出最终想要输出的那个部分,例如,在语言模型中,假设已经输入了一个代词,便会计算出需要输出一个与该代词相关的信息。

如图上,输出门在图7-34中,代表要输出的信息,σ代表激活函数,代表计算的权重,代表计算的偏置,代表更新后的细胞状态,代表当前序列模型的输出结果。

2.3 门控循环单元(GRU)

门控循环单元(Gated Recurrent Unit,GRU)是与LSTM功能几乎一样的另一个常用的网络结构,它将忘记门和输入门合成了一个单一的更新门,同时又将细胞状态和隐藏状态进行混合,以及一些其他的改动。最终的模型比标准的LSTM模型要简单。

当然,基于LSTM的变体不止GRU一个,经过测试发现,这些搭桥术类的Cell在性能和准确度上几乎没有什么差别,只是在具体的某些业务上会有略微不同。

由于GRU比LSTM少一个状态输出,但效果几乎与LSTM一样,因此在编码时使用GRU可以让代码更为简单一些。

2.4 只有忘记门的LSTM(JANET)单元

    JANET(Just Another NETwork)单元也是LSTM单元的个变种,发布于2018年,实验表明,只有忘记门的网络的性能居然优于标准LSTM单元。同样,该优化方式他以被用在GRU中。

3 独立循环单元

独立循环单元是一种新的循环神经网络单元结构,其效果和速度均优于LSTM单元

IndRNN单元不但可以有效解决传统RNN模型存在的梯度消失和梯度“爆炸”问题,而且能够更好地学习样本中的长期依赖关系。

在搭建模型时:

  • 可以用堆叠、残差、全连接的方式使用IndRNN单元,搭建更深的网络结构:
  • 将IndRNN单元配合RLU等非饱和激活函数一起使用,会使模型表现出更好的鲁棒性。

3.1 原始的RNN模型结构

3.2 indRNN单元的结构

 4 双向RNN结构

    双向RNN又称Bi-RNN,是采用了两个方向的RNN模型。
    RNN模型擅长的是对连续数据的处理,既然是连续的数据,那么模型不但可以学习它的正向特征,而且可以学习它的反向特征。这种将正向和反向结合的结构,会比单向的循环网络更高的拟合度。例如,预测一个语句中缺失的词语,则需要根据上下文来进行预测。

双向RNN的处理过程就是在正向传播的基础上再进行一次反向传播。正向传播和反向传播都连接着一个输出层。这个结构提供给输出层输入序列中每二个点的完整的过去和未来的上下文信息。图所示是一个沿着时间展开的双向循环神经网络。

    双向RNN会比单向RNN多一个隐藏层,6个独特的权值在每一个时步被重复利用,6个权值分别对应:输入到向前和向后隐含层,隐含层到隐含层自身,向前和向后隐含层到输出层。
    双向RNN在神经网络里的时序如图7-37所示。
    在按照时间序列正向运算之后,网络又从时间的最后一项反向地运算一遍,即把时刻的输入与默认值0一起生戒反向的0u3,把反向ou3当成2时刻的输入与原来的时刻输人一起生成反向Qu2,依此类推,直到第一个时序数据

双向循环神经网络有两个输出:一个是正向输出,另一个是反向输出。最终会把输出结果通过concat并联在一起,然后交给后面的层来处理。

假设单向的循环神经网络输出的形状为[seq,batch,nhidden],则双向循环神经网络输出的形状就会交成[seq,batch,nhidden×2]

在大多数应用中,基于时间序列与上下文有关的类似NLP中自动回答类的问题,一般使用双向LSTM配合LSTM或RNN横向扩展来实现,效果非常好。

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

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

相关文章

【Pytorch神经网络理论篇】 19 循环神经网络训练语言模型:语言模型概述+NLP多项式概述

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

常见排序算法的C#实现

排序算法常见的有直接排序、冒泡排序、快速排序、基数排序、归并排序等&#xff0c;下面是实现的代码&#xff0c;仅供参考。 #region DirectSort/// <summary>/// 直接排序./// 第一次从R[0]~R[n-1]中选取最小值&#xff0c;与R[0]交换&#xff0c;/// 第二次从R[1]~R[n…

【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测

1 语言模型步骤 简单概述&#xff1a;根据输入内容&#xff0c;继续输出后面的句子。 1.1 根据需求拆分任务 (1)先对模型输入一段文字&#xff0c;令模型输出之后的一个文字。(2)将模型预测出来的文字当成输入&#xff0c;再放到模型里&#xff0c;使模型预测出下一个文字&…

【Pytorch神经网络理论篇】 20 神经网络中的注意力机制

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】12 利用注意力机制的神经网络实现对FashionMNIST数据集图片的分类

1、掩码模式&#xff1a;是相对于变长的循环序列而言的&#xff0c;如果输入的样本序列长度不同&#xff0c;那么会先对其进行对齐处理&#xff08;对短序列补0&#xff0c;对长序列截断&#xff09;&#xff0c;再输入模型。这样&#xff0c;模型中的部分样本中就会有大量的零…

爬虫实战学习笔记_4 网络请求urllib3模块:发送GET/POST请求实例+上传文件+IP代理+json+二进制+超时

1 urllib3模块简介 urllib3是一个第三方的网络请求模块&#xff08;单独安装该模块&#xff09;&#xff0c;在功能上比Python自带的urllib强大。 1.1了解urllib3 urllib3库功能强大&#xff0c;条理清晰的用于HTTP客户端的python库&#xff0c;提供了很多Python标准库里所没…

C. Jon Snow and his Favourite Number DP + 注意数值大小

http://codeforces.com/contest/768/problem/C 这题的数值大小只有1000&#xff0c;那么可以联想到&#xff0c;用数值做数组的下标&#xff0c;就是类似于计数排序那样子。。 这样就可以枚举k次操作&#xff0c;然后for (int i 0; i < 1025; i)&#xff0c;也就是O(1000 *…

【Pytorch神经网络理论篇】 21 信息熵与互信息:联合熵+条件熵+交叉熵+相对熵/KL散度/信息散度+JS散度

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络理论篇】 22 自编码神经网络:概述+变分+条件变分自编码神经网络

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】13 构建变分自编码神经网络模型生成Fashon-MNST模拟数据

1 变分自编码神经网络生成模拟数据案例说明 变分自编码里面真正的公式只有一个KL散度。 1.1 变分自编码神经网络模型介绍 主要由以下三个部分构成&#xff1a; 1.1.1 编码器 由两层全连接神经网络组成&#xff0c;第一层有784个维度的输入和256个维度的输出&#xff1b;第…

【Pytorch神经网络实战案例】14 构建条件变分自编码神经网络模型生成可控Fashon-MNST模拟数据

1 条件变分自编码神经网络生成模拟数据案例说明 在实际应用中&#xff0c;条件变分自编码神经网络的应用会更为广泛一些&#xff0c;因为它使得模型输出的模拟数据可控&#xff0c;即可以指定模型输出鞋子或者上衣。 1.1 案例描述 在变分自编码神经网络模型的技术上构建条件…

hibernate持久化对象

转载于:https://www.cnblogs.com/jianxin-lilang/p/6440101.html

【Pytorch神经网络理论篇】 23 对抗神经网络:概述流程 + WGAN模型 + WGAN-gp模型 + 条件GAN + WGAN-div + W散度

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…

【Pytorch神经网络实战案例】15 WGAN-gp模型生成Fashon-MNST模拟数据

1 WGAN-gp模型生成模拟数据案例说明 使用WGAN-gp模型模拟Fashion-MNIST数据的生成&#xff0c;会使用到WGAN-gp模型、深度卷积GAN(DeepConvolutional GAN&#xff0c;DCGAN)模型、实例归一化技术。 1.1 DCGAN中的全卷积 WGAN-gp模型侧重于GAN模型的训练部分&#xff0c;而DCG…

Android启动过程深入解析

转载自&#xff1a;http://blog.jobbole.com/67931/ 当按下Android设备电源键时究竟发生了什么&#xff1f;Android的启动过程是怎么样的&#xff1f;什么是Linux内核&#xff1f;桌面系统linux内核与Android系统linux内核有什么区别&#xff1f;什么是引导装载程序&#xff1…

【Pytorch神经网络实战案例】16 条件WGAN模型生成可控Fashon-MNST模拟数据

1 条件GAN前置知识 条件GAN也可以使GAN所生成的数据可控&#xff0c;使模型变得实用&#xff0c; 1.1 实验描述 搭建条件GAN模型&#xff0c;实现向模型中输入标签&#xff0c;并使其生成与标签类别对应的模拟数据的功能&#xff0c;基于WGAN-gp模型改造实现带有条件的wGAN-…

Android bootchart(二)

这篇文章讲一下MTK8127开机启动的时间 MTK8127发布版本开机时间大约在&#xff12;&#xff10;秒左右&#xff0c;如果发现开机时间变长&#xff0c;大部分是因为加上了客户订制的东西&#xff0c;代码累赘太多了。 &#xff11;、下面看一下&#xff2d;&#xff34;&#…

Android Camera框架

总体介绍 Android Camera 框架从整体上看是一个 client/service 的架构, 有两个进程: client 进程,可以看成是 AP 端,主要包括 JAVA 代码与一些 native c/c++代码; service 进 程,属于服务端,是 native c/c++代码,主要负责和 linux kernel 中的 camera driver 交互,搜集 li…

【Pytorch神经网络实战案例】17 带W散度的WGAN-div模型生成Fashon-MNST模拟数据

1 WGAN-div 简介 W散度的损失函数GAN-dv模型使用了W散度来替换W距离的计算方式&#xff0c;将原有的真假样本采样操作换为基于分布层面的计算。 2 代码实现 在WGAN-gp的基础上稍加改动来实现&#xff0c;重写损失函数的实现。 2.1 代码实战&#xff1a;引入模块并载入样本-…

【Pytorch神经网络理论篇】 24 神经网络中散度的应用:F散度+f-GAN的实现+互信息神经估计+GAN模型训练技巧

同学你好&#xff01;本文章于2021年末编写&#xff0c;获得广泛的好评&#xff01; 故在2022年末对本系列进行填充与更新&#xff0c;欢迎大家订阅最新的专栏&#xff0c;获取基于Pytorch1.10版本的理论代码(2023版)实现&#xff0c; Pytorch深度学习理论篇(2023版)目录地址…