GRU 和 LSTM 公式推导与矩阵变换过程图解

GRU 和 LSTM 公式推导与矩阵变换过程图解

  • GRU
  • LSTM


本文的前置篇链接: 单向/双向,单层/多层RNN输入输出维度问题一次性解决


GRU

GRU(Gate Recurrent Unit)是循环神经网络(RNN)的一种,可以解决RNN中不能长期记忆和反向传播中的梯度等问题,与LSTM的作用类似,不过比LSTM简单,容易进行训练。

GRU的输入输出结构与普通的RNN是一样的:

在这里插入图片描述
GRU 内部结构有两个核心的门控状态,分别为r控制重置的门控(reset gate) , z控制更新的门控(update gate) ,这两个门控状态值通过上一时刻传递过来的 h t − 1 h_{t-1} ht1和当前节点输入 x t x_{t} xt结合sigmoid得出,具体公式如下:

在这里插入图片描述

下面我们更加细致来看一下两个门控状态值计算过程中的矩阵维度变换:

在这里插入图片描述

在这里插入图片描述

得到门控信号后,我们首先使用重置门r来得到重置后的 h t − 1 ′ = h t − 1 ⊙ r {h_{t-1}}' =h_{t-1}\odot r ht1=ht1r :

在这里插入图片描述

符号 ⊙ 通常表示 Hadamard 乘积(也称为元素-wise 乘积或 Schur 乘积)。Hadamard 乘积是两个矩阵的元素-wise 乘积,即两个矩阵的对应元素相乘,图中用*代替Hadamard 乘积,用x代替矩阵乘法运算

再将 h t − 1 ′ {h_{t-1}}' ht1与输入 x t x_{t} xt进行拼接,再通过一个tanh激活函数对数据进行非线性变换,得到 h ′ {h}' h, 具体计算过程如下图所示
在这里插入图片描述

更新记忆阶段,我们同时进行了遗忘记忆两个步骤。我们使用了先前得到的更新门控z,更新表达式如下:
h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h_{t} = z\odot h_{t-1} + (1-z) \odot {h}' ht=zht1+(1z)h
在这里插入图片描述

门控信号z的范围为0~1。门控信号越接近1,代表”记忆“下来的数据越多;而越接近0则代表”遗忘“的越多。

GRU很聪明的一点就在于,我们使用了同一个门控z就同时可以进行遗忘和选择记忆(LSTM则要使用多个门控)。

  • z ⊙ h t − 1 z\odot h_{t-1} zht1 表示对原本隐藏状态的选择性遗忘,这里的 z z z可以想象成遗忘门,忘记 h t − 1 h_{t-1} ht1中一些不重要的信息。
  • ( 1 − z ) ⊙ h ′ (1-z)\odot {h}' (1z)h 表示对包含当前节点信息的 h ′ {h}' h进行选择性记忆,这里的 ( 1 − z ) (1-z) (1z)同理会忘记 h ′ {h}' h中一些不重要的信息,或者看成是对 h ′ {h}' h中某些重要信息的筛选。
  • h t = z ⊙ h t − 1 + ( 1 − z ) ⊙ h ′ h_{t} = z\odot h_{t-1} + (1-z) \odot {h}' ht=zht1+(1z)h 总的来看就是忘记传递下来的 h t − 1 h_{t-1} ht1中的某些不重要信息,并加入当前节点输入信息中某些重要部分。

更新门 与 重置门 总结:

  • 重置门的作用是决定前一时间步的隐藏状态在多大程度上被忽略。当重置门的输出接近0时,网络倾向于“忘记”前一时间步的信息,仅依赖于当前输入;而当输出接近1时,前一时间步的信息将被更多地保留。
  • 更新门的作用是决定当前时间步的隐藏状态需要保留多少前一个时间步的信息。更新门的输出值介于0和1之间,值越大表示保留的过去信息越多,值越小则意味着更多地依赖于当前输入的信息。

把GRU所有流程放在一张图展示:
在这里插入图片描述

总的来说:

  • GRU输入输出的结构与普通的RNN相似,其中的内部思想与LSTM相似。
  • 与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加”实用“的GRU啦。

补充 ( 看完 L S T M 部分后,再看该补充说明 ) : 补充(看完LSTM部分后,再看该补充说明): 补充(看完LSTM部分后,再看该补充说明):

  • r (reset gate)实际上与他的名字有些不符合,因为我们仅仅使用它来获得了 h ′ {h}' h
  • GRU中的 h ′ {h}' h实际上可以看成对应于LSTM中的hidden state,而上一个节点传下的 h t − 1 h_{t-1} ht1则对应于LSTM中的cell state。
  • z z z对应的则是LSTM中的 z f z_{f} zf,那么 ( 1 − z ) (1-z) (1z)就可以看成是选择门 z i z_{i} zi

