LSTM与GRU

2023-05-16

LSTM 与 GRU

一、综述

LSTM 与 GRU是RNN的变种,由于RNN存在梯度消失或梯度爆炸的问题,所以RNN很难将信息从较早的时间步传送到后面的时间步。LSTM和GRU引入门(gate)的机制,通过门控制序列信息中要丢弃或保留的数据,在一定程度上缓解了RNN无法将信息传送到较后时间步的问题。

二、LSTM

Long Shot-Term Memory(长短时记忆网络),通过引入门的机制,实现对信息的“记忆”。

  • 记忆是一种随时间变化的状态。
  • 决定记忆状态的两大因素:选择性的输入、选择性的遗忘。

LSTM中的主要概念:

  • 细胞的状态
  • 输入门
  • 遗忘门
  • 输出门
    LSTM的结构
  • 图中黄色类似于CNN里的激活函数操作
  • 粉色圆圈表示点操作
  • 单箭头表示数据流向
  • 箭头合并表示向量的合并(concat)操作
  • 箭头分叉表示向量的拷贝操作

2.1 细胞状态

LSTMs的核心是细胞状态,用贯穿细胞的水平线表示。
细胞状态像传送带一样,贯穿整个细胞 却只有很少的分支,这样能保证信息不变的流过整个RNNs。(人的记忆状态贯穿人的一生。)
细胞状态

2.2 门

LSTM网络能通过一种被称为门的结构对细胞状态进行删除或则添加信息。
门能够有选择性地决定 让哪些信息通过。其实门的结构很简单,就是一个sigmoid层和一个点乘操作的组合。
因为sigmoid层的输出是0-1的值,这代表有多少信息能够流过sigmoid层。0表示都不能通过,1表示都能通过。门结构
一个LSTM里面包含三个门:

  • 忘记门
  • 输入门
  • 输出门

2.2.1 忘记门(forget gate)

LSTM的第一步就是决定细胞状态需要丢弃哪些信息。
这部分操作是通过一个被称为忘记门的sigmoid单元来处理的。它通过查看 h t − 1 h_{t-1} ht1 x t x_t xt来输出一个0-1之间的向量,该向量里面的0-1值表示细胞状态 C t − 1 C_{t-1} Ct1中的哪些信息保留或丢弃多少。0表示不保留,1表示都保留。
LSTM忘记门

2.2.2 输入门(input gate)

第二步:决定给细胞状态添加哪些新的信息。
分为两个步骤,首先 利用 h t − 1 h_{t-1} ht1 x t x_t xt通过一个称为输入门的操作来决定更新哪些信息。
再利用 h t − 1 h_{t-1} ht1 x t x_t xt通过 t a n h tanh tanh层得到新的候选细胞信息 C t ~ \widetilde{C_t} Ct ,这些信息可能会被更新到细胞信息中。
LSTM输入门
第三步:更新旧的细胞信息 C t − 1 C_{t-1} Ct1,变为新的细胞信息 C t C_t Ct
更新的规则,通过忘记门选择忘记旧细胞信息的一部分,通过输入门选择添加候选细胞信息 C t ~ \widetilde{C_t} Ct 的一部分得到新的细胞信息 C t C_t Ct.
注:⊙为Hadamard积
Hadamard
在这里插入图片描述

2.2.3 输出门(output gate)

第四步: 根据输入的 h t − 1 h_{t-1} ht1 x t x_t xt判断输出细胞的哪些状态特征。
需要将输入经过一个称为输出门的sigmoid层得到判断条件,然后将细胞状态经过tanh层得到一个 -1~1之间值的向量,该向量与输出门得到的判断条件相乘就得到了最终该RNN单元的输出。
在这里插入图片描述

2.2.4 总结

在这里插入图片描述

三、GRU

在GRU模型中只有两个门:

  • 重置门(r):控制前一状态有多少 信息被写入到当前的候选状态 ℎ̃上 的程度,重置门越小,前一状态的信 息被写入的越少。
  • 更新门(z):控制前一时刻的状态 信息与候选状态信息被带入到当前状 态中的程度。

