LSTM(Long Short-Term Memory)详解笔记

1. 为什么需要 LSTM

普通 RNN 的目标是处理序列数据,也就是输入在时间上有顺序依赖的数据,例如文本、语音、时间序列、视频帧等。RNN 的基本思想是:在每个时刻 ,不仅看当前输入 ,还看上一时刻的隐藏状态 ,从而得到当前隐藏状态 。形式上可以写成:

其中 常常是 是参数。

这个结构的核心问题在于:它虽然能“记住过去”,但记忆能力很差。因为隐藏状态每一步都要经过非线性变换和反复矩阵乘法,时间一长,早期信息就容易在传播中衰减掉。这就是经典的“长期依赖”难题。

更准确地说,RNN 在反向传播时会出现梯度消失和梯度爆炸问题。梯度消失意味着越早的时间步对最终损失的影响越难传回来,模型就很难学到“很久以前的信息到底该不该保留”。而 LSTM 正是为了解决这个问题而提出的。

2. LSTM 的核心思想

LSTM 的关键不是“更复杂”,而是“更会记”。它在 RNN 的基础上引入了一个新的记忆状态,通常记作 ,叫做 cell state(细胞状态、记忆单元)。可以把它理解成一条相对稳定的“记忆通道”,信息可以沿着这条通道更直接地流动,而不是每一步都被强烈改写。

LSTM 通过三个门来控制信息流动:

  1. 遗忘门 :决定上一时刻记忆 有多少要保留;

  2. 输入门 :决定当前输入中有多少信息写入记忆;

  3. 输出门 :决定当前时刻从记忆中输出多少作为隐藏状态

这三个门的值一般都在 之间,因此可以看成“比例开关”。值越接近 1,表示保留/写入/输出得越多;越接近 0,表示越少。

3. LSTM 的标准数学形式

设当前输入为 ,上一时刻隐藏状态为 ,上一时刻细胞状态为 。LSTM 的计算一般包括以下几步:

3.1 遗忘门

这里 表示把两个向量拼接起来, 是 sigmoid 函数:

因为 sigmoid 输出在 ,所以 可以逐维地控制上一时刻记忆的保留比例。

3.2 输入门与候选记忆

输入门:

候选记忆:

其中 表示“当前时刻准备写入的新内容候选”。它先经过 压缩到 ,这样数值稳定一些。

3.3 更新细胞状态

这是 LSTM 最关键的一步:

其中 表示按元素乘法。

这一步非常重要,它表达了两个动作:

  • 旧记忆通过 被选择性保留;

  • 新信息通过 被选择性写入。

这意味着记忆更新不再是“强行全覆盖”,而是“保留旧的,同时加入新的”。

3.4 输出门与隐藏状态

输出门:

隐藏状态:

这里 是对当前记忆内容做一个非线性压缩,再由输出门决定输出多少。

所以 LSTM 的本质可以概括为:
先决定“忘多少”,再决定“写多少”,最后决定“输出多少”。

4. 从信息流角度理解 LSTM

如果只看 RNN 的递推:

每一步都要把全部历史压缩到一个新的隐藏状态里,历史信息会不断被“重编码”。这就像你每看一页书,都把整本书重新手写一遍,时间一长必然丢信息。

而 LSTM 把信息分成两条流:

  • 一条是相对稳定的记忆流

  • 一条是当前可见状态流

记忆流不像普通 RNN 那样每次都被大幅变形,而是通过门控做“增量更新”。这就是它能保留长期信息的原因。

5. 为什么 LSTM 能缓解梯度消失

这是 LSTM 最值得认真理解的地方。

在普通 RNN 中,隐藏状态是连续嵌套的非线性函数,反向传播时梯度要经过很多次矩阵乘法和激活函数导数。如果这些导数大多小于 1,梯度就会指数级衰减。

LSTM 的关键在于细胞状态更新公式:

注意这里对 的传递是“加法”而不是“纯乘法嵌套”。如果在某些维度上 ,那么 可以较完整地传到 ,再传到更远的时刻。也就是说,梯度可以沿着这条近似线性的通道流动,减少了衰减。

更具体地看,如果只考虑 的局部导数,有:

因为 的值在 ,所以它可以通过学习来决定保留多少梯度。如果模型发现某段信息很重要,它可以让对应维度的遗忘门接近 1,从而让信息长距离传递;如果不重要,则让其接近 0,快速遗忘。

这就是 LSTM 比 RNN 更适合长序列的根本原因。

6. LSTM 的“门”到底在做什么

可以把三个门理解成三个非常具体的控制器。

遗忘门 负责“删旧内容”。例如在语言模型里,前文已经提到的主语可能在后面若干个词后仍然有用,但无关的修饰语就可以逐步遗忘。遗忘门让模型学会对不同维度的记忆进行不同程度的保留。

输入门 负责“写新内容”。它不是盲目接受当前输入,而是判断当前输入中哪些信息值得写进长期记忆。比如在语音识别里,有些当前帧的细节只是局部噪声,不值得写入状态。

