循环神经网络(RNN)、LSTM 与 GRU (一)


文章目录

  • 循环神经网络(RNN)、LSTM 与 GRU (一)
  • 循环神经网络(RNN)、LSTM 与 GRU
    • 一、RNN(Recurrent Neural Network)
      • 1. 基本思想
      • 2. 数学表达
      • 3. 优缺点
    • 二、LSTM(Long Short-Term Memory)
      • 1. 引入背景
      • 2. 核心结构
      • 3. 状态更新
      • 4. 优缺点
    • 三、GRU(Gated Recurrent Unit)
      • 1. 概述
      • 2. 核心公式
      • 3. 特点
    • 四、对比总结
    • 五、结构对比图
    • 六、结语


循环神经网络(RNN)、LSTM 与 GRU

一、RNN(Recurrent Neural Network)

1. 基本思想

  • RNN 通过在网络中引入“循环”结构,使得当前时刻的输出不仅依赖当前输入,还依赖之前的隐藏状态。
  • 适合处理 序列数据,如文本、语音、时间序列预测。

2. 数学表达

  • 隐藏层更新:
    ht=f(Wxhxt+Whhht−1+bh)h_t = f(W_{xh}x_t + W_{hh}h_{t-1} + b_h) ht=f(Wxhxt+Whhht1+bh)
  • 输出层:
    yt=g(Whyht+by)y_t = g(W_{hy}h_t + b_y) yt=g(Whyht+by)

3. 优缺点

  • 优点:能够建模序列信息,捕捉上下文依赖。
  • 缺点:存在梯度消失和梯度爆炸问题,难以学习长期依赖。

二、LSTM(Long Short-Term Memory)

1. 引入背景

  • 针对 RNN 的 长期依赖问题,LSTM 在结构上引入了“门控机制”,有效缓解梯度消失问题。
  • 在自然语言处理、语音识别、时间序列预测等任务中应用广泛。

2. 核心结构

LSTM 的关键在于 细胞状态(Cell State)三个门(Gates)

  1. 遗忘门(Forget Gate):决定丢弃多少历史信息。
    ft=σ(Wf[xt,ht−1]+bf)f_t = \sigma(W_f[x_t, h_{t-1}] + b_f) ft=σ(Wf[xt,ht1]+bf)

  2. 输入门(Input Gate):决定写入多少新信息。
    it=σ(Wi[xt,ht−1]+bi)i_t = \sigma(W_i[x_t, h_{t-1}] + b_i) it=σ(Wi[xt,ht1]+bi)
    C~t=tanh⁡(Wc[xt,ht−1]+bc)\tilde{C}_t = \tanh(W_c[x_t, h_{t-1}] + b_c) C~t=tanh(Wc[xt,ht1]+bc)

  3. 输出门(Output Gate):决定输出多少细胞状态的信息。
    ot=σ(Wo[xt,ht−1]+bo)o_t = \sigma(W_o[x_t, h_{t-1}] + b_o) ot=σ(Wo[xt,ht1]+bo)

3. 状态更新

  • 细胞状态:
    Ct=ft∗Ct−1+it∗C~tC_t = f_t * C_{t-1} + i_t * \tilde{C}_t Ct=ftCt1+itC~t
  • 隐藏状态:
    ht=ot∗tanh⁡(Ct)h_t = o_t * \tanh(C_t) ht=ottanh(Ct)

4. 优缺点

  • 优点:能解决长期依赖问题,更好地捕捉长距离信息。
  • 缺点:结构复杂,计算量大,训练速度较慢。

三、GRU(Gated Recurrent Unit)

1. 概述

  • GRU 是 LSTM 的简化版本,仅包含 更新门(Update Gate)重置门(Reset Gate)
  • 没有独立的细胞状态,直接用隐藏状态传递信息。

2. 核心公式

  • 更新门:
    zt=σ(Wz[xt,ht−1])z_t = \sigma(W_z[x_t, h_{t-1}]) zt=σ(Wz[xt,ht1])
  • 重置门:
    rt=σ(Wr[xt,ht−1])r_t = \sigma(W_r[x_t, h_{t-1}]) rt=σ(Wr[xt,ht1])
  • 新隐藏状态:
    h~t=tanh⁡(W[xt,(rt∗ht−1)])\tilde{h}_t = \tanh(W[x_t, (r_t * h_{t-1})]) h~t=tanh(W[xt,(rtht1)])
  • 最终隐藏状态:
    ht=(1−zt)∗ht−1+zt∗h~th_t = (1 - z_t) * h_{t-1} + z_t * \tilde{h}_t ht=(1zt)ht1+zth~t

3. 特点

  • 结构更简洁,参数更少,训练更快。
  • 在很多任务中性能与 LSTM 接近甚至更优。

四、对比总结

特性RNNLSTMGRU
结构简单,循环层复杂,含门控单元(3门+细胞状态)较简洁,仅2门
长期依赖建模
计算复杂度中等
训练速度较快
典型应用简单序列建模机器翻译、语音识别NLP、推荐系统、时序预测

五、结构对比图

GRU
反馈
更新门+重置门
隐藏状态 h_t
x_t
y_t
LSTM
反馈
门控
隐藏状态 h_t
x_t
细胞状态 C_t
y_t
RNN
反馈
隐藏状态 h_t
x_t
y_t

六、结语

  • RNN 是序列建模的基础,但受限于梯度消失问题。
  • LSTM 通过门控机制成功解决长期依赖,是深度学习里程碑式的模型。
  • GRU 在保持效果的同时,计算更高效,是实际工程中的常见选择。
    在这里插入图片描述
    在这里插入图片描述

总结一句:

