news 2026/10/4 1:04:33

AI技术总监级拆解大模型|第09讲 ## RNN、LSTM、Seq2Seq 到底解决了什么?为什么最后还是走向了 Transformer

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI技术总监级拆解大模型|第09讲 ## RNN、LSTM、Seq2Seq 到底解决了什么?为什么最后还是走向了 Transformer

AI技术总监级拆解大模型|第09讲

RNN、LSTM、Seq2Seq 到底解决了什么?为什么最后还是走向了 Transformer

AI 学习系列|第09讲 / 共26讲

前面第08讲讲清楚了 CNN:

图片 ↓ 局部窗口 ↓ 卷积核 ↓ 特征图

这一讲换一个问题:

如果数据本身有顺序,模型怎么处理?

例如:

文本 语音 时间序列 传感器数据 网络流量 日志

这一讲只抓住一条技术主线:

序列问题 ↓ RNN ↓ LSTM ↓ Seq2Seq ↓ 固定 Context 瓶颈 ↓ Attention ↓ Transformer

01|为什么序列数据难?

看两个句子:

狗咬人 人咬狗

词差不多。

但顺序变了,意思也可能完全不同。

所以模型不能只知道:

有哪些词

还必须知道:

谁在前面 谁在后面 前面的信息怎样影响后面

这就是序列建模。


02|RNN:让模型带着“记忆”往前走

RNN 最核心的一条公式:

[
h_t=f(x_t,h_{t-1})
]

翻成人话:

当前输入 + 上一时刻状态 ↓ 当前状态

其中:

  • (x_t):当前输入
  • (h_{t-1}):上一时刻的隐藏状态
  • (h_t):当前隐藏状态

一个经典形式:

[
h_t=
\tanh(W_xx_t+W_hh_{t-1}+b)
]

程序员可以把它直接想成:

state=init();for(intt=0;t<T;++t){state=f(input[t],state);}

所以 RNN 的本质其实很朴素:

每读一个 Token,就更新一次内部状态。

它不会把历史原文完整存起来,而是把历史信息压缩进隐藏状态 (h_t)。


03|RNN 为什么曾经很重要?

因为它第一次非常自然地解决了一个问题:

怎么让模型知道“前面发生过什么”?

例如:

我今天去了一趟北京, 所以晚上准备……

当模型处理最后几个词时,它不能只看当前 Token。

RNN 让:

前面的信息 ↓ 隐藏状态 ↓ 继续传到后面

于是模型具备了最基本的上下文记忆能力。


04|但 RNN 有两个大问题

问题一:它天然串行

h1 → h2 → h3 → h4 → h5

想算:

h5

通常得先算:

h4

而 h4 又依赖 h3。

所以:

RNN 的时间维存在强依赖,难以像大规模矩阵运算那样充分并行。

这对 GPU 很关键。

GPU 喜欢:

很多相似计算 同时做

而 RNN 更像:

先做1 ↓ 再做2 ↓ 再做3 ↓ 再做4

所以 RNN 不是不能上 GPU,而是沿着时间维的并行度受到限制。


问题二:长距离依赖

假设:

Token1 Token2 Token3 …… Token100

如果 Token1 的信息要影响 Token100,就必须经过:

h1 → h2 → h3 → …… → h100

训练时,梯度也要经过很多步。

因此:

[
\frac{\partial L}{\partial h_t}

\frac{\partial L}{\partial h_T}
\prod_{k=t+1}^{T}
\frac{\partial h_k}{\partial h_{k-1}}
]

关键就在:

[
\prod
]

也就是很多项连续相乘。

如果长期接近:

[
0.8
]

那么:

[
0.8^{10}\approx0.107
]

[
0.8{50}\approx1.43\times10{-5}
]

梯度越来越小。

这就是:

梯度消失。

反过来,长期大于 1,则可能:

梯度爆炸。

