当前位置: 首页 > article >正文

理解LSTM

如何从RNN起步,一步一步通俗理解LSTM
Understanding LSTM Networks
LSTM-from-scratch-in-Pytorch
LSTM Neural Network from Scratch
Implementing a LSTM from scratch with Numpy

LSTM Layers
这张图就是最常见的LSTM结构图,但是隐藏了很多细节。下面这张图是一个LSTM模块的细节放大图:
在这里插入图片描述
图中:

  • 绿色的是长期记忆 long-term memory;

  • 玫瑰红色?的是短期记忆 short term memory;

  • 灰色的线是当前的输入x;

  • 每个蓝色的方框代表sigmoid函数,输出值在 0 到 1 之间,作为权重,控制信息的流动;

  • 每个橘色的方框代表tanh函数,输出值在 -1 到 1 之间,更好的编码信息,并且保持数据的中心化;

  • 第一个浅蓝色的虚线框,代表记忆门或遗忘门,一体两面,都是一回事,给重要的需要记忆的高权重,给不重要的需要忘记的低权重。用来计算长期记忆中如何向下一步传递信息。公式中x是当前输入,h是短期记忆,c是长期记忆。
    在这里插入图片描述

  • 第二个浅绿色的虚线框,是输入门,是当前要加入到长期记忆中的信息的权重,
    在这里插入图片描述

  • 第三个浅黄色虚线框,是当前需要加入到长期记忆中的信息,包括短期记忆和当前输入,和权重相乘后加入到长期记忆中。
    在这里插入图片描述
    在这里插入图片描述

  • 第四个浅紫色的虚线框,是输出门,是当前处理过的长期记忆(update long-term memory)中要输出的信息的权重。
    在这里插入图片描述

  • 第五个浅红色虚线框,是当前处理过的长期记忆(update long-term memory)经过tanh激活后,变为当前潜在要输出的短期记忆,乘以前一个输出的权重,得到新的短期记忆输出。
    在这里插入图片描述

一个完整的计算过程 ,pytorch中的LSTM函数。
在这里插入图片描述
总结:

  1. 长期记忆要经过记忆门(乘以权重),决定要传播的信息;
  2. 短期记忆以及当前输入,要经过激活,再经过输入门(乘以权重),决定要加入到长期记忆中传播的信息;
  3. 经过了前两步的长期记忆,经过激活,再经过输出门(乘以权重),得到最终的短期记忆输出;
  4. 每个门,也就是权重,输入都包括短期记忆和当前输入两部分,使用sigmoid函数激活;
  5. 每个加入的信息,使用tanh函数激活。
import torch
import torch.nn as nn

rnn = nn.LSTM(input_size=10, hidden_size=20, num_layers=2)
#默认batch_first=False,所以输入是(length,batch_size,input_size)
input = torch.randn(5, 3, 10)
#短期记忆,(num_layers,batch_size,hidden_size)
h0 = torch.randn(2, 3, 20)
#长期记忆,(num_layers,batch_size,hidden_size)
c0 = torch.randn(2, 3, 20)
output, (hn, cn) = rnn(input, (h0, c0))
#输出,(length,batch_size,hidden_size)
output.shape
#torch.Size([5, 3, 20])

http://www.kler.cn/news/367634.html

相关文章:

  • git命令笔记(速查速查)
  • 8. 数据结构—排序
  • C#通过异或(^)运算符制作二进制加密(C#实现加密)
  • 100种算法【Python版】第14篇——Pollard‘s Rho 质因数分解算法
  • 直播系统源码技术搭建部署流程及配置步骤
  • STM32应用详解(10)I2C总线初始化
  • 【视频混剪Demo】FFmpeg的使用【Windows】
  • codeforces _ 补题
  • 数据可视化视频制作
  • 国内动态短效sk5,http
  • MongoDB Shell 基本命令(三)生成学生脚本信息和简单查询
  • Elasticsearch 在linux部署 及 Docker 集群部署详解案例示范
  • vscode如何debug环境配置?torchrun与deepspeed库又该如何配置?
  • Python爬虫:商品详情的“八卦记者”
  • LeetCode 3185.构成整天的下标对数目 II:哈希表
  • [Ansible实践笔记]自动化运维工具Ansible(二):Ansible的playbook及角色
  • AudioSetCaps数据集:包含190万对来自AudioSet录音的音频-字幕对。
  • HTTP协议相关知识点
  • 网络编程_day3
  • Flutter 鸿蒙next中的路由使用详解【基础使用】
  • 团结引擎内置 AI 助手团结 Muse Chat 测试版上线!新功能怎么用?能做什么?
  • 技术周总结 10.21~10.27周日
  • LeetCode刷题日记之动态规划(一)
  • 2025前端面试-内存泄露-001
  • k8s 1.21.1部署过程中calico服务启动失败问题
  • LeetCode_1688. 比赛中的配对次数_java