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

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

深度解析Python装饰器常见用法与进阶技巧

《深度解析Python装饰器常见用法与进阶技巧》Python装饰器(Decorator)是提升代码可读性与复用性的强大工具,本文将深入解析Python装饰器的原理,常见用法,进阶技巧与最佳实践,希望可... 目录装饰器的基本原理函数装饰器的常见用法带参数的装饰器类装饰器与方法装饰器装饰器的嵌套与组合进阶技巧

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

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循