GRU

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LSTM与GRU 的相关文章

  • 如何在 Keras 中使用 model.reset_states() ?

    我有顺序数据 并且声明了一个 LSTM 模型来预测y with x在喀拉斯 所以如果我打电话model predict x1 and model predict x2 调用是否正确model reset states两者之间predict
  • 如何合并数值模型和嵌入序列模型来处理 RNN 中的类别

    我想为我的分类特征构建一个带有嵌入的单层 LSTM 模型 我目前有数字特征和一些分类特征 例如位置 它不能进行单热编码 例如使用pd get dummies 由于计算复杂性 这正是我最初打算做的 让我们想象一个例子 样本数据 data us
  • 验证损失远高于训练损失

    我对深度学习模型非常陌生 并尝试使用 LSTM 和 Keras Sequential 来训练多个时间序列模型 50 年中每年有 25 个观测值 1250 个样本 因此不确定是否可以将 LSTM 用于如此小的数据 然而 我有数千个特征变量 不
  • 如何实现每个时间步都带有向量输入的LSTM网络?

    我正在尝试在 Tensorflow 中创建一个生成 LSTM 网络 我有这样的输入向量 0 0 1 0 1 0 0 0 1 0 1 0 0 0 0 1 0 1 该矩阵中的每个向量都是一个时间步 或者换句话说 每个向量应该是 LSTM 的一个
  • 带有嵌入层的 Keras LSTM 自动编码器

    我正在尝试在 Keras 中构建一个文本 LSTM 自动编码器 我想使用嵌入层 但我不确定如何实现 代码如下所示 inputs Input shape timesteps input dim embedding layer Embeddin
  • 如何将 Bert 嵌入提供给 LSTM

    我正在研究用于文本分类问题的 Bert MLP 模型 本质上 我试图用基本的 LSTM 模型替换 MLP 模型 是否可以创建带有嵌入的 LSTM 或者 最好创建一个带有嵌入层的 LSTM 更具体地说 我很难尝试创建嵌入矩阵 因此我可以使用
  • Seq2Seq 模型在几次迭代后学会仅输出 EOS 令牌 (<\s>)

    我正在创建一个接受过训练的聊天机器人康奈尔电影对话语料库 https www cs cornell edu cristian Cornell Movie Dialogs Corpus html using NMT https github
  • Keras - 从一个神经网络做出两个预测

    我正在尝试组合由同一网络产生的两个输出 该网络对 4 类任务和 10 类任务进行预测 然后我希望将这些输出组合起来 得到一个长度为 14 的数组 我将其用作最终目标 虽然这似乎很有效 但预测总是针对一个类别 因此它会产生一个概率分布 该概率
  • 使用 conv1D “检查输入时出错:期望 conv1d_input 有 3 个维度,但得到形状为 (213412, 36) 的数组”

    我的输入只是一个 csv 文件237124行和37列 首先36列作为特征 The last列是一个二进制类标签 我正在尝试在 conv1D 模型上训练我的数据 我尝试过建立一个一层 CNN 但我有一些问题 编译器输出 ValueError
  • TfLite LSTM 模型

    我还没有找到任何可以使用的预训练 lstm 模型 tfLite 是否提供了任何预训练的 lstm 模型 我尝试创建 tflite 模型 但在转换时遇到问题 您能提供创建 tfLite 模型的确切脚本吗 tfLite 是否有任何用于创建最新版
  • 对可变长度序列进行训练和预测

    传感器 同类型的 分散在我的网站上 不定期地手动向我的后端报告 在报告之间 传感器聚合事件并批量报告它们 以下数据集是批量收集的序列事件数据的集合 例如传感器 1 报告了 2 次 在第一批 2 个事件和第二批 3 个事件中 传感器 2 报告
  • Keras One Hot 编码内存管理 - 最好的出路

    我知道这个问题已经以不同的方式得到了解答past https stackoverflow com questions 41058780 python one hot encoding for huge data 但我无法弄清楚并适合我的代码
  • 如何为 keras lstm 输入重塑数据?

    我是 Keras 新手 我发现很难理解 LSTM 层输入数据的形状 Keras 文档表示输入数据应该是形状为 nb samples timesteps input dim 的 3D 张量 我有808信号 每个信号有22个通道和2000个数据
  • Caffe 的 LSTM 模块

    有谁知道 Caffe 是否有一个不错的 LSTM 模块 我从 russel91 的 github 帐户中找到了一个 但显然包含示例和解释的网页消失了 以前是http apollo deepmatter io http apollo deep
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • ptb_word_lm中batch_size的含义(tensorflow的LSTM模型)

    我是张量流的新手 我现在对它的含义有点困惑batch size 众所周知 其含义是batch size是每批次的样本数 但是根据中的代码ptb word lm 似乎不是 读者 py data len tf size raw data the
  • 如何使用 lstm 执行多类多输出分类

    I have multiclass multioutput classification see https scikit learn org stable modules multiclass html https scikit lear
  • 尝试在 Keras 中创建 BLSTM 网络时出现类型错误

    我对 Keras 和深度学习有点陌生 我目前正在尝试复制这个paper https pdfs semanticscholar org 4afe f0c6039a5d8b647518b6fe05f47a8bd3aeee pdf但是当我编译第二
  • Pytorch LSTM:计算交叉熵损失的目标维度

    我一直在尝试在 Pytorch 中使用 LSTM LSTM 后跟自定义模型中的线性层 但在计算损失时出现以下错误 Assertion cur target gt 0 cur target lt n classes failed 我用以下函数

