深度学习基础--LSTM学习笔记(李沐《动手学习深度学习》)

news/2025/1/20 16:55:38/

前言

  • LSTM是RNN模型的升级版,神经网络模型较为复杂,这里是学习笔记的记录;
  • LSTM比较复杂,可以先看:
  • RNN:RNN讲解
  • 参考:李沐动手学习学习>深度学习
  • 欢迎收藏加关注,本人将会持续更新。

    文章目录

        • 长距离依赖问题
        • LSTM的核心思想
        • LSTM门简介
          • 三个输入门
          • 候选记忆单元
          • 记忆状态
          • 隐状态
          • 总结
        • Pytorch实践
        • 参考资料

LSTM也称为长短期记忆网络,他说RNN、GRU的升级版,它能够学到长期依赖,说白了,RNN是理解一句话,但是LSTM就是理解一段话.

长距离依赖问题

RNN模型中,核心的是有一个隐藏层,这个隐藏层记录之前的信息,但是这个隐藏层的每次更新,权重都是一样的,但是我们生活中不是所有信息都是等价的,[知乎大佬一个案例](LSTM - 长短期记忆递归神经网络 - 知乎):

在这里插入图片描述

我们看到这句话,核心就是几个关键词:“纸好”、“没味道”、“便宜”、“质量好”,我们看完这句话其实和看到这几个关键词没什么大得区别,从这来看,这里也可以得出两点:

  • 在一个时间序列中,前后信息不是所有都是等效的,“关键词”往往最核心,也有一些词“没有啥效果”;
  • 我们在从左到右阅读的时候,脑子自动会帮我们过滤掉一些无用的信息,只留下一些“关键词”的理解,并且能够利用之前的信息去理解后面的信息,这也是我们熟悉的“上下文”;

LSTM也称“长短期记忆网络”,他的核心就是**“记忆”**,有点像我们大脑一样,对于过去的一些信息,有些“忘记”,有些“记得牢”,也有些“只是有个印象”。

LSTM的核心思想

相比于RNN,LSTM的核心就是,除了有隐藏态ht 之外,还有Ct, Ct代表T这个时刻的记忆,从Ct-1计算得来,用于信息的赛选,对重要信息进行保留,如图:

在这里插入图片描述

那怎么进行保留呢?对上一层的信息Ct-1保留,无非就是全部保留,全部不保留,或者保留一部分,这样的话就需要输入一个[0, 1]之间的值,而这个在神经网络中,有一个激活函数可以很好的做到,叫做:sigmoid,记忆保留过程,如图:

输入0,全部不要;输入1,全部保留;输入(0, 1),保留部分信息。

LSTM门简介

LSTM有三个门,分别是:

  • 忘记门(遗忘门):将朝着0减少
  • 输入门:决定是不是要忽略输入数据
  • 输出门:决定是不是要使用隐状态

👀 提示:一下数学公式组合成一块,我感觉就不是那么容易理解了,但是能大概理解即可,后面在案例中实践学习

三个输入门

首先数据经过输入、输出、遗忘门,这三个门第一步都是做线性运算+激活函数进行非线性运算,由于是RNN的升级版,故都会吸取前面的特征Ht-1

在这里插入图片描述

候选记忆单元

候选记忆单元经过先进过线性计算,在经过激活函数tanh的作用,将函数值映射到[-1,1]之间,这个的作用需要结合记忆状态更新来看,结合隐藏层更新公式,可以发现,这个其实的作用可以理解为:对当前的输入信息“记忆多少”

在这里插入图片描述

记忆状态

记忆状态:这是LSTM的核心,看公式有两部分组成,第一部分是遗忘门的更新,决定对之前的记忆信息“吸取多少”,第二个是结合候选记忆单元结合输入门数据,这个我感觉就是代表者说是对当前的数据输入“吸收多少信息”,用于下一个数据的更新。

这个极端情况下,数据范围是[-2, 2]。

在这里插入图片描述

隐状态

在这里,对当前的记忆**Ct**再一次进行了tanh激活函数的作用,他的用处是将记忆单元数据映射到[-1, 1],然后再结合当前输入,这样当前的输入结合了之前的记忆做了更新,然后输出。

在这里插入图片描述
blog.csdnimg.cn/direct/29dd0a2418c04d2d98866a31dccd52d3.png#pic_center)

总结

LSTM原理具体细节确实复杂,但是我感觉可以结合实践慢慢理解,毕竟小编还是本科生🤠🤠.

在这里插入图片描述

Pytorch实践

pytorchAPI