如果序列较短,用 RNN 即可;
如果需要捕捉长期依赖,LSTM 更稳健;
如果追求训练速度和效果平衡,GRU 是不错的选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919480.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919480.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919480.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AAOS】Android Automotive 16模拟器源码下载及编译

源码下载repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r2 repo sync -c --no-tags --no-clone-bundle源码编译source build/envsetup.sh lunch sdk_car_x86_64-bp2a-eng make -j8运行效果emualtorHomeAll appsSettingsHAVCNotification…

jvm三色标记

好的,咱们把专业概念和生活例子结合起来,一步一步说清楚三色标记法:一、核心概念:用“颜色”给对象贴“状态标签”就像给家里的物品贴标签,每种颜色代表它在“垃圾回收(大扫除)”中的状态&#…

生成式AI的能力边界与职业重构:从“百科实习生“到人机协作增强器

根据微软最新研究,基于20万条Copilot使用数据及用户反馈,研究者揭示了生成式AI在实际应用中的能力边界与职业影响。数据显示,用户使用AI助手最频繁的任务是信息获取(占比近40%),其次是公众沟通类工作&#…

java17学习笔记

Java17是一个重要的特性发布,也是比较常用的一个版本,根据 2024Java生态统计,Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。它遵循了自Java10以来引入的Java发布步调,并于2021年 9 月 14 日发布,在Java16发布后…

【AI应用】修改向量数据库Milvus默认密码

说明: 1)部署向量数据库milvus运行一段时间后,想开启密码认证登录attu页面 2)开启密码认证登录,提示用户和密码不正确,因为默认密码已存储在物理机 3)通过attu管理页面修改向量数据库milvus默认…

分布式系统消息队列:可靠投递与延时消息实战

在分布式系统架构中,消息队列(MQ)作为解耦服务、削峰填谷、异步通信的核心组件,其消息投递的可靠性与延时消息的精准性直接影响业务系统的稳定性。本文结合实际业务场景,详细解析消息投递的全流程设计与延时消息的通用…

Java 学习笔记(基础篇6)

面向对象基础1. 类和对象(1) 示例:public class Student {String name "张三";int age 23;public void study() {System.out.println("学习 Java");}public void eat() {System.out.println("吃饭");} }public class Test {public …

光学件加工厂倚光科技:陪跑光学未来力量

在光学创新的漫漫长路上,总有一些看似 “不划算” 的坚持,却在悄然改写行业的未来。倚光科技的故事,就始于这样一种选择 —— 明知光学打样利润微薄,明知上百个项目中能走到量产的寥寥无几,仍愿意投入全球顶尖的设备与…

RabbitMQ:生产者可靠性(生产者重连、生产者确认)

目录一、生产者重连二、生产者确认一、生产者重连 当网络不稳定的时候,利用重试机制可以有效提高消息发送的成功率。不过SpringAMQP提供的重试机制是阻塞式的重试,也就是说多次重试过程中,当前线程是被阻塞的,会影响业务性能。 …

【深度学习新浪潮】空天地数据融合技术在城市三维重建中的应用

空天地数据融合技术在城市三维重建中的应用已取得显著进展,尤其在提升精度以满足具身智能机器人仿真训练需求方面,研究和产品均呈现多样化发展。以下是关键研究进展、产品方案及精度要求的详细分析: 一、研究进展与技术路径 1. 多源数据融合的技术突破 时空基准统一:通过…

Selenium自动化测试入门:cookie处理

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快driver.get_cookies() # 获得cookie 信息driver.get_cookies(name) # 获得对应name的cookie信息add_cookie(cookie_dict) # 向cookie 添加会话信息delete_cookie(na…

快解析如何让远程访问更安全?

一、勒索病毒攻击服务器的途径很多用户服务器对外开放,实现外网访问,担心服务器被勒索病毒攻击!勒索病毒攻击服务器的途径之一是通过路由器开放的端口进行扫描攻击,所以尽量不要在服务器的路由器和防火墙中开放端口二、快解析如何…

Linux下编译ARPACK

本文记录Linux下编译ARPACK的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、依赖 1.1 安装oneAPI 参见:Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 二、编译ARPACK …

芋道RBAC实现介绍

说明:之前写过一篇博客,介绍如何搭建一个基于角色的权限验证框架 搭建一个基于角色的权限验证框架 本文介绍在非常受欢迎的开源框架——芋道中是如何实现 RBAC 的,芋道的部署参考下面这篇文章: 芋道微服务代码部署 介绍 一般…

Docker部署Jellyfin,没有公网IP如何使用内网穿透远程访问?

Jellyfin是一款完全开源、免费的媒体服务器,可帮助你快速搭建属于自己的私人流媒体平台:电影、剧集、音乐、照片统统收纳,跨设备随点随播。本文将以最简洁的步骤,演示如何在Docker容器中部署Jellyfin,并通过贝锐花生壳…

Podman:Mysql(使用卷)

下载镜像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年渗透测试面试题总结-21(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、文件上传绕过方式(Top 5) 二、文件包含高危函数(PHP为例&#xff0…

像海绵一样吸收技术书籍的高效学习方法

像海绵一样吸收技术书籍的高效学习方法前言六步高效阅读法步骤1:快速浏览章节步骤2:先读章末测验步骤3:只读粗体字步骤4:只读每段的首句和末句步骤5:通读整章步骤6:复习与重复高效学习技术书籍的实用技巧1.…

Day60--图论--94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网)

Day60–图论–94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网) 今天是Bellman_ford专场。带你从普通的Bellman_ford,到队列…

Jenkins服务器SSH公钥配置步骤

步骤1. 在Jenkins服务器上生成SSH密钥在Jenkins服务器上执行以下命令:# 1. 生成SSH密钥对 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""# 2. 设置正确的权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub# 3. 查看公钥内…