Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通俗LSTM长短时记忆循环神经网络介绍

通俗LSTM长短时记忆循环神经网络介绍

原创
作者头像
卡尔曼和玻尔兹曼谁曼
发布于 2019-03-03 00:48:35
发布于 2019-03-03 00:48:35
2.6K0
举报

版权声明:本文为博主原创文章,转载请注明原文出处!

写作时间:2019-03-02 18:20:11

本文部分图片素材来自互联网,如有侵权,请联系作者删除!

通俗LSTM长短时记忆循环神经网络介绍

LSTM图解

处理流程

在上一篇文章中简单介绍了经典RNN模型,并提到了RNN的一些缺点。LSTM(Long Short-Term Memory)解决了经典RNN不能很好地保存长时序信息的缺点,得到了更加广泛地应用。下面简单说说LSTM的流程。

Long Short-Term Memory
Long Short-Term Memory

通过对比我们可以发现,LSTM和经典RNN有如下的区别:

  • 除了中间状态H,还多了一个C
  • 每个循环网络的单元(Cell)变得复杂了(多了所谓的三道门“遗忘门”(forget gate),“输入门”(input gate)和“输出门”(output gate))

这里所谓的“门”其实就是选择性地对信息进行过滤,在实践中用sigmoid函数(在图中用σ表示)实现。

首先,t1时刻的输入ht1xt经过一个线性变换+sigmoid激活以后(这就是所谓的遗忘门),输出ftft再与ct1进行相乘(element-wise multiplication)得到一个中间结果。

然后,t1时刻的输入ht1xt经过另外一个线性变换+sigmoid激活以后(这就是所谓的输入门),输出lt。同时,ht1xt经过再另外一个线性变换+tanh激活以后),与lt相乘得到一个中间结果。这个中间结果和上一步的中间结果相加(element-wise addition)得到ct

最后,t1时刻的输入ht1xt经过另外一个线性变换+sigmoid激活以后(这就是所谓的输出门),输出otot与经过tanhct相乘得到ht

至此,所有的状态更新完毕。

流程图解

下面给出上面文字描述的步骤所对应的数学公式:

LSTM第一步遗忘门
LSTM第一步遗忘门
LSTM第二步输入门
LSTM第二步输入门
LSTM得到中间状态C
LSTM得到中间状态C
LSTM第三步输出门
LSTM第三步输出门

总结说明

LSTM数据管道
LSTM数据管道

上图的左子图给出了对于每个门的输入和输出,右子图说明了每个门的作用。

PyTorch实战

我们还是以《最简单的RNN回归模型入门》中的使用Sin预测Cos的例子进行演示,代码跟之间的没有太大的区别,唯一的不同就是在中间状态更新的时候,现在有C和H两种中间状态需要更新。

代码语言:txt
AI代码解释
复制
import torch
from torch import nn
import numpy as np
import matplotlib.pyplot as plt

torch.manual_seed(2019)

# 超参设置
TIME_STEP = 20  # RNN时间步长
INPUT_SIZE = 1  # RNN输入尺寸
INIT_LR = 0.02  # 初始学习率
N_EPOCHS = 100  # 训练回数


class RNN(nn.Module):
    def __init__(self):
        super(RNN, self).__init__()
        self.rnn = nn.LSTM(
            input_size=INPUT_SIZE,
            hidden_size=32,  # RNN隐藏神经元个数
            num_layers=1,  # RNN隐藏层个数
        )
        self.out = nn.Linear(32, 1)

    def forward(self, x, h):
        # x (time_step, batch_size, input_size)
        # h (n_layers, batch, hidden_size)
        # out (time_step, batch_size, hidden_size)
        out, h = self.rnn(x, h)
        prediction = self.out(out)
        return prediction, h


rnn = RNN()
print(rnn)

optimizer = torch.optim.Adam(rnn.parameters(), lr=INIT_LR)
loss_func = nn.MSELoss()
h_state = None  # 初始化隐藏层