class torch.nn.LSTM(input_size, hidden_size, num_layers=1, bias=True, batch_first=False, dropout=0, bidirectional=False, proj_size=0
)
  • nput_size: 输入特征的数量。
  • hidden_size: 隐藏状态(或输出)特征的数量。
  • num_layers: LSTM 层的数量。默认是 1。
  • bias: 如果为 False,则不会使用偏置项。默认是 True。
  • batch_first: 如果为 True,则输入和输出张量提供给模块的形式为 (batch, seq, feature)。默认是 False,即 (seq, batch, feature)。
  • dropout: 如果非零,则在除了最后一层之外的所有RNN层之后引入一个Dropout层。默认是 0。
  • bidirectional: 如果为 True,则会变成双向LSTM。默认是 False。
  • proj_size: 如果 > 0,则将 LSTM 的隐藏状态投影到这个大小。这有助于减少内存消耗。默认是 0,表示没有投影。

下面将用这个API接口进行搭建一个简单的LSTM网络结构

import torch  
import torch.nn as nn class SimpleLSTM(nn.Module):def __init__(self, input_size, hidden_size, num_layers, output_size):super().__init__()# 定义LSTMself.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True)# 定义线性层self.fc = nn.Linear(hidden_size, output_size)def forward(self, x):list_out, (hh, cn) = self.lstm(x)# 取最后一个时间步输出out = list_out[:, -1, :]output = self.fc(out)return output.view(-1, 1, 1)  # 保持维度# 设置参数
input_size = 10 # 输入维度
hidden_size = 20  # 隐藏层维度
num_layers = 2  # LSTM层数
output_size = 1 # 输出维度# 实例化模型
model = SimpleLSTM(input_size, hidden_size, num_layers, output_size)# 随机生产数据
# 示例输入(batch_size, seq_len, input_size)
x = torch.randn(5, 15, input_size)# 模型
out = model(x)print(out.shape)

输出:

torch.Size([5, 1, 1])

参考资料

LSTM - 长短期记忆递归神经网络 - 知乎


http://www.ppmy.cn/news/1564705.html

相关文章

iOS - Objective-C 底层实现中的哈希表

1. 关联对象存储&#xff08;AssociationsHashMap&#xff09; // 关联对象的哈希表实现 typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap; typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMa…

【React学习笔记】第三章:React应用

1.使用create-react-app创建 react 应用 1.1 react 脚手架 react提供了一个用于创建 react 项目的脚手架&#xff1a;create-react-app 项目的整体技术架构为&#xff1a;react webpack es6 eslint 1.2 创建项目并启动 打开CMD 第一步&#xff1a; 全局安装react脚手架 …

OpenHarmony-7.IDL工具

IDL 工具 1.openharmony IDL工具 在OpenHarmony中&#xff0c;当应用/系统服务的客户端和服务端进行IPC&#xff08;Inter-Process Communication&#xff09;跨线程通信时&#xff0c;需要定义双方都认可的接口&#xff0c;以保障双方可以成功通信&#xff0c;OpenHarmony ID…

基于PHP的校园新闻发布管理

摘要 近年来&#xff0c;随着互联网技术的迅速发展&#xff0c;人们获取新闻的渠道也变得越来越多样化&#xff0c;已经不再拘束于传统的报纸、期刊、杂志等纸质化的方式&#xff0c;而是通过网络满足了人们获得第一手新闻的愿望&#xff0c;这样更加有助于实现新闻的规范化管…

吴恩达深度学习——神经网络介绍

文章内容来自BV11H4y1F7uH&#xff0c;仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集&#xff0c;横轴为房子大小&#xff0c;纵轴为房子…

【服务器】Ubuntu22.04配置静态ip

Ubuntu2204配置静态ip Ubuntu2204配置静态ip1. 编辑网络配置文件2. 输入下面配置3. 配置生效4. 查看当前ip5. 完成修改 Ubuntu2204配置静态ip 1. 编辑网络配置文件 sudo vim /etc/netplan/00-installer-config.yaml2. 输入下面配置 将静态ip设置为192.168.3.200 &#xff0c;…

PHP企业IM客服系统

&#x1f4ac; 企业IM客服系统——高效沟通&#xff0c;无缝连接的智慧桥梁 &#x1f680; 卓越性能&#xff0c;释放无限可能 在瞬息万变的商业环境中&#xff0c;我们深知沟通的力量。因此&#xff0c;基于先进的ThinkPHP5框架与高性能的Swoole扩展&#xff0c;我们匠心独运…

深度学习项目--基于LSTM的火灾预测研究(pytorch实现)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 前言 LSTM模型一直是一个很经典的模型&#xff0c;这个模型当然也很复杂&#xff0c;一般需要先学习RNN、GRU模型之后再学&#xff0c;GRU、LSTM的模型讲解将…