深度学习-循环神经网络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

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Spring Boot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)

《SpringBoot拦截器Interceptor与过滤器Filter深度解析(区别、实现与实战指南)》:本文主要介绍SpringBoot拦截器Interceptor与过滤器Filter深度解析... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现与实

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约