所以 RNN 的真正问题不是简单一句“记不住长文本”。

更准确地说:

远处的信息需要经过很多次递归状态传递,训练时很难稳定地把它传到很远的位置。


05|LSTM:给 RNN 加一个“记忆管理系统”

RNN 的问题很自然:

能不能让网络自己决定,什么应该忘掉,什么应该留下?

于是有了 LSTM。

LSTM:

Long Short-Term Memory

核心组件:

Forget Gate Input Gate Output Gate Cell State

不要先背四个名字。

先把它理解成:

旧信息 ↓ 要不要忘? 新信息 ↓ 要不要写? 最后 ↓ 哪些信息要输出?

06|LSTM 的数学核心

Forget Gate

决定旧信息保留多少:

[
f_t=
\sigma(W_f[x_t,h_{t-1}]+b_f)
]

sigmoid 的输出在:

[
0\sim1
]

所以可以理解成:

0 → 基本忘掉 0.5 → 留一部分 1 → 基本保留

Input Gate

决定新信息写入多少:

[
i_t=
\sigma(W_i[x_t,h_{t-1}]+b_i)
]


Candidate Memory

准备写进去的新信息:

[
\tilde C_t=
\tanh(W_c[x_t,h_{t-1}]+b_c)
]


Cell State

真正关键的一条:

[
C_t=
f_t\odot C_{t-1}
+
i_t\odot\tilde C_t
]

翻成人话:

旧记忆 × 保留多少 + 新信息 × 写入多少 = 新记忆

这就是 LSTM 最值得记住的公式。


Output Gate

决定当前输出多少:

[
o_t=
\sigma(W_o[x_t,h_{t-1}]+b_o)
]

最终:

[
h_t=
o_t\odot\tanh(C_t)
]

所以:

LSTM 的核心,本质上是让记忆流动变得可控制。


07|LSTM 比 RNN 改进了什么?

可以直接记:

RNN = 当前输入 + 上一状态 ↓ 新状态

而:

LSTM = 当前输入 + 上一状态 ↓ 决定: 忘多少 写多少 写什么 输出多少 ↓ 新记忆

所以:

RNN 是“有记忆”,LSTM 是“管理记忆”。

但是有一件事没有改变:

h1 → h2 → h3 → h4

LSTM 仍然需要按时间顺序递归。

所以它改善了长期依赖,却没有消灭串行计算。


08|Seq2Seq:从“理解一个序列”到“生成另一个序列”

很多任务是:

输入序列 ↓ 输出序列

比如:

英文 ↓ 中文

于是出现:

Sequence-to-Sequence

也就是:

Seq2Seq

经典结构:

输入序列 ↓ Encoder ↓ Context ↓ Decoder ↓ 输出序列

09|Encoder 和 Decoder 各干什么?

Encoder

负责:

读取输入。

可以理解成:

state=init();for(intt=0;t<input_len;++t){state=encoder(input[t],state);}context=state;

最终得到:

输入序列 ↓ Context

Decoder

负责:

根据 Context 生成输出。

Context ↓ 输出第1个 Token ↓ 输出第2个 Token ↓ 输出第3个 Token ↓ ……

所以:

Encoder = 读 Decoder = 写

10|Seq2Seq 又遇到一个大问题

假设输入特别长:

Token1 Token2 Token3 …… Token100

最后:

100个Token ↓ Encoder ↓ 一个固定长度 Context ↓ Decoder

这相当于:

把大量信息强行压进一个固定大小的瓶子。

输入越长,需要保留的信息越多。

但 Context:

大小固定

于是就出现:

信息瓶颈。


11|这就是 Attention 出现的原因

以前:

整句话 ↓ 一个 Context ↓ Decoder

Attention 改变思路:

当前计算 ↓ 去已有信息里找 ↓ 哪些内容与我现在最相关? ↓ 取这些信息 ↓ 继续计算

例如当前正在生成某个词:

