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

【第四章:大模型(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.lryc.cn/news/599357.html

相关文章:

  • Linux网络框架分析
  • 使用vllm创建相同模型的多个实例,使用nginx进行负载均衡,提高模型吞吐量
  • RabbitMQ—HAProxy负载均衡
  • 数仓主题域划分
  • [linux]Haproxy七层代理
  • Agent领域,近年来的前沿研究方向:多智能体协作、认知启发架构、伦理安全、边缘计算集成
  • 多租户系统中的安全隔离机制设计
  • 【数学建模|Matlab】数学建模「常用作图」示例
  • classgraph:Java轻量级类和包扫描器
  • 【深基12.例1】部分背包问题 Java
  • 深入解析 ArkUI 触摸事件机制:从点击到滑动的开发全流程
  • 本地部署Dify教程
  • 每天算法刷题Day53:7.25:leetcode 栈5道题,用时1h35min
  • [C#] Winform - 加载动画效果
  • 【blender小技巧】使用blender实现图转换为3D模型,并进行模型网格优化减面操作
  • 【C#学习Day12笔记】抽象类、密封类与子类构造(继承)
  • Welcome to the world of Go language
  • blender基本操作
  • gem5和Spike区别
  • 设计模式在Java中的实际应用:单例、工厂与观察者模式详解
  • AVL树和红黑树的特性以及模拟实现
  • 【开发杂谈】用AI玩AI聊天游戏:使用 Electron 和 Python 开发大模型语音聊天软件
  • golang怎么实现每秒100万个请求(QPS),相关系统架构设计详解
  • MyBatis 之缓存机制核心解析
  • “磁”力全开:钕铁硼重塑现代科技生活
  • 求职招聘小程序源码招聘小程序开发定制
  • 解密国密 SSL 证书:SM2、SM3、SM4 算法的协同安全效应
  • Spring Boot 接口安全设计:接口限流、防重放攻击、签名验证
  • SEC_FirePower 第二天作业
  • 软件异常读写威胁硬盘安全:从过往案例到防护之道