plt.figure()
plt.ion()
for step in range(N_EPOCHS):
    start, end = step * np.pi, (step + 1) * np.pi  # 时间跨度
    # 使用Sin函数预测Cos函数
    steps = np.linspace(start, end, TIME_STEP, dtype=np.float32, endpoint=False)
    x_np = np.sin(steps)
    y_np = np.cos(steps)
    x = torch.from_numpy(x_np[:, np.newaxis, np.newaxis])  # 尺寸大小为(time_step, batch, input_size)
    y = torch.from_numpy(y_np[:, np.newaxis, np.newaxis])

    prediction, h_state = rnn(x, h_state)  # RNN输出(预测结果,隐藏状态)
    h_state = (h_state[0].detach(), h_state[1].detach())  # 注意这里和原来的RNN的不同
    loss = loss_func(prediction, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # 绘制中间结果
    plt.cla()
    plt.plot(steps, y_np, 'r-')
    plt.plot(steps, prediction.data.numpy().flatten(), 'b-')
    plt.draw()
    plt.pause(0.1)
plt.ioff()
plt.show()

TIME_STEP设置为20的时候,输出结果如下:

LSTM Sin预测Cos
LSTM Sin预测Cos

参考资料

  1. Understanding LSTM Networks
  2. Understanding LSTM and its diagrams(

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
最简单的RNN回归模型入门(PyTorch)
至于RNN的能做什么,擅长什么,这里不赘述。如果不清楚,请先维基一下,那里比我说得更加清楚。
卡尔曼和玻尔兹曼谁曼
2019/03/03
6.8K0
最简单的RNN回归模型入门(PyTorch)
回归模型中的u_什么是面板回归模型
版权声明:本文为博主原创文章,转载请注明原文出处! 写作时间:2019-03-02 12:46:15
全栈程序员站长
2022/11/01
7820
回归模型中的u_什么是面板回归模型
【深度学习实验】循环神经网络(二):使用循环神经网络(RNN)模型进行序列数据的预测
本实验实现了一个简单的循环神经网络(RNN)模型,并使用该模型进行序列数据的预测,本文将详细介绍代码各个部分的实现,包括模型的定义、训练过程以及预测结果的可视化。
Qomolangma
2024/07/30
3480
【深度学习实验】循环神经网络(二):使用循环神经网络(RNN)模型进行序列数据的预测
评论继续送书,史上最容易懂的RNN文章,小白也能看得懂
最近写了一些基础的东西,总是理解性的,没有看到实例,今天就讲一个基础的网络结构RNN,然后写个实例,体验下深度神经网络的牛逼,这次学习下rnn神经网络,虽然看起来好高深,不过不用慌,没有理论,全是大白话,大家都可以懂的。
香菜聊游戏
2021/09/29
4580
评论继续送书,史上最容易懂的RNN文章,小白也能看得懂
【机器学习-神经网络】循环神经网络
  在前面两篇文章中,我们分别介绍了神经网络的基础概念和最简单的MLP,以及适用于图像处理的CNN。从中我们可以意识到,不同结构的神经网络具有不同的特点,在不同任务上具有自己的优势。例如MLP复杂度低、训练简单、适用范围广,适合解决普通任务或作为大型网络的小模块;CNN可以捕捉到输入中不同尺度的关联信息,适合从图像中提取特征。而对于具有序列特征的数据,例如一年内随时间变化的温度、一篇文章中的文字等,它们具有明显的前后关联。然而这些关联的数据在序列中出现的位置可能间隔非常远,例如文章在开头和结尾描写了同一个事物,如果用CNN来提取这些关联的话,其卷积核的大小需要和序列的长度相匹配。当数据序列较长时,这种做法会大大增加网络复杂度和训练难度。因此,我们需要引入一种新的网络结构,使其能够充分利用数据的序列性质,从前到后分析数据、提取关联。这就是本文要介绍的循环神经网络(recurrent neural networks,RNN)。
Francek Chen
2025/01/22
1920
【机器学习-神经网络】循环神经网络
LSTM应用场景以及pytorch实例
在去年介绍的一篇paper中,应用了多任务RNN来解决问题,当时RNN指的即是LSTM。本文介绍LSTM实现以及应用。
何武凡
2023/03/09
2.9K0
LSTM应用场景以及pytorch实例
【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型
LSTM(长短期记忆网络)是一种循环神经网络(RNN)的变体,用于处理序列数据。它具有记忆单元和门控机制,可以有效地捕捉长期依赖关系。
Qomolangma
2024/07/30
1.4K0
【深度学习实验】循环神经网络(三):门控制——自定义循环神经网络LSTM(长短期记忆网络)模型
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
人工神经网络(ANN)的设计灵感来源于人类大脑中神经元的工作方式。自从第一个感知器模型(Perceptron)被提出以来,人工神经网络已经经历了多次的演变和优化。
TechLead
2023/10/21
20.9K0
长短时记忆网络(LSTM)完整实战:从理论到PyTorch实战演示
突破 LSTM 核心精髓 !!
想象一下,你正在听一个故事。为了理解这个故事,你需要记住之前发生的事情。比如,如果故事一开始提到了一个名叫小红的女孩,那么当她再次出现时,你需要记住她是谁,做过什么事。
Python编程爱好者
2024/07/22
1260
突破 LSTM 核心精髓 !!
循环神经网络RNN完全解析:从基础理论到PyTorch实战
循环神经网络(Recurrent Neural Network, RNN)是一类具有内部环状连接的人工神经网络,用于处理序列数据。其最大特点是网络中存在着环,使得信息能在网络中进行循环,实现对序列信息的存储和处理。
TechLead
2023/10/21
6.3K0
循环神经网络RNN完全解析:从基础理论到PyTorch实战
循环神经网络——中篇【深度学习】【PyTorch】【d2l】
来杯Sherry
2023/09/19
3930
循环神经网络——中篇【深度学习】【PyTorch】【d2l】
【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
首先祝各位专知好友,中秋佳节快乐! 【导读】主题链路知识是我们专知的核心功能之一,为用户提供AI领域系统性的知识学习服务,一站式学习人工智能的知识,包含人工智能( 机器学习、自然语言处理、计算机视觉等)、大数据、编程语言、系统架构。使用请访问专知 进行主题搜索查看 - 桌面电脑访问www.zhuanzhi.ai, 手机端访问www.zhuanzhi.ai 或关注微信公众号后台回复" 专知"进入专知,搜索主题查看。值国庆佳节,专知特别推出独家特刊-来自中科院自动化所专知小组博士生huaiwen和Jin创
WZEARW
2018/04/09
2.3K0
【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
深度学习 | 时序问题LSTM入门讲解
Recurrent Neural NetWork (RNN) 用于处理序列数据,序列数据预测模型的特点是某一步的输出不仅依赖于这一步的输入,还依赖于其他步的输入或输出。传统的序列数据机器学习模型有Hidden Markov Model (隐马尔可夫模型)、Conditional Random Field (条件随机场)。近年来,深度学习模型又带来了RNN,标准RNN结构极为简单,只有一个tanh层,其模型结构见图1。
郭好奇同学
2021/07/30
2.7K0
深度学习 | 时序问题LSTM入门讲解
Python人工智能 | 十四.循环神经网络LSTM回归案例之sin曲线预测
前一篇文章详细讲解了如何评价神经网络,绘制训练过程中的loss曲线,并结合图像分类案例讲解精确率、召回率和F值的计算过程。本篇文章将分享循环神经网络LSTM RNN如何实现回归预测,通过sin曲线拟合实现如下图所示效果。本文代码量比较长,但大家还是可以学习下的。基础性文章,希望对您有所帮助!
Eastmount
2022/03/30
1.2K0
Python人工智能 | 十四.循环神经网络LSTM回归案例之sin曲线预测
LSTM:克服长期依赖难题的循环神经网络升级方案
长短期记忆网络(Long Short-Term Memory)作为RNN的进阶架构,在序列建模领域具有里程碑意义。其核心突破在于通过智能门控系统,有效捕获跨越数百个时间步的语义关联,成功缓解了传统RNN存在的梯度消失/爆炸难题,在语音识别、金融预测等需要长程记忆的场景中表现卓越。
JavaEdge
2025/03/19
1910
使用循环神经网络做手写数字识别
做图像识别的使用卷积神经网络CNN是最好的选择,但是其实我们也可以使用循环神经网络RNN做,只是大部分时候没有卷积网络效果好!下面分析一下如何使用RNN做手写数字的识别。
卡尔曼和玻尔兹曼谁曼
2019/03/03
1.3K0
使用循环神经网络做手写数字识别
【AI 进阶笔记】LSTM 理解
在神经网络的世界里,RNN(循环神经网络)曾经是处理时序数据的大哥大。但有个致命问题——它记不住事儿!
繁依Fanyi
2025/04/10
4240
RNN 模型介绍
RNN (Recurrent Neural Network), 中文称作循环神经网络, 它一般以序列数据为输入, 通过网络内部的结构设计有效捕捉序列之间的关系特征, 一般也是以序列形式进行输出.
为为为什么
2023/04/22
3.4K0
RNN 模型介绍
自然语言处理(一):RNN
「循环神经网络」(Recurrent Neural Network,RNN)是一个非常经典的面向序列的模型,可以对自然语言句子或是其他时序信号进行建模。进一步讲,它只有一个物理RNN单元,但是这个RNN单元可以按照时间步骤进行展开,在每个时间步骤接收当前时间步的输入和上一个时间步的输出,然后进行计算得出本时间步的输出。
数据科学工厂
2023/11/13
3540
自然语言处理(一):RNN
【Pytorch学习笔记十二】循环神经网络(RNN)详细介绍(常用网络结构及原理)
循环神经网络的来源是为了刻画一个序列当前的输出与之前信息的关系。从网络结构上,循环神经网络会记忆之前的信息,并利用之前的信息影响后面结点的输出。即:循环神经网络的隐藏层之间的结点是有连接的,隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory networks,LSTM)是常见的循环神经网络 。
自学气象人
2022/11/02
2.3K0
【Pytorch学习笔记十二】循环神经网络(RNN)详细介绍(常用网络结构及原理)
推荐阅读
相关推荐
最简单的RNN回归模型入门(PyTorch)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档