秃姐学AI系列之:GRU——门控循环单元 | LSTM——长短期记忆网络

news2024/11/24 17:33:35

RNN存在的问题

因为RNN模型的BPTT反向传导的链式求导,导致需要反复乘以一个也就是说会出现指数级别的问题:

  1. 梯度爆炸:如果的话,那么连乘的结果可能会快速增长,导致梯度爆炸
  2. 梯度消失:如果的话,连乘的结果会迅速衰减到零,导致梯度消失 

存在以上问题导致RNN无法获得上下文的长期依赖信息 

改进网络——GRU

GRU,即门控循环单元(Gated Recurrent Unit)

1、GRU的基本结构

GRU通过两种门组件和两种记忆状态解决了梯度消失

(1)两种门组件

① 重置门

        重置门(reset gate),记为 r_{t}

        这个门决定了上一时间步的记忆状态如何影响当前时间步的候选记忆内容

        计算时会结合前一时间步的隐藏状态 h_{t-1} 和当前输入 x_{t} ,输出是一个 0 到 1 之间的值。值越接近 1 表示越多地保留之前的状态,越接近 0 表示遗忘更多旧状态。对应的数学表达如下:

② 更新门

        更新门(update gate),记为 z_{t} 

        这个门决定了上一时间步的记忆状态有多少需要传递到当前时间步,以及当前的输入信息有多少需要加入到新的记忆状态中

        同样,它也是基于 h_{t-1} 和 x_{t} 计算得到的。对应的数学表达如下:

(2)两种记忆状态

① 候选记忆状态

        候选记忆状态(candidate memory),记为 \tilde{h_{t}} 

        这是基于当前输入 x_{t}  、上一时间步隐藏状态 h_{t-1}  以及重置门的输出,三者计算得到的

        其中的重置门决定了如何“重置”旧的记忆状态,以便更好地整合新信息。对应的数学表达如下:

② 最终记忆状态

        最终记忆状态(hidden state)记为 h_{t} 

        通过结合更新门的输出和候选记忆状态以及上一时间步的记忆状态来计算得出的。其中更新门决定了新旧记忆的混合比例。对应的数学表达如下:

一下表格汇总了上述公式用到的符号表示: 

符号解释
z_t更新门
r_t重置门
h_t当前时刻的隐藏状态
\tilde{h}_t候选隐藏状态
h_{t-1}前一时刻的隐藏状态
x_t当前时刻的输入
W,W_z,W_r对应的训练参数
\sigmasigmoid激活函数
*Hadamard积(按元素乘积)运算符

(3)网络结构

了解了公式推导,还是不能直观的清楚GRU到底长什么样子,下面我们逐层递加的研究一下GRU的网络结构

① 更新门和重置门的结构

上图描述了门控循环单元中的重置门和更新门的输入

输入是由 当前时间步的输入 和 前一时间步的隐状态 给出

两个门的输出是由 使用sigmoid激活函数的两个全连接层给出

② 候选隐藏状态的结构

在重置门和更新门的基础上加入了候选隐状态

重置门结果通过作用在前一时间步的隐状态上来影响候选隐状态

③ GRU的循环块结构

更新门结果作用在隐状态和候选隐状态上

更新门结果作为一个比例来调节 隐状态 和 候选隐状态

2、门控循环单元特征

  • 重置门有助于捕获序列中的短期依赖关系;

  • 更新门有助于捕获序列中的长期依赖关系。

3、GRU为什么可以缓解RNN梯度问题

        在传统的RNN中,由于长时间依赖问题,反向传播过程中梯度可能会因连续乘以小于1的数而变得非常小,导致早期时间步的权重几乎不更新,这就是梯度消失问题

        而GRU通过其独特的门控机制,特别是更新门和重置门的设计,能够更加灵活地控制信息流:

更新门:有助于模型决定在每一步中应该保留多少之前时刻的信息。它可以让模型在需要的时候保持激活状态,这样有助于后续的梯度传递而不会随时间迅速减小。如果更新门接近1,那么梯度可以在很多时间步内传递而不衰减,使得长期依赖的信息得到保留。
重置门:帮助模型决定忽略多少之前的信息。重置门可以用来减少那些不太相关信息的影响,从而保护模型不会把注意力放在不相关的长期依赖上。当选择忽略一些不相关的信息时,梯度将不会在这部分信息上进行传递,这有助于集中于更相关的信息,并有助于梯度完整地在其他相关部分传递。
        因为有了这样的机制,GRU能够在每次更新中将梯度既不是完全传递也不是完全阻断,而是能够在相关的部分进行传递。这样在优化过程中,即使对于较长的序列,也能够更加稳定地保留梯度,防止了梯度极端消失,这对于学习长期依赖至关重要。因此,GRU往往在处理长序列数据时比传统RNN更加有效。

