先看效果:唐诗续写

输入几个字,模型逐字续写——纯靠学习 5 万首唐诗的字符规律,不依赖任何规则库。

温度越高,越天马行空;越低,越保守规整

模型加载中...
续写结果
续写结果将在这里逐字出现…

01 核心原理(大白话版)

你看一部100集的电视剧。看到第80集时,你不会记得第3集里每句台词,但你一定记得"主角的父亲其实是反派"这条关键线索——因为它太重要了,你的大脑把它保存了下来。

普通 RNN 做不到这件事。它像一个短暂的工作记忆,每处理一个新输入,旧信息就会被稀释,100步前的信息到了现在基本已经消失殆尽。LSTM 的设计目标就是解决这个问题:让网络自己决定什么值得长期记住、什么可以遗忘

记忆流水线:三道闸门

LSTM 在普通 RNN 的基础上引入了一条额外的"记忆通道"(细胞状态),以及三个可学习的"闸门"来控制信息进出:

1
遗忘门:要不要丢掉过去?

看看当前输入和上一步记忆,决定细胞状态里哪些内容不再需要。比如看到"新话题开始"就把上一个话题的细节清掉。输出 0(全丢)到 1(全留)之间的系数。

2
输入门:要不要写入新东西?

决定当前输入里有哪些值得记进长期记忆。不是每个词都重要,只有关键信息才写入细胞状态。

3
输出门:现在要输出什么?

细胞状态里存了很多东西,但当前时刻只需要输出和任务相关的部分。输出门决定把哪部分记忆"读出来"传给下一步或最终预测。

门控机制的本质:每个门都是一个小神经网络,输出 0~1 之间的值,用来对信息做"软开关"。这些门的参数通过反向传播来学习,网络自己学会什么时候该记、该忘、该输出。

和普通 RNN 相比,LSTM 赢在哪?

普通 RNN

记忆只有一条"短线",每步都会被新输入覆盖。反向传播时梯度指数衰减,100步前的信号几乎无法影响权重更新——这叫梯度消失问题

LSTM

细胞状态是一条"高速公路",信息可以直接跨越很多时间步流传,梯度也能沿这条路反向传播而不衰减。能有效处理数百步的长序列依赖。

LSTM 擅长什么任务?

文本生成

记住上文语境,生成连贯句子

情感分析

读完整句话再判断情感倾向

时序预测

股价、天气、传感器数据预测

语音识别

前后音节互相依赖的序列建模

一步步构建 LSTM

从时序数据到序列预测,逐步搭建。

第一步 准备时序数据

生成正弦波,归一化后构建滑窗输入序列 xs → 下一步预测值 ys。

第二步 搭建 LSTM 模型

LSTM(32) 层记住序列上下文,Dense(1) 输出预测值。

第三步 训练并滚动预测

训练完成后在测试集上滚动预测,每次把预测值喂回去作为下一步输入。

02 代码

03 学术性讲解

LSTM(Long Short-Term Memory)由 Hochreiter 和 Schmidhuber 于 1997 年提出,是一种特殊的循环神经网络。它通过引入细胞状态(Cell State)和三个门控机制,解决了标准 RNN 的梯度消失问题,能够学习长达数百时间步的长期依赖关系。

为什么需要 LSTM?

普通 RNN 在处理长序列时,梯度会逐层指数衰减,导致早期信息难以传递。设序列长度为 T,反向传播时梯度为:

∂L/∂h₀ = ∏ᵢ₌₁ᵀ (∂hᵢ/∂hᵢ₋₁)

若每步的 Jacobian 矩阵的谱范数小于1,连乘后梯度趋向于零(梯度消失);大于1则梯度爆炸。LSTM 通过细胞状态的加法更新路径,使得梯度可以无损地流过多个时间步。

LSTM 的三个门

1
遗忘门 (Forget Gate)

决定从细胞状态中丢弃什么信息:f_t = σ(W_f · [h_{t-1}, x_t] + b_f)

2
输入门 (Input Gate)

决定将什么新信息存储到细胞状态:i_t = σ(W_i · [h_{t-1}, x_t] + b_i),候选值 C̃_t = tanh(W_C · [h_{t-1}, x_t] + b_C)

3
输出门 (Output Gate)

决定输出什么信息:o_t = σ(W_o · [h_{t-1}, x_t] + b_o)

细胞状态更新

遗忘旧信息,写入新信息:

C_t = f_t ⊙ C_{t-1} + i_t ⊙ C̃_t

其中 ⊙ 表示逐元素乘法(Hadamard 积)。这条加法通路是梯度能长距离传播的关键。

隐藏状态输出

h_t = o_t ⊙ tanh(C_t)

隐藏状态 h_t 同时作为当前时间步的输出和传递给下一时间步的记忆。

LSTM 门控状态动画

观察 LSTM 处理序列时遗忘门、输入门、输出门的状态变化:

总结

记忆

长期记忆细胞状态

门控

选择性遗忘/记忆

应用

文本、时序预测

结构

RNN 的改进变体