LSTM 长短期记忆网络
给神经网络装上"选择性记忆"——不再一股脑记住所有,而是聪明地决定什么值得留、什么该遗忘
✦ 先看效果:唐诗续写
输入几个字,模型逐字续写——纯靠学习 5 万首唐诗的字符规律,不依赖任何规则库。
温度越高,越天马行空;越低,越保守规整
01 核心原理(大白话版)
你看一部100集的电视剧。看到第80集时,你不会记得第3集里每句台词,但你一定记得"主角的父亲其实是反派"这条关键线索——因为它太重要了,你的大脑把它保存了下来。
普通 RNN 做不到这件事。它像一个短暂的工作记忆,每处理一个新输入,旧信息就会被稀释,100步前的信息到了现在基本已经消失殆尽。LSTM 的设计目标就是解决这个问题:让网络自己决定什么值得长期记住、什么可以遗忘。
记忆流水线:三道闸门
LSTM 在普通 RNN 的基础上引入了一条额外的"记忆通道"(细胞状态),以及三个可学习的"闸门"来控制信息进出:
看看当前输入和上一步记忆,决定细胞状态里哪些内容不再需要。比如看到"新话题开始"就把上一个话题的细节清掉。输出 0(全丢)到 1(全留)之间的系数。
决定当前输入里有哪些值得记进长期记忆。不是每个词都重要,只有关键信息才写入细胞状态。
细胞状态里存了很多东西,但当前时刻只需要输出和任务相关的部分。输出门决定把哪部分记忆"读出来"传给下一步或最终预测。
门控机制的本质:每个门都是一个小神经网络,输出 0~1 之间的值,用来对信息做"软开关"。这些门的参数通过反向传播来学习,网络自己学会什么时候该记、该忘、该输出。
和普通 RNN 相比,LSTM 赢在哪?
普通 RNN
记忆只有一条"短线",每步都会被新输入覆盖。反向传播时梯度指数衰减,100步前的信号几乎无法影响权重更新——这叫梯度消失问题。
LSTM
细胞状态是一条"高速公路",信息可以直接跨越很多时间步流传,梯度也能沿这条路反向传播而不衰减。能有效处理数百步的长序列依赖。
LSTM 擅长什么任务?
记住上文语境,生成连贯句子
读完整句话再判断情感倾向
股价、天气、传感器数据预测
前后音节互相依赖的序列建模
一步步构建 LSTM
从时序数据到序列预测,逐步搭建。
生成正弦波,归一化后构建滑窗输入序列 xs → 下一步预测值 ys。
LSTM(32) 层记住序列上下文,Dense(1) 输出预测值。
训练完成后在测试集上滚动预测,每次把预测值喂回去作为下一步输入。
02 代码
03 学术性讲解
LSTM(Long Short-Term Memory)由 Hochreiter 和 Schmidhuber 于 1997 年提出,是一种特殊的循环神经网络。它通过引入细胞状态(Cell State)和三个门控机制,解决了标准 RNN 的梯度消失问题,能够学习长达数百时间步的长期依赖关系。
为什么需要 LSTM?
普通 RNN 在处理长序列时,梯度会逐层指数衰减,导致早期信息难以传递。设序列长度为 T,反向传播时梯度为:
若每步的 Jacobian 矩阵的谱范数小于1,连乘后梯度趋向于零(梯度消失);大于1则梯度爆炸。LSTM 通过细胞状态的加法更新路径,使得梯度可以无损地流过多个时间步。
LSTM 的三个门
决定从细胞状态中丢弃什么信息:f_t = σ(W_f · [h_{t-1}, x_t] + b_f)
决定将什么新信息存储到细胞状态:i_t = σ(W_i · [h_{t-1}, x_t] + b_i),候选值 C̃_t = tanh(W_C · [h_{t-1}, x_t] + b_C)
决定输出什么信息:o_t = σ(W_o · [h_{t-1}, x_t] + b_o)
细胞状态更新
遗忘旧信息,写入新信息:
其中 ⊙ 表示逐元素乘法(Hadamard 积)。这条加法通路是梯度能长距离传播的关键。
隐藏状态输出
隐藏状态 h_t 同时作为当前时间步的输出和传递给下一时间步的记忆。
LSTM 门控状态动画
观察 LSTM 处理序列时遗忘门、输入门、输出门的状态变化:
总结
长期记忆细胞状态
选择性遗忘/记忆
文本、时序预测
RNN 的改进变体