掌握 RNN 与 LSTM 模型结构

目录

一、前言

二、为什么传统神经网络无法处理序列数据

[三、什么是 RNN](#三、什么是 RNN)

[四、RNN 的展开结构](#四、RNN 的展开结构)

[五、RNN 的数学原理](#五、RNN 的数学原理)

[六、RNN 的工作流程](#六、RNN 的工作流程)

[七、RNN 的优势](#七、RNN 的优势)

[八、RNN 的致命缺陷](#八、RNN 的致命缺陷)

[九、什么是 LSTM](#九、什么是 LSTM)

[十、LSTM 模型结构](#十、LSTM 模型结构)

[十一、遗忘门(Forget Gate)](#十一、遗忘门(Forget Gate))

[十二、输入门(Input Gate)](#十二、输入门(Input Gate))

[十三、输出门(Output Gate)](#十三、输出门(Output Gate))

[十四、LSTM 工作流程](#十四、LSTM 工作流程)

[十五、RNN 与 LSTM 对比](#十五、RNN 与 LSTM 对比)

[十六、使用 PyTorch 实现 RNN](#十六、使用 PyTorch 实现 RNN)

[十七、使用 PyTorch 实现 LSTM](#十七、使用 PyTorch 实现 LSTM)

[十八、LSTM 文本分类实战](#十八、LSTM 文本分类实战)

[十九、RNN/LSTM 在 NLP 中的应用](#十九、RNN/LSTM 在 NLP 中的应用)

[二十、为什么 Transformer 取代了 LSTM](#二十、为什么 Transformer 取代了 LSTM)

二十一、面试高频问题

什么是RNN?

RNN为什么能够记忆历史信息?

RNN最大问题是什么?

LSTM如何解决长期依赖?

LSTM有几个门?

为什么Transformer取代LSTM?

二十二、总结


在前面的文章中,我们学习了:

复制代码
感知器

多层神经网络

梯度下降

反向传播

这些模型都有一个共同特点:

复制代码
输入之间彼此独立

例如:

复制代码
图片分类

房价预测

用户画像

样本之间通常没有时间顺序关系。

但现实世界中存在大量:

复制代码
时序数据

例如:

复制代码
自然语言

股票价格

天气变化

语音信号

这些数据都有一个特点:

复制代码
当前数据

依赖历史数据

例如一句话:

复制代码
今天天气非常____

看到这里:

复制代码
大脑已经猜到

后面可能是

好

热

冷

因为前面的内容提供了上下文信息。

传统神经网络无法处理这种依赖关系。

于是:

复制代码
RNN

循环神经网络

诞生了。

随后又发展出:

复制代码
LSTM

长短期记忆网络

成为 NLP 领域的重要基础模型。

本文将系统讲解:

复制代码
什么是RNN

RNN结构原理

RNN存在的问题

什么是LSTM

LSTM门控机制

LSTM与RNN区别

Python实战

二、为什么传统神经网络无法处理序列数据

假设:

复制代码
输入:

我 爱 人 工 智 能

传统神经网络处理方式:

复制代码
我

爱

人

工

智

能

彼此独立。

模型无法知道:

复制代码
爱

是在

我

之后出现

更无法知道:

复制代码
人工智能

其实是一个整体词语

因此:

复制代码
传统神经网络

缺乏记忆能力

三、什么是 RNN

RNN:

复制代码
Recurrent Neural Network

循环神经网络

核心思想:

复制代码
当前输出

不仅依赖当前输入

还依赖历史状态

结构如下:

可以理解为:

复制代码
神经网络拥有了记忆

四、RNN 的展开结构

RNN通常画成一个循环结构:

复制代码
flowchart LR

H --> H

但真正计算时会展开。

例如一句话:

复制代码
我 爱 深 度 学 习

展开后:

可以看到:

复制代码
历史信息

不断向后传递

五、RNN 的数学原理

每个时间步:

复制代码
输入:

Xt

上一时刻状态:

复制代码
Ht-1

计算当前状态:

复制代码
Ht = tanh(WxXt + WhHt-1 + b)

当前输出:

复制代码
Yt = WyHt

其中:

复制代码
Wx

输入权重

Wh

历史状态权重

Wy

输出权重

这也是 RNN 能够记忆历史信息的原因。


六、RNN 的工作流程

假设输入:

复制代码
今天

天气

很好

流程:

工作过程:

复制代码
读取"今天"

保存状态

↓

读取"天气"

结合历史状态

↓

读取"很好"

得到最终语义

七、RNN 的优势

相比传统神经网络:

RNN能够:

复制代码
记忆历史信息

处理变长输入

理解上下文关系

适用于:

复制代码
机器翻译

文本生成

语音识别

时间序列预测

例如:

复制代码
输入:

今天天气很好

预测:

适合出去玩

八、RNN 的致命缺陷

随着序列越来越长:

复制代码
梯度越来越小

称为:

复制代码
梯度消失

例如:

复制代码
0.1 × 0.1 × 0.1 × 0.1 × 0.1

结果:

复制代码
0.00001

导致:

复制代码
前面信息无法传递到后面

例如:

复制代码
我出生在北京......

(中间100个词)

......

我来自哪里?

RNN可能已经忘记:

复制代码
北京

这个信息。


九、什么是 LSTM

为了解决长期依赖问题。

1997年:

复制代码
Hochreiter

Schmidhuber

提出:

复制代码
LSTM

Long Short-Term Memory

即:

复制代码
长短期记忆网络

核心思想:

复制代码
增加记忆单元

控制信息保留与遗忘

十、LSTM 模型结构

LSTM比RNN复杂得多。

结构如下:

其核心:

复制代码
三个门

一个记忆单元

十一、遗忘门(Forget Gate)

作用:

复制代码
决定忘记哪些信息

例如:

复制代码
我昨天吃了苹果

今天下雨了

预测天气时:

复制代码
苹果信息

没有价值

可以丢弃。

遗忘门:

复制代码
输出0

表示忘记

或者:

复制代码
输出1

表示保留

十二、输入门(Input Gate)

作用:

复制代码
决定记录哪些新信息

例如:

复制代码
今天北京下雪

模型认为:

复制代码
下雪

非常重要

则写入记忆单元。


十三、输出门(Output Gate)

作用:

复制代码
决定哪些信息参与输出

例如:

复制代码
历史天气

当前天气

未来天气预测

输出门负责:

复制代码
选择有价值信息

十四、LSTM 工作流程

完整过程:

本质上:

复制代码
忘记旧信息

记录新信息

输出关键内容

十五、RNN 与 LSTM 对比

对比项 RNN LSTM
结构复杂度 简单 较复杂
参数量
训练速度 较慢
长期记忆
梯度消失 容易发生 大幅缓解
NLP效果 一般 更好

总结:

复制代码
RNN适合短序列

LSTM适合长序列

十六、使用 PyTorch 实现 RNN

创建RNN层:

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

rnn = nn.RNN(
    input_size=10,
    hidden_size=20,
    num_layers=1
)

输入数据:

python 复制代码
x = torch.randn(
    5,
    3,
    10
)

output, hidden = rnn(x)

print(output.shape)

输出:

复制代码
(5,3,20)

十七、使用 PyTorch 实现 LSTM

创建LSTM:

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

lstm = nn.LSTM(
    input_size=10,
    hidden_size=20,
    num_layers=2
)

输入:

python 复制代码
x = torch.randn(
    5,
    3,
    10
)

output,(hn,cn)=lstm(x)

print(output.shape)

输出:

复制代码
(5,3,20)

其中:

复制代码
hn

隐藏状态

cn

记忆状态

十八、LSTM 文本分类实战

构建情感分类模型:

python 复制代码
class SentimentModel(nn.Module):

    def __init__(self):

        super().__init__()

        self.lstm = nn.LSTM(
            input_size=100,
            hidden_size=128,
            batch_first=True
        )

        self.fc = nn.Linear(
            128,
            2
        )

    def forward(self,x):

        out,(h,c)=self.lstm(x)

        out=self.fc(h[-1])

        return out

用途:

复制代码
正面评论

负面评论

情感分析

十九、RNN/LSTM 在 NLP 中的应用

经典应用:

复制代码
机器翻译

聊天机器人

文本生成

语音识别

命名实体识别

例如:

复制代码
Google Translate

早期Siri

早期聊天机器人

都大量使用LSTM。


二十、为什么 Transformer 取代了 LSTM

虽然LSTM很强。

但仍然存在:

复制代码
无法并行计算

训练速度慢

长文本效果有限

因此2017年:

复制代码
Attention Is All You Need

提出:

复制代码
Transformer

逐渐取代:

复制代码
RNN

LSTM

如今:

复制代码
GPT

BERT

Claude

DeepSeek

全部基于Transformer。

但:

复制代码
理解Transformer

必须先理解RNN和LSTM

因为它们代表了:

复制代码
神经网络处理序列数据的演进过程

二十一、面试高频问题

什么是RNN?

复制代码
能够处理序列数据

具有记忆能力的神经网络

RNN为什么能够记忆历史信息?

复制代码
隐藏状态不断向后传递

RNN最大问题是什么?

复制代码
梯度消失

长期依赖问题

LSTM如何解决长期依赖?

复制代码
增加门控机制

控制信息流动

LSTM有几个门?

复制代码
遗忘门

输入门

输出门

为什么Transformer取代LSTM?

复制代码
支持并行计算

训练速度更快

长距离依赖能力更强

二十二、总结

RNN第一次让神经网络拥有了:

复制代码
记忆能力

而LSTM进一步解决了:

复制代码
长期依赖

梯度消失

问题。

整个技术演进路线:

复制代码
前馈神经网络
        ↓
RNN
        ↓
LSTM
        ↓
GRU
        ↓
Transformer
        ↓
GPT

可以说:

RNN开启了序列建模时代,LSTM让神经网络真正具备长期记忆能力,而Transformer则站在它们的肩膀上,推动了大语言模型时代的到来。掌握RNN与LSTM,是深入理解现代AI架构演进的重要一步。

相关推荐
jeffer_liu1 小时前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
何以解忧,唯有..1 小时前
Python包管理工具pip:从入门到精通
开发语言·python·pip
weixin_446260851 小时前
Agent 会自行回避吗?测量 LLM 智能体合规性的带内访问拒绝信号
人工智能
努力学习_小白1 小时前
ResNeXt-50——学习记录
pytorch·深度学习·学习
金銀銅鐵1 小时前
用 Tkinter 实现简单的猜数字游戏
后端·python
笨蛋©1 小时前
[实战] 2026年制造业FAI报告自动生成全流程解析与数字化提效指南
ai·数字化·cad·质量管理·制造业
Kobebryant-Manba1 小时前
记录动手学深度学习基础知识
人工智能·深度学习
syso_稻草人2 小时前
OpenSpec、Spec-Driven Development 与 CreateNow:AI 编码为什么开始从 Prompt 走向 Spec
人工智能·prompt
copyer_xyf2 小时前
Python 模块与包的导入导出
前端·后端·python