改进网络——LSTM

        长短期记忆网络(LSTM)是一种解决隐变量模型长期信息保存和短期输入缺失问题的方法

        有趣的是,长短期记忆网络的设计比门控循环单元稍微复杂一些, 却比门控循环单元早诞生了近20年。

        在统计学中,隐变量或称潜变量,潜在变量,与观测变量相对,指的是不可观测的随机变量

        潜变量可以通过使用数学模型依据观测得的数据被推断出来。用潜在变量解释观测变量的数学模型称为潜变量模型。 有些情况下,潜变量和现实中的一些因素是有关系的。测量这些因素理论上可行,实际上却很困难。这些情况里通常使用“隐变量(hidden variables)”这个词。

        另外一些情况下,潜变量指的是抽象概念,例如分类、行为、心理状态、数据结构等等。在这些情况下人们用 hypothetical variables 或者 hypothetical constructs 指代潜变量。

  使用潜变量的好处之一是潜变量能用来降低数据的维度。大量的观测变量能够被整合起来成为一个潜变量来表示深层次的概念,使得观测数据更容易理解。

1、LSTM的基本结构

(1)输入门

        输入门(Input Gate)记为 i_{t} ,是决定当前输入中哪些部分应当被更新到细胞状态。它使用一个sigmoid函数来产生一个0到1之间的值,表示新信息的多少应该被“记忆”。 数学表达式为:

        其中 W_{i} 和 W_{c} 分别是输入门和候选细胞状态的权重矩阵,b_{i} 和 b_{c} 是对应的偏置项。x_{t} 是当前时间步的输入。\tilde{C_{t}} 是候选细胞状态。

(2)遗忘门

        遗忘门(Forget Gate)记为 f_{t} ,是确定细胞状态中哪些信息应当被遗忘。同样使用sigmoid函数,决定过往记忆的重要性,值接近1表示大部分保留,接近0表示大部分遗忘。 数学表达式为:

        其中 \sigma 是sigmoid激活函数,W_{f} 是遗忘门的权重矩阵,b_{f} 是遗忘门的偏置项,h_{t-1} 是上一个时间步的隐藏状态,x_{t} 是当前时间步的输入。

(3)细胞状态

        细胞状态(Cell State)记为 C_{t} ,是LSTM的核心,一个能够存储长期信息的向量

        它通过点积运算结合遗忘门和前一时间步的细胞状态,以及输入门和一个新的候选记忆状态来更新。

        候选记忆状态是由当前输入和一个输入的权重矩阵通过tanh激活函数得到的。 数学表达式为:

        候选细胞状态,记为 \tilde{C_{t}} ,是在每个时间步中,当前输入和前一隐藏状态的信息经过处理生成了一个候选细胞状态,该候选细胞状态包含可能加入长期状态的信息

        隐藏状态,记为 h_{t} ,包含了当前时间步的输出信息,它是基于细胞状态的过滤输出,输出门控制着细胞状态中的哪些信息会传输到隐藏状态,然后用于输出或传递到下一个时间步。

(4)输出门

        输出门(Output Gate)记为 o_{t} ,是控制细胞状态中哪些信息应当被用于生成当前时间步的输出。它结合了sigmoid函数(决定哪些细胞状态的内容应该输出)和tanh函数(对选定的记忆进行缩放,确保输出在-1到1之间)。 数学表达式为:

        其中 W_{o} 是输出门的权重矩阵,b_{o} 是输出门的偏置项。h_{t-1} 是上一个时间步的隐藏状态,x_{t} 是当前时间步的输入。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java面试要点06 - static关键字、静态属性与静态方法