Token1 0.03 Token2 0.05 Token3 0.72 Token4 0.15 Token5 0.05

说明当前计算更关注 Token3。

所以 Attention 的核心思想不是:

“给重点打分。”

而是:

当前计算需要什么信息,就动态访问什么信息。

这一步非常关键。

因为它改变了:

信息必须被压缩成一个状态

这个限制。


12|从 RNN 一直走到 Transformer

现在把整条技术路线串起来:

序列问题 ↓ RNN ↓ 用 Hidden State 保存过去 ↓ 发现: ① 时间维串行 ② 长距离依赖困难 ↓ LSTM ↓ 用 Gate + Cell State 管理记忆 ↓ 长期依赖得到改善 ↓ 但仍然需要递归 ↓ Seq2Seq ↓ Encoder → Context → Decoder ↓ 固定 Context 成为信息瓶颈 ↓ Attention ↓ 动态访问已有信息 ↓ Transformer

所以:

Transformer 并不是凭空出现的。它是在解决一连串前代模型暴露出来的问题。


13|为什么这与 GPT 有直接关系?

后面的 GPT 基于 Transformer。

而 Transformer 的核心计算大量采用:

矩阵乘法 + Tensor 运算 + 大规模并行

这些计算非常适合 GPU。

于是形成:

Transformer ↓ GPU 并行 ↓ 更大的模型 ↓ 更多数据 ↓ 更长训练 ↓ 更强能力

所以如果没有理解:

RNN ↓ LSTM ↓ Seq2Seq ↓ Attention

直接去学 GPT,很容易只记住:

“GPT 使用 Transformer”

却不知道:

Transformer 到底解决了什么问题。


14|本讲最该记住的几个公式

RNN:

[
h_t=f(x_t,h_{t-1})
]

经典形式:

[
h_t=
\tanh(W_xx_t+W_hh_{t-1}+b)
]

长距离梯度:

[
\frac{\partial L}{\partial h_t}

\frac{\partial L}{\partial h_T}
\prod
\frac{\partial h_k}{\partial h_{k-1}}
]

LSTM:

[
C_t=
f_t\odot C_{t-1}
+
i_t\odot\tilde C_t
]

记住这些公式,不是为了考试。

而是为了真正知道:

RNN 为什么叫递归状态 LSTM 为什么叫记忆管理 梯度消失 为什么会出现

15|一句话吃透第09讲

RNN 用状态保存过去,LSTM 用门控管理记忆,Seq2Seq 用 Encoder-Decoder 完成序列到序列,但固定长度 Context 又产生信息瓶颈,最终把技术推向 Attention 和 Transformer。


16|下一讲

第10讲|Attention 与 Transformer:Q、K、V 到底在算什么?

下一讲正式开始算:

[
Q=XW_Q
]

[
K=XW_K
]

[
V=XW_V
]

然后一步一步算:

[
QK^T
]

[
\frac{QK^T}{\sqrt{d_k}}
]

[
\operatorname{softmax}
]

最后:

[
\operatorname{softmax}
\left(
\frac{QK^T}{\sqrt{d_k}}
\right)V
]

并进一步理解:

Self-Attention ↓ Multi-Head Attention ↓ Residual ↓ LayerNorm ↓ Feed Forward ↓ Transformer Block

这一讲开始,真正进入现代大模型的核心计算。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 1:03:38

MR25H40CDF SPI MRAM在伺服驱动器掉电数据记录中的设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 1:02:58

MR25H40CDF与STM32F427ZI:工业级MRAM存储方案全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 1:01:57

Matlab双目相机标定实战:从角点匹配到工业级精度交付

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 1:01:06

GEOquery下载原始数据:R语言生信分析的源头可控实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 1:01:05

FPGA SPI驱动时序调试实战:从Verilog到示波器精调

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 1:00:56

Transformer聊天机器人毕设实战:从源码解析到模型训练与部署

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华