当前位置: 首页 > news >正文

深入理解 RNN、LSTM 与 BiLSTM

NLP-AHU-013

引言

在自然语言处理、时间序列预测、语音识别等任务中,数据往往以序列的形式出现。传统的全连接网络或卷积神经网络难以有效捕捉序列中长距离的依赖关系——因为它们假设输入之间相互独立。为了解决这一问题,研究者们从“记忆”的生物学概念中汲取灵感,逐步发展出了循环神经网络(RNN)、长短期记忆网络(LSTM)以及双向长短期记忆网络(BiLSTM)。本文将带你深入理解这三种算法的设计动机、核心思想、算法细节以及完整的数学表达。

一、循环神经网络(RNN)

1.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 训练算法:BPTT

RNN 采用随时间反向传播(Backpropagation Through Time, BPTT)进行训练。BPTT 将循环网络展开为深层前馈网络(深度等于序列长度),然后计算损失对每个时间步权重的梯度,最后累加更新。

1.5 核心问题:梯度消失与爆炸

由于 BPTT 中需要反复乘以矩阵 WhhWhh​,当序列较长时:

若 WhhWhh​ 的特征值大于 1,梯度会指数级增长 →梯度爆炸。若特征值小于 1,梯度会指数级衰减 →梯度消失(更常见)。

梯度消失导致 RNN 无法学习到超过 10 步左右的长期依赖,因此需要更强大的结构——LSTM。

二、长短期记忆网络(LSTM)

2.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),网络可以学习何时“断开”或“保持”梯度流。

三、双向长短期记忆网络(BiLSTM)

3.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_size=10, hidden_size=20, batch_first=True) # LSTM lstm = nn.LSTM(input_size=10, hidden_size=20, batch_first=True) # BiLSTM bilstm = nn.LSTM(input_size=10, hidden_size=20, batch_first=True, bidirectional=True) # 前向传播示例 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 架构打下坚实基础。

http://www.jsqmd.com/news/598915/

相关文章:

  • 广义 Riemann-Lebesgue 引理及其证明:阶梯函数逼近法
  • [安卓逆向]问题解决:Xposed-Disable-FLAG_SECURE的截图限制解除与实战部署
  • ai辅助开发新体验:描述需求,快马一键生成ml项目环境与初始代码
  • 实战分享:Qwen3-VL-WEBUI 游戏 AI视觉决策系统搭
  • 突破ThinkPad散热限制:TPFanCtrl2智能风扇控制完全指南
  • Playwright核心教程(Python)
  • Username enumeration via different responses
  • 【摄影测量】从零实现张正友标定法:手写代码解析相机内参/外参与畸变校正
  • 终极免费QMC解码器:3分钟解锁QQ音乐加密文件,实现全平台音乐自由
  • 3个创新维度破解直播回放获取难题:douyin-downloader深度解构与实战指南
  • Natural-Language Agent Harnesses 论文笔记
  • 开源模组加载器SMAPI全攻略:从新手配置到冲突解决的进阶指南
  • STM32F0实战:基于HAL库开发【4.5】
  • Oracle多租户架构
  • SpringBoot4.X: 彻底消灭 NullPointerException
  • 9篇8章2节:MIMIC 数据库的 CITI 注册与课程选择(2026年版)
  • 实战指南:基于快马平台构建带第三方登录的tk网站登录页
  • 前端 SSE(Server-Sent Events)实现详解:从原理到前端 AI 对话应用
  • WaveTools重构鸣潮游戏体验:突破性能瓶颈的开源解决方案
  • AI率80%和40%降到20%,难度差了多少?
  • 【React】setState 触发渲染的流程
  • 基于STM32的‘水位检测自动控制系统‘:支持超声波模块、DS18B20传感器,包含原理图、P...
  • 基于液压控制的冲床自动送料机的设计【说明书+CAD+外文翻译】
  • Math.js 使用教程
  • 五相电机双闭环矢量控制模型:原理说明、仿真波形及完整版Simulink模型
  • Windows下5种端口连通性测试方法实测对比(附详细命令)
  • Ostrakon-VL-8B多模态运维监控实战:智能日志分析与故障预警
  • e1547:重新定义e621浏览体验的现代化客户端解决方案
  • Golang笔记1-变量与类型
  • 3步优化鸣潮游戏体验:面向全层级玩家的WaveTools工具箱使用指南