随机推荐

  • TTY 到底是个什么玩意?

    先来回答一道面试题 xff1a 我们知道在终端中有一些常用的快捷键 xff0c Ctrl 43 E 可以移动到行尾 xff0c Ctrl 43 W 可以删除一个单词 xff0c Ctrl 43 B 可以向前移动一个字母 xff0c 按上键可
  • ftp命令大全详解

    来熟悉熟悉ftp命令 xff0c 对于服务器之间的文件传输太有用啦 xff0c 不会怎么能行呢 xff01 先来看看基础的命令 xff0c 包括了连接 xff0c 列出列表 xff0c 下载 xff0c 上传 xff0c 断开这最基础的命令
  • TCP/IP,Linux中使用信号量控制运行中的进程,使用signal函数绑定信号量和处理函数,替换信号量默认功能,信号量会打断sleep的休眠状态

    TCP IP xff0c Linux中使用信号量控制运行中的进程 xff0c 绑定信号量和处理函数 xff0c 信号量会打断sleep的休眠状态 一 Linux中使用信号量对进程的调控 xff1a 1 信号量是一个int值 xff0c 由操
  • 几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF)

    几种经典非线性滤波算法概括 xff08 EKF xff0c UKF xff0c CKF xff0c PF xff09 上一篇文章阐述了Kalman滤波算法 xff0c 该算法是在线性高斯下的最优滤波估计算法 但是在实际控制系统中 xff0c
  • 扩展卡尔曼滤波(EKF)算法详细推导及仿真(Matlab)

    扩展卡尔曼滤波 xff08 EKF xff09 算法详细推导及仿真 xff08 Matlab xff09 扩展卡尔曼滤波算法是解决非线性状态估计问题最为直接的一种处理方法 xff0c 尽管EKF不是最精确的 最优 滤波器 xff0c 但在过
  • uio驱动编写 实例1

    AUTHOR xff1a Joseph Yang 杨红刚 lt eagle rtlinux 64 gmail com gt CONTENT uio驱动编写 实例1 NOTE xff1a linux 3 0 LAST MODIFIED xff
  • raspberry pi pico, 如何在macos平台使用picoprobe,vscode来debug程序

    debugprobe 80元人民币 再买一块pico 刷上debug程序 xff0c 仅要16元 xff0c 当然用便宜的 在mac上的vs code总是遇见问题 单独运行openocd时 xff0c 也有问题 xff0c 出现错误 CMS
  • 1—类、域、方法和实例对象

    Java 是面向对象的高级编程语言 xff0c 类和对象是 Java 程序的构成核心 围绕着 Java 类和 Java 对象 xff0c 有三大基本特性 xff1a 封装是 Java 类的编写规范 继承是类与类之间联系的一种形式 而多态为系
  • 常用数学公式汇总

    常用数学公式汇总 一 基础代数公式 1 平方差公式 xff1a xff08 a xff0b b xff09 xff08 a xff0d b xff09 xff1d a2 xff0d b2 2 完全平方公式 xff1a xff08 a b x
  • Kubernetes--API Server资源隔离

    Kubernetes的一些功能特性也与公有云提供商密切相关 xff0c 例如 xff1a 负载均衡服务 弹性公网IP 存储服务等 xff0c 具体实现也需要与API Server通信 xff0c 也属于运行商内部重点保障的安全区域 此外 x
  • 公式提取方法

    Mathpix Snipping Tool和MathType配合用法 Mathpix Snipping Tool是一个可以提取数学公式的工具 xff0c 当我们写毕业论文或者结课报告或者参加数学建模等比赛的用到的公式 xff0c 可以用这款
  • (学习unix编程)关于文件流与文件描述符的区别

    文件描述符 xff08 就是整数 xff09 用于在一个进程内唯一的标识打开的文件 这假定了内核能够在用户进程的描述符和内核内部使用的机构之间 xff0c 建立一种关联 xff08 深入linux内核架构 xff09 由于唯一标识进程的结构
  • 2000页kubernetes操作手册,内容详细代码清晰,小白也能看懂

    现如今 xff0c Kubernetes业务已成长为新时代的IT基础设施 xff0c 并成为高级运维工程师 架构师 后端开发工程师的必修技术栈 毫无疑问 xff0c Kubernetes是云计算发展演进的一次彻底革命性的突破 xff0c 只
  • Linux安装nodejs和npm

    最近window系统转向linux系统开发 xff0c linux系统的确适合程序员的开发 作为前端安装了nodejs和npm xff0c 遇到了一些坑 xff0c 赶紧记录下来 第一种安装方法 xff1a 安装nodejs xff1a s
  • 查看core dumped的详细错误原因

    什么是Core Dump Core的意思是内存 Dump的意思是扔出来 堆出来 开发和使用Unix程序时 有时程序莫名其妙的down了 却没有任何的提示 有时候会提示core dumped 这时候可以查看一下有没有形如core 进程号的文件
  • IntelliJ IDEA创建Servlet最新方法 Idea版本2020.2.2以及IntelliJ IDEA创建Servlet 404问题(超详细)

    第一次用IntelliJ IDEA写java代码 xff0c 之前都是用eclipse xff0c 但eclipse太老了 下面为兄弟们奉上IntelliJ IDEA创建Servlet方法 xff0c 写这个的目的也是因为在网上找了很多资料
  • Linux下做C语言/C++开发的一些建议

    相对于Linux下的C C 43 43 开发 xff0c 在windows下的初学者往往容易入门 xff0c 原因是visual studio 这个强大的工具隐藏了很多的细节 xff0c 好多人甚至以为拖拖控件 xff0c 写写消息响应函数
  • Target ‘STM32F4xx‘ uses ARM-Compiler ‘Default Compiler Version 5‘ which is not available.找不到v5版本解决方法

    现在官网上没有v5的版本了 xff0c keil默认安装的是v6的版本 xff0c 如果工程想要运行以前的工程 xff0c 可以设置将工程的编辑器从v5转到v6 xff0c 下面是方法 xff1a 1 使用MDK打开工程 2 选择 Proj
  • 关于imu的介绍

    1 imu时惯性运动丹云 xff0c 包含加速度计和陀螺传感器的组合 它被用来检查加速度和角速度 xff08 IMU传感器 xff0c 你所需要知道的全部 知乎 xff09 虽然时外文翻译的 xff0c 凡是整体风格清晰 2 imu的使用
  • LSTM与GRU

    LSTM 与 GRU 一 综述 LSTM 与 GRU是RNN的变种 xff0c 由于RNN存在梯度消失或梯度爆炸的问题 xff0c 所以RNN很难将信息从较早的时间步传送到后面的时间步 LSTM和GRU引入门 xff08 gate xff0