本文目录 一、引言二、静态属性(Static Fields)三、静态方法(Static Methods)四、静态代码块(Static Blocks)五、静态内部类(Static Nested Classes)六、静态导入(Static…

【测试】【Debug】vscode pytest 找不到测试用例测试文件 行号部位没有绿色箭头

出现这种情况首先检查: 是否安装pytest点击vscode的这个图标如果其中都是空的,没有识别上,并且写好的.py测试文件的行号前面没有运行符号,要检查名称是否按照pytest的要求写,不然会识别不到。 命名规则注意&#xff1…

区块链技术在电子政务中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 区块链技术在电子政务中的应用 引言 区块链技术概述 定义与原理 发…

【Java Web】Servlet

文章目录 Servlet APIServlet生命周期Servlet配置注解配置文件全局参数 Servlet获得内置对象升级示例3 Servlet 是一种用于构建 Java 服务器端应用程序的技术,允许开发者创建动态的 web 内容。Servlets 在 Java 平台上运行,并由 Java Servlet API 提供支…

linux命令详解,存储管理相关

存储管理 一、内存使用量,free free 命令是一个用于显示系统中物理内存(RAM)和交换空间(swap)使用情况的工具 free -m free -m -s 5参数 -b 功能: 以字节(bytes)为单位显示内存使用情况。说…

流体力学ansys Fluent二次开发scheme_eval模块剖析

在ANSYS Fluent的二次开发中,scheme_eval 是 Scheme 编程语言中一个非常重要的模块,它允许用户执行动态的 Scheme 表达式和函数,从而扩展 Fluent 的功能。scheme_eval 模块通常与 Fluent 的计算和自定义脚本操作紧密结合。下面我们会对这个模…

中仕公考:大四在校生考公怎么规划?

还在就读的大学生,大三下学期就可以备考,大四以应届生的身份参加考试,中仕不建议大家把备考战线拉得太长或者太短,时间太长容易疲惫,时间太短容易备考不到位。 考公流程: 查看公告职位表→网上报名一资格…

【363】基于springboot的高校竞赛管理系统

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大,容错率低&am…

网站架构知识之Ansible模块(day021)

1.Ansible模块 作用:通过ansible模块实现批量管理 2.command模块与shell模块 command模块是ansible默认的模块,适用于执行简单的命令,不支持特殊符号 案列01,批量获取主机名 ansible all -m command -a hostname all表示对主机清单所有组…

计算机网络:网络层 —— 软件定义网络 SDN

文章目录 软件定义网络 SDN远程控制器OpenFlow协议SDN 广义转发流表简单转发负载均衡防火墙 SDN 控制器 软件定义网络 SDN 软件定义网络(Software Defined Networking,SDN)是一种新兴的网络架构,旨在通过网络控制与数据转发的分离…

使用 .NET Core 7 和 SignalR 构建实时聊天应用程序

动动你可爱的小手,请关注下本人公众号,继续为您提供更多原创技术文章。谢谢给为的支持 SignalR 是一个 ASP.NET 库,它支持实时 Web 功能,允许服务器立即将更新推送到客户端,从而提高应用程序的效率和响应能力。它通过简…

响应式网页设计--html

一&#xff0c;HTML 文档的基本结构 一个典型的 HTML 文档包含了几个主要部分&#xff0c;基本结构如下(本文以下出现的所有代码都可以套入下面示例进行测试)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&q…

欢迎 Stable Diffusion 3.5 Large 加入 Diffusers

作为Stable Diffusion 3的改进版本&#xff0c;Stable Diffusion 3.5 如今已在 Hugging Face Hub 中可用&#xff0c;并可以直接使用 &#x1f9e8; Diffusers 中的代码运行。 https://hf.co/blog/sd3 本次发布包含两套模型参数: https://hf.co/collections/stabilityai/stable…

Ubuntu22.04中使用CMake配置运行boost库示例程序

Ubuntu22.04中使用CMake配置运行boost库示例程序 boost是一个比较强大的C准标准库&#xff0c;里面有很多值得学习的东西&#xff0c;比较asio网络库可以用来编写C TCP客户端或者TCP服务端接收程序。本文主要讲解如何在Ubuntu22.04中使用Cmake配置boost库&#xff0c;以及运行…

高效档案管理案例介绍:文档内容批量结构化解决方案解析

一、项目背景介绍 档案文件中包含的内容丰富且形式多样&#xff0c;通常不仅包括文本&#xff0c;还可能包含表格、图片、标题、段落、注释等多种内容元素。传统的档案管理往往依赖人工对文档内容进行归档、分类和标注&#xff0c;这种方式耗时费力&#xff0c;且在管理庞大数…

如何在vscode中安装git详细新手教程

一、安装git后点击vscode中的设置 今天教大家如何在VScode中编写代码后提交到git仓库&#xff0c;如果我们不想切换到git的命令行窗口&#xff0c;可以在VScode中配置git&#xff0c;然后就可以很方便快捷的把代码提交到仓库中。 二、在输入框中输入 git.path &#xff0c;再点…

负梯度方法与Newton型方法-数值最优化方法-课程学习笔记-4

今天我们继续来学习数值最优化方法的第三章内容的后续知识 Newton方法 Newton方法是Newton方法的基础, 本节主要讨论的是基本Newton方法, 阻尼Newton方法以及修正Newton方法的构造和特性, 这类方法适合解决中小型最优化问题 基本Newton方法 对于 f ( x ) f(x) f(x)如果有连续…

element-plus的Tree 树形控件添加图标

该文章为本菜鸡学习记录&#xff0c;如有错误还请大佬指教 本人刚开始接触vue框架&#xff0c;在使用element-plus组件想实现树形控件&#xff0c;发现官网的组件示例没有图标区分显示 实现效果 代码 <temple 部分 <el-tree :data"data" node-click"hand…

Visual Studio Code从安装到正常使用

Visual Studio Code的汉化 下载的Visual Studio Code的话可以去应用商店也可以去官网下载。 Visual Studio Code只是一个编译器&#xff0c;不具备编译器功能。因此需要下载一个编译器MinGW MinGW的安装 官网链接MinGW官网链接 一步到位的链接 添加环境变量 进入cmd界面…

netty之关闭连接源码分析

写在前面 本文看下netty关闭channel相关源码。 1&#xff1a;前置准备 为了测试&#xff0c;我们需要使用netty源码中examples模块的echoserver和echoclient&#xff0c;但是echoclient因为会不断的发送消息&#xff0c;并不会断开连接&#xff0c;所以&#xff0c;我们需要…