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

【第四章:大模型(LLM)】01.神经网络中的 NLP-(1)RNN、LSTM 和 GRU 的基本原理和应用

第四章:大模型(LLM)

第二部分:神经网络中的 NLP

第一节:RNN、LSTM 和 GRU 的基本原理和应用


一、引言:为何使用循环神经网络?

在处理自然语言或序列数据(如时间序列、语音)时,上下文信息至关重要。传统的前馈神经网络(如 MLP、CNN)无法自然捕捉序列中的时间依赖关系。因此,循环神经网络(RNN)被提出,以支持信息在序列中传递,从而实现“记忆”功能。


二、RNN:循环神经网络基础

1. 基本结构

RNN 的核心思想是:当前的输出不仅依赖当前输入,还依赖之前的隐藏状态(即“记忆”)。

数学表达为:

  hₜ = tanh(Wₓxₜ + Wₕhₜ₋₁ + b)

其中:

  • xₜ:当前时刻输入;

  • hₜ:当前隐藏状态;

  • hₜ₋₁:上一个时间步的隐藏状态;

  • Wₓ,Wₕ:权重矩阵。

2. 问题:梯度消失与爆炸

由于时间展开导致的深层链式反向传播,RNN 在长序列上容易出现:

  • 梯度消失:信息无法从后往前传播;

  • 梯度爆炸:参数不稳定,训练失败。


三、LSTM:长短期记忆网络

为了解决 RNN 的记忆瓶颈问题,Hochreiter & Schmidhuber 在 1997 年提出 LSTM(Long Short-Term Memory)

1. 核心思想

LSTM 通过门机制(Gates)来控制信息流:

  • 遗忘门(forget gate):决定保留多少旧记忆;

  • 输入门(input gate):决定接受多少新信息;

  • 输出门(output gate):决定输出多少记忆给下一个时间步。

公式简化如下:

fₜ = σ(W_f · [hₜ₋₁, xₜ])     ← 遗忘门  
iₜ = σ(W_i · [hₜ₋₁, xₜ])     ← 输入门  
oₜ = σ(W_o · [hₜ₋₁, xₜ])     ← 输出门  
ĉₜ = tanh(W_c · [hₜ₋₁, xₜ])  ← 候选记忆cₜ = fₜ * cₜ₋₁ + iₜ * ĉₜ    ← 更新记忆单元
hₜ = oₜ * tanh(cₜ)          ← 输出隐藏状态

2. 优点

  • 保留长距离依赖

  • 学习重要性动态权重

  • 应用于机器翻译、语言建模、情感分析等任务中。


四、GRU:门控循环单元

GRU(Gated Recurrent Unit) 是 LSTM 的简化版本,由 Cho 等人在 2014 年提出。

1. 结构简洁

GRU 将 LSTM 的三个门压缩为两个:

  • 更新门(update gate) zₜ;

  • 重置门(reset gate) rₜ。

核心计算:

zₜ = σ(W_z · [hₜ₋₁, xₜ])  
rₜ = σ(W_r · [hₜ₋₁, xₜ])  
h̃ₜ = tanh(W_h · [rₜ * hₜ₋₁, xₜ])  
hₜ = (1 - zₜ) * hₜ₋₁ + zₜ * h̃ₜ

2. 相较于 LSTM 的优势:

  • 结构更简单,参数更少;

  • 训练更快,性能相当;

  • 在某些任务(如语音建模)表现优异。


五、应用场景

应用领域描述
语言建模根据前文预测下一个单词(如 GPT 的基本训练任务)
文本分类通过 RNN/LSTM/GRU 提取序列特征用于情感、意图分类
序列标注用于命名实体识别(NER)、分词、POS 等序列到序列任务
机器翻译Seq2Seq 架构最初是 LSTM 编码器+解码器组合
语音识别RNN 能捕捉声音序列中时间依赖特征
时间序列预测金融市场分析、用户行为预测等

六、总结

RNN、LSTM 和 GRU 是序列建模的三大经典结构。它们为现代 NLP 奠定了基础,尤其在 Transformer 浪潮之前,占据了主导地位。

尽管如今大多数 LLM(如 GPT)已采用 Transformer 架构,但在小型模型、边缘设备和特定任务中,LSTM 和 GRU 依然具有极高的实用价值

http://www.xdnf.cn/news/16324.html

相关文章:

  • 全国产化5G-A低空经济基座
  • 【Unity笔记】OpenXR 之VR串流开发笔记:通过RenderTexture实现仅在PC端展示UI,在VR眼镜端隐藏UI
  • 大模型进阶面试题
  • 车载 CAN-Bus 数据记录仪说明书
  • 【C语言进阶】一篇文章教会你文件的读写
  • 【unitrix】 6.16 非负整数类型( TUnsigned )特质(t_unsingned.rs)
  • 电子电子架构 --- 软件项目的开端:裁剪
  • Java面试题(中等)
  • Javascript NaN Symbol BigInt
  • TDengine 转化类函数 CAST 用户手册
  • 7.24 C/C++蓝桥杯 | 排序算法
  • Android15或AndroidU广播的发送流程
  • 星慈光编程虫2号小车讲解第三篇--附件概述
  • 深入理解 IO 多路复用:从 select 到 epoll
  • MySQL---索引、事务
  • VUE2 学习笔记5 动态绑定class、条件渲染、列表过滤与排序
  • 【全新上线】境内 Docker 镜像状态监控
  • 秋招Day18 - MyBatis - 基础
  • C语言转义字符‘\\‘‘ 解析与常见误区
  • 六种经典智能优化算法(PSO/GWO/WOA/HHO/DBO/SSA)无人机(UAV)三维路径规划,Matlab代码实现
  • TimeXer - 重新审视时序预测内的外生变量
  • 【LeetCode数据结构】二叉树的应用(一)——单值二叉树问题、相同的树问题、对称二叉树问题、另一棵树的子树问题详解
  • MySQL的命令行客户端
  • markdown学习笔记(个人向) Part.2
  • 跨境支付入门~国际支付结算(区块链篇)
  • C语言:20250724笔记(函数-指针)
  • JAVA_THIRTEEN_常用API
  • 【分布式锁】什么是分布式锁?分布式锁的作用?
  • tensorflow搭建神经网络
  • Linux 磁盘挂载,查看uuid