LSTM

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

LSTM 的输入输出结构与普通的RNN区别如下图所示:

在这里插入图片描述
相比于RNN只有一个传递状态 h t h_{t} ht,LSTM有两个传输状态,一个 c t c_{t} ct(cell state) ,和一个 h t h_{t} ht(hidden state)。

LSTM中的 c t c_{t} ct相当于RNN中的 h t h_{t} ht

下面我们来看一下LSTM内部结构,首先使用LSTM的当前输入 x t x_{t} xt和上一个状态传递下来的 h t − 1 h_{t-1} ht1计算得到四个状态值:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
z i , z f , z o z_{i},z_{f},z{o} zi,zf,zo 通过sigmoid非线性变换,分别作为输入门控,遗忘门控和输出门控,而 z z z则是通过tanh非线性变换,作为输入数据。

LSTM内部主要有三个阶段:

  1. 选择记忆阶段: 该阶段会对输入的数据 z z z进行有选择性的记忆,而选择的门控信号由 z i z_{i} zi来进行控制。
    在这里插入图片描述

  2. 忘记阶段: 这个阶段是对上一个节点传入的输入进行选择性的忘记,通过 z f z_{f} zf作为忘记门控,来控制上一个状态 c t − 1 c_{t-1} ct1哪些需要留下,哪些需要忘记。

在这里插入图片描述

  1. 将上面两个阶段得到的结果相加,即可得到传输给下一个状态的 c t c_{t} ct

在这里插入图片描述

  1. 输出阶段: 这个阶段会决定哪些将会被当成当前状态的输出,主要是通过 z o z_{o} zo进行控制,并且还对上一个阶段得到的 c t c_{t} ct进行了tanh的非线性变换。

在这里插入图片描述

  1. 与普通RNN类似,输出的 y t y_{t} yt往往最终也是通过 h t h_{t} ht变换得到,如: y t = s i g m o i d ( W h t ) y_{t} = sigmoid(W h_{t}) yt=sigmoid(Wht)

把LSTM所有流程放在一张图展示:
在这里插入图片描述

总结:

  • 以上,就是LSTM的内部结构。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。

  • 但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。因此很多时候我们往往会使用效果和LSTM相当但参数更少的GRU来构建大训练量的模型。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis存储⑤Redis五大数据类型之 List 和 Set。

目录 1. List 列表 1.1 List 列表常见命令 1.2 阻塞版本命令 1.3 List命令总结和内部编码 1.4 List典型使用场景 1.4.1 消息队列 1.4.2 分频道的消息队列 1.4.3 微博 Timeline 2. Set 集合 2.1 Set 集合常见命令 2.2 Set 集合间命令 2.3 Set命令小结和内部编码 2.…

JS实现灯光闪烁效果

在 JS中&#xff0c;我们可以实现灯光闪烁效果&#xff0c;这里主要用 setInterval 和 clearInterval 两个重要方法。 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>灯闪烁效果<…

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决

RuoYi-Vue-Oracle的oracle driver驱动配置问题ojdbc8-12.2.0.1.jar的解决 1、报错情况 下载&#xff1a;https://gitcode.com/yangzongzhuan/RuoYi-Vue-Oracle 用idea打开&#xff0c;启动&#xff1a; 日志有报错&#xff1a; 点右侧m图标&#xff0c;maven有以下报误 &…

存储异常导致的Oracle重大生产故障

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验 Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯…

【论文翻译】DeepSeek-V3论文翻译——DeepSeek-V3 Technical Report——第一部分:引言与模型架构

论文原文链接&#xff1a;DeepSeek-V3/DeepSeek_V3.pdf at main deepseek-ai/DeepSeek-V3 GitHub 特别声明&#xff0c;本文不做任何商业用途&#xff0c;仅作为个人学习相关论文的翻译记录。本文对原文内容直译&#xff0c;一切以论文原文内容为准&#xff0c;对原文作者表示…

基于Java的远程视频会议系统(源码+系统+论文)

第一章 概述 1.1 本课题的研究背景 随着人们对视频和音频信息的需求愈来愈强烈&#xff0c;追求远距离的视音频的同步交互成为新的时尚。近些年来&#xff0c;依托计算机技术、通信技术和网络条件的发展&#xff0c;集音频、视频、图像、文字、数据为一体的多媒体信息&#xff…

