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

ops/2025/1/22 8:09:00/

前言

  • 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/ops/152142.html

相关文章

「2024 博客之星」自研Java框架 Sunrays-Framework 使用教程

文章目录 0.序言我的成长历程遇到挫折,陷入低谷重拾信心,迎接未来开源与分享我为何如此看重这次评选最后的心声 1.概述1.主要功能2.相关链接 2.系统要求构建工具框架和语言数据库与缓存消息队列与对象存储 3.快速入门0.配置Maven中央仓库1.打开settings.…

医院管理系统小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

资料03:【TODOS案例】微信小程序开发bilibili

样式 抽象数据类型 页面数据绑定 事件传参

2025美赛数学建模B题思路+模型+代码+论文

2025美赛数学建模A题B题C题D题E题思路模型代码(1.24第一时间更新,更新见文末名片) 论文数学建模感想 纪念逝去的大学数学建模:两次校赛,两次国赛,两次美赛,一次电工杯。从大一下学期组队到现在…

经验收录/用复盘的心态去学习

1.日拱一卒,想法积极。每次解决一点眼前的现实问题,长远来看是最高效的方法,一开始目标太远大,反而增加负担,在能力不够时想得太多反而会不愿意努力。 2.摆脱之前的思路。养成批判性思维,旁观者视角&#…

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Lin…

Data Filtering Network 论文阅读和理解

目录 一、TL;DR 二、Introduction 2.1 apple的结论 2.2 业界做法: 2.3 我们的做法(Apple) 2.4 如何获取好的DFN 三、未完待续(这周出去购物了,下周继续补充) 一、TL;DR 核心…

【Pandas】pandas Series rolling

Pandas2.2 Series Function application, GroupBy & window 方法描述Series.apply()用于将一个函数应用到 Series 的每个元素或整个 SeriesSeries.agg()用于对 Series 数据进行聚合操作Series.aggregate()用于对 Series 数据进行聚合操作Series.transform()用于对 Series…