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

RNN,LSTM,BiLSTM算法的简单介绍

NLP-AHU-101

一、RNN:

RNN中文名为“循环神经网络”,在1980年代被初步提出,它是一种用于处理序列数据的神经网络,能够捕捉序列数据中的时间动态或前后依赖关系。RNN 主要通过循环结构来实现这一点,即在每个循环中,网络都会将当前输入与前一时刻的隐藏状态结合起来,生成新的隐藏状态。这种结构使得 RNN 能够有效处理如时间序列分析、语言模型、语音识别等任务。

RNN模型结构示意图:

其中,x是一个向量,它表示输入层的值;s是一个向量,它表示隐藏层的值,从图中不难看出,循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s;U是输入层到隐藏层的权重矩阵;o也是一个向量,它表示输出层的值;V是隐藏层到输出层的权重矩阵,而权重矩阵 W就是隐藏层上一次的值作为这一次的输入的权重。

数学表达式:

如果我们将(2)式代入一式,那么我们就可以得到以下式子:

由上式可以看出,循环神经网络的输出值,是受前面的输入值影响的,这就是为什么循环神经网络可以往前看任意多个输入值的原因。

二、LSTM

上文中的RNN存有梯度消失/爆炸以及长期依赖等问题,其中,为了解决长期依赖这些问题,研究者们提出了LSTM这一结构。长短期记忆网络论文首次发表于1997年。由于独特的设计结构,LSTM适合于处理和预测时间序列中间隔和延迟非常长的重要事件。

LSTM模型结构示意图:

数学原理:

LSTM的核心在于三个门控机制:遗忘门、输入门和输出门。每个门都通过特定的数学公式来控制信息流动。以下是各门控单元的数学公式:

1.遗忘门:控制记忆单元中哪些信息需要保留或遗忘。它的计算公式为:

2. 输入门:决定当前输入信息写入记忆单元的程度,分为两步计算:

1)首先使用sigmoid函数生成写入比例:

2)然后生成候选记忆值,用tanh函数激活:

3. 更新记忆单元状态:结合遗忘门和输入门的结果,完成记忆单元的状态更新,是 LSTM 的核心信息流,计算公式为:

4. 输出门:决定当前时刻记忆单元状态的输出,它的计算公式为:

然后将记忆单元状态通过tanh激活函数处理,再与输出门的值相乘,得到最终的隐藏状态输出:

三、BiLSTM

由于LSTM是一种单向的结构,为了解决在处理序列数据时存在的上下文信息利用不足的问题,通过引入双向结构,提出了BiLSTM这一模型。

BiLSTM模型结构示意图:

其中:最下方节点x代表输入层;倒数第二层节点h代表正向隐藏状态;第二层节点h代表反向隐藏状态;第一层节点O则代表最终输出,由前向隐藏状态 + 反向隐藏状态融合得到。

核心计算逻辑:

  1. 正向计算:前向 LSTM 从序列起点到终点,利用t时刻及之前的信息计算每个时间步的正向隐藏状态 h​​;

  2. 反向计算:反向 LSTM 从序列终点到起点,利用t时刻及之后的信息计算每个时间步的反向隐藏状态 h​​;

  3. 状态融合:将同一时间步的正向、反向隐藏状态拼接,得到同时包含过去和未来上下文的完整特征;

  4. 输出计算:融合后的隐藏状态通过输出层权重 W​,生成最终输出 O​.

四、总结

RNN 是时序循环网络的基础框架,LSTM 是解决 RNN 长序列缺陷的核心升级(可以理解为RNN pro),BiLSTM 是 LSTM 在全序列场景下的双向增强(RNN pro max),三者共同构成了从基础到进阶的时序建模技术体系。

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

相关文章:

  • 手把手教你拆解Optimus Gen2:特斯拉人形机器人的成本与供应链秘密
  • 2026年靠谱高级职称申报机构盘点 - 资讯焦点
  • 我做了一个精简版 Claude Code,朋友说“你咋这么卷”
  • 别再只查表了!用MATLAB调用Python包(如NumPy, Pandas)的完整环境配置教程
  • 从零到一:用NoneBot2给QQ频道/群聊做个智能机器人(Python 3.12 + Pycharm保姆级配置)
  • 【OpenClaw从入门到精通】第56篇:高校安全培训启示录——苏州科技大学OpenClaw讲座深度实战笔记(2026校园版)
  • UE5蓝图实战:用JsonLibrary插件轻松搞定WebUI数据交互(附完整节点图)
  • SAP财务顾问必看:GGB1凭证替代实战指南,从配置到激活(OBBH)完整避坑流程
  • 【Unity】使用AVProVideo实现透明视频播放与合成全流程
  • Java多线程编程核心技术_完整版+PDF电子书下载+带书签目录分享
  • Modelsim 10.7/2019.5 破解后启动报错:HostID格式异常排查与修复
  • 你的WiFi信号被‘吃掉’了多少?实测距离、高度、遮挡物对RSSI的影响(附避坑指南)
  • C语言五子棋项目进阶:如何用EasyX实现人机对战(简单AI算法详解)
  • 别再写代码了!用Coze插件+知识库,5分钟搞定一个专属AI客服(附避坑指南)
  • 西门子S7-1200的PID三兄弟:PID_Compact、PID_3Step、PID_Temp到底该怎么选?看完这篇不再纠结
  • clean+code-代码整洁之道(中文完整版-带书签).pdf 分享
  • 专业淡疤护肌!2026年权威实测有效预防和改善色素沉着药膏,儿童去疤膏哪个效果最好 - 资讯焦点
  • 基于Simulink Parameter Estimation的锂电池二阶RC模型参数辨识实战
  • 从原理到实战:用Optuna解锁超参数调优新姿势
  • 人大金仓Kingbase数据库PostGIS插件部署实战:从零到一解锁空间数据能力
  • AI赋能:借助快马平台生成智能Homebrew助手,用自然语言管理软件包
  • Solving Matplotlib‘s Font Fallback: From DejaVu Sans to SimHei for CJK Support
  • Java核心技术 卷2 高级特性 (原书第9版).pdf 分享
  • 哪个牌子好?2026专业测评:五大品牌客观解析与科学选购指南 - 资讯焦点
  • Python虚拟环境中的io.py文件异常:Fatal Python error: init_sys_streams问题深度解析
  • ESP32内存告急?别慌!手把手教你搞定‘iram0_0_seg overflowed’编译错误
  • ENVI5.6 批量处理GF-2/GF-6/GF-7:从安装到融合的完整自动化流程
  • 避开这5个坑!Qt启动画面开发必知的QSplashScreen实践指南
  • 20254225侯九州 2025-2026-2 《Python程序设计》实验2报告
  • 从‘电池’到‘胡萝卜’:聊聊构建YOLO生活垃圾数据集时遇到的坑与收获