【大模型】DeepSeek与chatGPT的区别以及自身的优势

目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…

20.<Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

C# Winform怎么设计串口,客户端和相机控件界面显示

首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法&#xff0c;其中的节点&#xff08;Section)、键&#xff08;KEY&#x…

stm32点灯 GPIO的输出模式

目录 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置&#xff08; 默认不变&#xff09;HSI 高速内部时钟8Mhz 5.项目配置 6.代码 延时1s循环LED亮灭 1.选择RCC时钟 2.SYS 选择调试模式 SW 3.GPIO 配置 4.时钟树配置&#xff08; 默认不变&#xff09…

Linux常见命令——用户权限类

文章目录 useradd 添加新用户passwd 设置用户密码su 切换用户id 查看用户是否存在cat /etc/passwd 查看创建了哪些用户su 切换用户who 查看登录用户信息sudo 设置普通用户具有root 权限userdel 删除用户用户组管理命令groupadd 新增组usermod 修改用户groupmod 修改组groupdel …

深度剖析 Redis:缓存穿透、击穿与雪崩问题及实战解决方案

一、缓存基本使用逻辑 在应用程序中&#xff0c;为了提高数据访问效率&#xff0c;常常会使用缓存。一般的缓存使用逻辑是&#xff1a;根据 key 去 Redis 查询是否有数据&#xff0c;如果命中就直接返回缓存中的数据&#xff1b;如果缓存不存在&#xff0c;则查询数据库&#…

基于深度学习的人工智能量化衰老模型构建与全流程应用研究

一、引言 1.1 研究背景与意义 1.1.1 人口老龄化现状与挑战 人口老龄化是当今全球面临的重要社会趋势之一,其发展态势迅猛且影响深远。根据联合国的相关数据,1980 年,全球 65 岁及以上人口数量仅为 2.6 亿,到 2021 年,这一数字已翻番,达到 7.61 亿,而预计到 2050 年,…

模型 冗余系统(系统科学)

系列文章分享模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。为防故障、保运行的备份机制。 1 冗余系统的应用 1.1 冗余系统在企业管理中的应用-金融行业信息安全的二倍冗余技术 在金融行业&#xff0c;信息安全是保障业务连续性和客户资产安全的关键。随着数字化…

Java 如何覆盖第三方 jar 包中的类

目录 一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理 背景&#xff1a; 在我们日常的开发中&#xff0c;经常需要使用第三方的 jar 包&#xff0c;有时候我们会发现第三方的 jar 包中的某一个类有问题&#xff0c;或者我们需要定制化修改其中的逻辑&#xff0c…

重塑生产制造企业项目管理新范式:项目模板在Tita中的卓越实践

在竞争激烈的生产制造领域&#xff0c;每一个项目的成功执行都是企业稳健前行的重要基石。然而&#xff0c;面对复杂多变的生产流程、严格的交货期限以及不断变化的客户需求&#xff0c;如何确保项目高效、有序地进行&#xff0c;成为了众多企业面临的共同挑战。此时&#xff0…

脚手架开发【实战教程】prompts + fs-extra

创建项目 新建文件夹 mycli_demo 在文件夹 mycli_demo 内新建文件 package.json {"name": "mycli_demo","version": "1.0.0","bin": {"mycli": "index.js"},"author": "","l…

kafka服务端之延时操作实现原理

文章目录 背景案例延时生产实现原理延时拉取实现原理 总结 背景 上篇我们说到了kafka时间轮是延时操作内部实现的重要数据结构&#xff0c;这篇我们来说下kafka内部的延时操作实现原理。这里我们以延时生产和延时拉取为例说明延时操作的实现原理。 案例 延时生产 我们知道如…

PLSQL: 存储过程,用户自定义函数[oracle]

注意: raise notice是高斯的输出语句; DBMS_OUT_PUT.PUT_LINE是oracle的输出语句 存储过程 Stored Procedure 存储过程可以封装数据访问逻辑&#xff0c;使得应用程序可以通过调用存储过程来执行这些逻辑&#xff0c;而不是直接执行SQL语句。这有助于提高代码的可重用性、可…

【笔记】扩散模型(一〇):Dreambooth 理论与实现|主题驱动生成

论文链接&#xff1a;DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 项目主页&#xff1a;https://dreambooth.github.io/ 非官方实现&#xff1a;huggingface/diffusers、XavierXiao/Dreambooth-Stable-Diffusion 时隔快两周继续更新…