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

前言

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

长距离依赖问题

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

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

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

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

LSTM的核心思想

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

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

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

LSTM门简介

LSTM有三个门,分别是:

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

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

三个输入门

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

候选记忆单元

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

记忆状态

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

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

隐状态

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

blog.csdnimg.cn/direct/29dd0a2418c04d2d98866a31dccd52d3.png#pic_center)

总结

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

Pytorch实践

pytorchAPI

python 复制代码
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网络结构。

python 复制代码
import torch  
import torch.nn as nn 

class SimpleLSTM(nn.Module):
    def __init__(self, input_size, hidden_size, num_layers, output_size):
        super().__init__()
        # 定义LSTM
        self.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)

输出:

txt 复制代码
torch.Size([5, 1, 1])

参考资料

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

相关推荐
Elastic 中国社区官方博客20 分钟前
Elasticsearch Open Inference API 增加了对 Jina AI 嵌入和 Rerank 模型的支持
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索·jina
美狐美颜sdk41 分钟前
直播美颜工具架构设计与性能优化实战:美颜SDK集成与实时处理
深度学习·美颜sdk·第三方美颜sdk·视频美颜sdk·美颜api
AWS官方合作商1 小时前
Amazon Lex:AI对话引擎重构企业服务新范式
人工智能·ai·机器人·aws
workflower1 小时前
Prompt Engineering的重要性
大数据·人工智能·设计模式·prompt·软件工程·需求分析·ai编程
陈无左耳、1 小时前
HarmonyOS学习第3天: 环境搭建开启鸿蒙开发新世界
学习·华为·harmonyos
curemoon1 小时前
理解都远正态分布中指数项的精度矩阵(协方差逆矩阵)
人工智能·算法·矩阵
柃歌1 小时前
【UCB CS 61B SP24】Lecture 7 - Lists 4: Arrays and Lists学习笔记
java·数据结构·笔记·学习·算法
柃歌1 小时前
【UCB CS 61B SP24】Lecture 4 - Lists 2: SLLists学习笔记
java·数据结构·笔记·学习·算法
胡桃不是夹子2 小时前
CPU安装pytorch(别点进来)
人工智能·pytorch·python
Fansv5872 小时前
深度学习-6.用于计算机视觉的深度学习
人工智能·深度学习·计算机视觉