深度学习-循环神经网络RNN、长短期记忆LSTM、门限循环单元GRU理解

本文主要是介绍深度学习-循环神经网络RNN、长短期记忆LSTM、门限循环单元GRU理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

循环神经网络(Recurrent Neural Network,RNN); 长短期记忆(Long Short-Term Memory, LSTM); 门限循环单元(Gated Recurrent Unit, GRU)

  • 1.循环神经网络RNN
    • 1.1.优点
    • 1.2.缺点
  • 2.长短期记忆LSTM
    • 2.1.忘记门层
    • 2.2.更新状态
    • 2.3.输出(输出信息和更新后的状态)
    • 2.4.LSTM 的变体
  • 3.门限循环单元GRU
    • 3.1.更新门
    • 3.2.重置门
    • 3.3. 当前记忆内容
    • 3.4.当前时间步的最终记忆
    • 3.5.GRU和LSTM的区别

部分参考:
朱小虎XiaohuZhu:理解 LSTM 网络
【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结
经典必读:门控循环单元(GRU)的基本概念与原理
Deep Learning】详细解读LSTM与GRU单元的各个公式和区别

1.循环神经网络RNN

最为原始的循环神经网络,本质就是全连接网络,只是为了考虑过去的信息,输出不仅取决于当前输入,还取决于之前的信息,也就是输出由之前的信息(也就是状态state)和此时的输入决定。
在这里插入图片描述
RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:
在这里插入图片描述
在这里插入图片描述

1.1.优点

  • RNN 很适合处理序列数据,因为考虑了之前的信息
  • 可以和CNN一起使用得到更好的任务效果

1.2.缺点

  • 相关信息和当前预测位置之间的间隔会变大,在这个间隔不断增大时,RNN 会丧失学习到连接如此远的信息的能力。
  • 存在梯度消失、梯度爆炸问题
  • RNN较其他CNN和全连接要用更多的显存空间,更难训练

2.长短期记忆LSTM

LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为。所有 RNN 都具有一种重复神经网络模块的链式的形式。LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
在这里插入图片描述
在这里插入图片描述
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表按位 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid神经网络层和一个按位的乘法操作。
在这里插入图片描述
Sigmoid层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”
LSTM 拥有三个门,来保护和控制细胞状态。

2.1.忘记门层

LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取ht-1和 xt,输出一个在0 到 1之间的数值给每个在细胞状态Ct-1中的数字。 1表示“完全保留”, 0表示“完全舍弃”。将旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。
在这里插入图片描述

eg:语言模型中,将一句话翻译成翻译成别的语言时,胞状态可能包含当前主语性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语

2.2.更新状态

Ct-1更新为Ct
在这里插入图片描述

  • sigmoid层称 “输入门层” 决定什么值我们将要更新。
  • tanh层创建一个新的候选值向量,Ct,会被加入到状态中。

it*Ct为新的候选值,根据我们决定更新每个状态的程度进行变化。在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方

2.3.输出(输出信息和更新后的状态)

最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。
在这里插入图片描述
总结,我们上述两步可以归纳为:首先,我们运行一个sigmoid层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh进行处理(得到一个在-1到1之间的值)并将它和sigmoid门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化.
在这里插入图片描述

2.4.LSTM 的变体

peephole连接:让 门层 也会接受细胞状态的输入
在这里插入图片描述
coupled 忘记门和输入门:同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。
在这里插入图片描述

3.门限循环单元GRU

GRU背后的原理与 LSTM 非常相似,即用门控机制控制输入、记忆等信息而在当前时间步做出预测,根本上是一种LSTM的变体,它将忘记门输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
在这里插入图片描述
为了解决标准 RNN 的梯度消失问题,GRU 有两个有两个门,即一个重置门(reset gate)和一个更新门(update gate)。从直观上来说

  • 重置门决定了如何将新的输入信息与前面的记忆相结合,
  • 更新门定义了前面记忆保存到当前时间步的量。

基本上,这两个门控向量决定了哪些信息最终能作为门控循环单元的输出。这两个门控机制的特殊之处在于,它们能够保存长期序列中的信息,且不会随时间而清除或因为与预测不相关而移除
如果我们将重置门设置为 1,更新门设置为 0,那么我们将再次获得标准 RNN 模型。使用门控机制学习长期依赖关系的基本思想和 LSTM 一致,但还是有一些关键区别

3.1.更新门

在时间步 t,我们首先需要使用以下公式计算更新门 zt
在这里插入图片描述
其中 xt为第 t 个时间步的输入向量,即输入序列 X 的第 t 个分量,它会经过一个线性变换(与权重矩阵 W(z) 相乘)。ht-1保存的是前一个时间步 t-1 的信息。更新门将这两部分信息相加并投入到 Sigmoid 激活函数中,因此将激活结果压缩到 0 到 1 之间。
更新门帮助模型决定到底要将多少过去的信息传递到未来,或到底前一时间步和当前时间步的信息有多少是需要继续传递的。这一点非常强大,因为模型能决定从过去复制所有的信息以减少梯度消失的风险。我们随后会讨论更新门的使用方法,现在只需要记住 zt 的计算公式就行。

3.2.重置门

本质上来说,重置门主要决定了到底有多少过去的信息需要遗忘,我们可以使用以下表达式计算:
在这里插入图片描述
该表达式与更新门的表达式是一样的,只不过线性变换的参数和用处不一样而已。如前面更新门所述,ht-1 和 xt 先经过一个线性变换,再相加投入 Sigmoid 激活函数以输出激活值。

3.3. 当前记忆内容

现在我们具体讨论一下这些门控到底如何影响最终的输出。在重置门的使用中,新的记忆内容将使用重置门储存过去相关的信息,它的计算表达式为:
在这里插入图片描述

输入 xt 与上一时间步信息 ht-1 先经过一个线性变换,即分别右乘矩阵 W 和 U。
计算重置门 rt 与 Uht-1的 Hadamard 乘积,即 rt 与 Uht-1 的对应元素乘积。因为前面计算的重置门是一个由 0 到 1 组成的向量,它会衡量门控开启的大小。例如某个元素对应的门控值为 0,那么它就代表这个元素的信息完全被遗忘掉。该 Hadamard 乘积将确定所要保留与遗忘的以前信息
将这两部分的计算结果相加再投入双曲正切激活函数中。

3.4.当前时间步的最终记忆

在最后一步,网络需要计算 ht,该向量将保留当前单元的信息并传递到下一个单元中。在这个过程中,我们需要使用更新门,它决定了当前记忆内容 h’t和前一时间步 ht-1 中需要收集的信息是什么。这一过程可以表示为:
在这里插入图片描述
zt为更新门的激活结果,它同样以门控的形式控制了信息的流入。zt与 ht-1的 Hadamard 乘积表示前一时间步保留到最终记忆的信息该信息加上当前记忆保留至最终记忆的信息就等于最终门控循环单元输出的内容。

3.5.GRU和LSTM的区别

结构上

  • GRU 有个门(重置门与更新门),而 LSTM 有个门(输入门、遗忘门和输出门)。
  • GRU 并不会控制并保留内部记忆(Ct),且没有 LSTM 中的输出门
  • LSTM 中的输入与遗忘门对应于 GRU 的更新门,重置门直接作用于前面的隐藏状态。
  • 在计算输出时并不应用二阶非线性。

功能上:

  • GRU参数更少,训练速度更快,相比之下需要的数据量更少
  • 如果有足够的数据,LSTM的效果可能好于GRU

这篇关于深度学习-循环神经网络RNN、长短期记忆LSTM、门限循环单元GRU理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621898

相关文章

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、