跳转至

循环网络(RNN / LSTM / GRU)

序列数据长度可变、位置有依赖。RNN 用隐状态在时间步之间传递信息。

基础 RNN

\[ h_t = \tanh\big(W_{xh} x_t + W_{hh} h_{t-1} + b_h\big) \]

同一套权重在所有时间步共享。长序列上易出现梯度消失/爆炸(BPTT)。

LSTM / GRU

结构 要点
LSTM 遗忘/输入/输出门 + 细胞状态,减轻长程梯度问题
GRU 门控更少,往往更快、效果接近
\[ c_t = f_t \odot c_{t-1} + i_t \odot \tilde{c}_t, \qquad h_t = o_t \odot \tanh(c_t) \]

双向与多层

  • BiRNN:正反向隐状态拼接,适合整句已可见的编码。
  • 多层:上层吃下层各步输出。

何时用 RNN vs Transformer

更倾向 RNN/LSTM 更倾向 Transformer
流式/在线、算力紧 并行训练、长程依赖、大规模预训练
短序列基线 NLP / 多模态主流
import torch.nn as nn

rnn = nn.LSTM(128, 256, num_layers=2, batch_first=True, bidirectional=True)