深入理解 RNN、LSTM 与 BiLSTM
NLP-AHU-013引言在自然语言处理、时间序列预测、语音识别等任务中数据往往以序列的形式出现。传统的全连接网络或卷积神经网络难以有效捕捉序列中长距离的依赖关系——因为它们假设输入之间相互独立。为了解决这一问题研究者们从“记忆”的生物学概念中汲取灵感逐步发展出了循环神经网络RNN、长短期记忆网络LSTM以及双向长短期记忆网络BiLSTM。本文将带你深入理解这三种算法的设计动机、核心思想、算法细节以及完整的数学表达。一、循环神经网络RNN1.1 启发与设计动机RNN 的设计受到了人类认知过程中“记忆”能力的启发当我们阅读一个句子时对当前词的理解依赖于之前读过的词。传统网络无法做到这一点而 RNN 通过引入循环连接使得信息可以在时间步之间传递从而建模序列的动态特性。1.2 网络结构RNN 的核心是一个循环单元。在每一个时间步 tt它接受当前输入 xtxt 和上一时间步的隐藏状态 ht−1ht−1输出当前隐藏状态 htht并可选择性地产生输出 ytyt。所有时间步共享同一套权重矩阵Wxh,Whh,WhyWxh,Whh,Why这使得模型能够处理任意长度的序列。# 伪代码示例 h_t tanh(W_xh x_t W_hh h_{t-1} b_h) y_t softmax(W_hy h_t b_y)1.3 数学表达隐藏状态更新其中为双曲正切激活函数。输出计算以分类为例1.4 训练算法BPTTRNN 采用随时间反向传播Backpropagation Through Time, BPTT进行训练。BPTT 将循环网络展开为深层前馈网络深度等于序列长度然后计算损失对每个时间步权重的梯度最后累加更新。1.5 核心问题梯度消失与爆炸由于 BPTT 中需要反复乘以矩阵 WhhWhh当序列较长时若 WhhWhh 的特征值大于 1梯度会指数级增长 →梯度爆炸。若特征值小于 1梯度会指数级衰减 →梯度消失更常见。梯度消失导致 RNN 无法学习到超过 10 步左右的长期依赖因此需要更强大的结构——LSTM。二、长短期记忆网络LSTM2.1 启发与设计动机LSTM 由 Hochreiter Schmidhuber 于 1997 年提出旨在解决 RNN 的长期依赖问题。其灵感来源于计算机内存的读写控制我们希望在需要时“记住”信息在不需要时“遗忘”信息并控制何时将记忆输出。为此LSTM 引入了门控机制和一条独立的细胞状态cell state让信息得以稳定地长距离传递。2.2 核心结构LSTM 单元包含三个门遗忘门forget gate决定丢弃多少上一时刻的细胞状态。输入门input gate决定将多少当前输入存入细胞状态。输出门output gate决定从细胞状态中输出多少到隐藏状态。此外还有一条称为细胞状态CtCt 的“传送带”它只在少数线性交互中被更新从而缓解梯度消失。2.3 数学表达设当前输入向量上一时刻隐藏状态上一时刻细胞状态所有门和候选值都使用 sigmoid或 tanh 作为激活函数。1. 遗忘门决定丢弃旧信息的比例其中表示两个向量的拼接。2. 输入门决定存入新信息的比例3. 候选细胞状态新信息的内容4. 更新细胞状态遗忘旧信息 加入新信息其中表示逐元素相乘Hadamard 积。5. 输出门决定输出多少细胞状态信息6. 最终隐藏状态2.4 为什么 LSTM 能缓解梯度消失细胞状态的更新公式中包含恒等映射梯度可以直接沿细胞状态向后传播而不衰减。门控值由 sigmoid 输出接近 0 或 1网络可以学习何时“断开”或“保持”梯度流。三、双向长短期记忆网络BiLSTM3.1 启发与设计动机在许多序列标注任务如命名实体识别、词性标注中一个词的类别不仅依赖于它之前的词还依赖于它之后的词。例如“我吃了苹果”中的“苹果”是宾语而“苹果手机”中的“苹果”是品牌。单向 LSTM 只能看到上文无法利用下文信息。双向 LSTM通过一个前向 LSTM 和一个后向 LSTM 同时编码过去和未来的上下文从而获得更丰富的表示。3.2 网络结构BiLSTM 由两个独立的 LSTM 层组成前向 LSTM按时间顺序处理序列得到隐藏状态序列。后向 LSTM按时间逆序处理序列得到隐藏状态序列。在每个时间步 tt将前向和后向的隐藏状态拼接起来作为该时刻的最终输出3.3 数学表达对于每个时间步其中表示向量拼接操作。若前向和后向隐藏状态的维度均为 dhdh则 htht 的维度为。3.4 训练与推理训练同时优化前向和后向 LSTM 的参数。损失函数基于拼接后的 htht 计算。推理需要完整的输入序列才能计算后向 LSTM因为后向需要未来的信息因此 BiLSTM 不适合实时在线预测但在离线场景如文本分类、机器翻译编码器中效果显著。四、总结与对比模型核心特点优势局限性RNN简单循环结构权重共享计算效率高适合短序列梯度消失/爆炸无法建模长期依赖LSTM门控机制 细胞状态能捕捉 100 步的长期依赖缓解梯度消失参数量大训练稍慢仍可能遗忘极长距离信息BiLSTM前向 后向 LSTM拼接输出同时利用过去和未来上下文在序列标注任务上表现优异需要完整序列无法实时处理参数量翻倍训练更慢应用场景建议短时序列预测如股票价格预测 → 标准 LSTM 或 RNN。机器翻译编码器、文本分类、情感分析→ BiLSTM 通常优于单向 LSTM。命名实体识别、词性标注→ BiLSTM CRF 是经典组合。在线实时语音识别→ 单向 LSTM无法使用未来信息。五、PyTorch 简单实现示例import torch import torch.nn as nn # RNN rnn nn.RNN(input_size10, hidden_size20, batch_firstTrue) # LSTM lstm nn.LSTM(input_size10, hidden_size20, batch_firstTrue) # BiLSTM bilstm nn.LSTM(input_size10, hidden_size20, batch_firstTrue, bidirectionalTrue) # 前向传播示例 x torch.randn(4, 5, 10) # (batch, seq_len, input_size) out, (h, c) lstm(x) print(out.shape) # (4, 5, 20) out_bilstm, _ bilstm(x) print(out_bilstm.shape) # (4, 5, 40)结语从简单的 RNN 到引入门控的 LSTM再到双向编码的 BiLSTM每一步改进都源于对序列数据本质的更深刻理解。掌握这些模型的设计思想和数学细节不仅有助于灵活应用它们解决实际问题也能为理解更先进的 Transformer 架构打下坚实基础。