输出门 负责“读出内容”。记忆不一定每一步都全部输出,输出门决定当前时刻应暴露多少内部状态给外部使用。这样既保持了内部记忆的稳定,也保留了对外输出的灵活性。

7. LSTM 和普通 RNN 的对比

7.1 结构上的区别

RNN 的状态更新很简单,基本上就是一个递推函数;LSTM 则多了记忆状态和门控机制。RNN 可以看成“单状态递推”,LSTM 可以看成“带控制的双通道递推”。

7.2 表达能力上的区别

RNN 更容易记短期关系,但长期关系难学。LSTM 通过记忆单元和门控机制,更容易建模长距离依赖,比如句子开头的主语和句末的谓语一致性、时间序列里很久以前的趋势影响等。

7.3 训练稳定性上的区别

RNN 训练时更容易出现梯度消失或爆炸。LSTM 因为有更好的梯度通路,训练通常更稳定。

7.4 代价上的区别

LSTM 不是白来的。它参数更多、计算更慢、显存占用更高。一个标准 LSTM 单元需要多组权重矩阵,开销明显大于普通 RNN。所以它的优势来自更复杂的结构,代价是更高的计算成本。

8. LSTM 的参数形式与维度理解

如果输入维度是 ,隐藏状态维度是 ,那么拼接向量 的维度是

因此各门权重矩阵的形状通常是:

偏置向量:

这意味着 LSTM 每个时间步都要做四次线性变换,再加上多次非线性操作,所以它比简单 RNN 计算更重。

如果是多层 LSTM,那么上一层每个时间步的隐藏状态 会作为下一层的输入 。这样可以形成更深的时序特征抽象。

9. 训练过程:LSTM 是怎么学出来的

LSTM 的训练本质上仍然是监督学习或自监督学习,只是网络结构换成了 LSTM。训练流程一般包括前向传播、损失计算、反向传播和参数更新。

9.1 前向传播

给定一个序列输入:

模型按时间顺序依次计算:

最后根据任务输出预测值。比如:

  • 文本分类:使用最后时刻的 作为分类依据;

  • 序列标注:每个时刻都输出一个标签;

  • 语言模型:每个时刻预测下一个词。

9.2 损失函数

损失函数取决于任务。比如分类常用交叉熵:

序列预测则可能用每个时间步损失的和:

9.3 反向传播:BPTT

LSTM 的反向传播通常使用 BPTT(Backpropagation Through Time,时间反向传播)。

思想是:把时间展开成一个很深的计算图,然后从后往前逐步求梯度。比如最终损失对某个早期参数的影响,会沿着时间链条逐步传回去。

这里 LSTM 的优势就体现出来了:由于 的更新中存在较强的线性通路,梯度能比普通 RNN 更顺利地穿过多个时间步。

9.4 参数更新

参数可用 SGD、Momentum、Adam 等优化方法更新,例如:

其中 是学习率, 代表所有可训练参数。


10. 局限性分析

尽管 LSTM 功能强大,但在面对极长序列或大规模并行需求时仍存在短板:

  • 梯度问题依然存在: 它只是“缓解”而非“根治”。在超长序列(如数千步)中仍需配合 梯度裁剪 (Gradient Clipping) 使用。

  • 并行性缺陷: 由于 强依赖于 ,模型无法像 Transformer 那样实现全序列并行化训练。

  • 记忆容量限制: 作为一个固定维度的向量,细胞状态 的承载能力有限,难以完美记录所有历史细节。

11. 实战技巧与变体

  • 双向 LSTM (BiLSTM): 同时捕捉“过去”与“未来”的信息,常用于翻译和命名实体识别。

  • Peephole Connections: 让门控结构直接观察 ,增强对精确时间的控制能力。

  • 调参建议:

    • Dropout: 在层间使用,防止过拟合。

    • 归一化: 输入数据务必进行标准化,加速收敛。

    • 截断 BPTT: 对于超长序列,只在一定窗口内传播梯度。

12. 典型应用场景

LSTM 目前仍是以下领域的核心工具:

  • 时序建模: 股票价格预测、传感器异常检测。

  • 自然语言处理: 情感分析、序列标注、机器翻译(作为 Encoder-Decoder 基础)。

  • 信号处理: 语音识别、心电图(ECG)分析。

13. 核心精髓总结

如果将循环神经网络的演进做个比喻:

  • 普通 RNN: 像是一直把记忆揉成一个球传下去,传得越远,球表面的字迹越模糊。

  • LSTM: 像是一个带旋转开关的记忆柜

    • 遗忘门: 清理过期文件。

    • 输入门: 筛选新入库信息。

    • 输出门: 决定向外展示哪些内容。

结论: LSTM 的核心强项不在于它能“记住全部”,而在于它拥有出色的**“选择性记忆”**能力。

14. 衍生结构:GRU

作为 LSTM 的“轻量化”版本,GRU (Gated Recurrent Unit) 合并了遗忘门和输入门,只有两个门控。它在保持大部分性能的同时,参数更少、计算速度更快,是追求效率时的首选。