为什么GRU和LSTM能够缓解梯度消失或梯度爆炸问题?

1、什么是梯度消失(gradient vanishing)?

      参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。

2、什么是梯度爆炸(gradient exploding)?

      参数更新过大,破坏了模型的稳定收敛。

3、利用梯度截断来缓解梯度爆炸问题

\textbf{g}\leftarrow min\left ( 1,\frac{\theta }{\left \| \mathbf{g} \right \|} \right )\mathbf{g}

4、门控循环单元(GRU)与普通的循环神经网络之间的关键区别是:GRU支持隐状态门控。模型有专门的机制来确定应该何时来更新隐状态,以及何时重置隐状态。这些机制是可学习的。

5、长短期记忆网络(LSTM)引入记忆元,记忆元的设计目的是用于记录附加的信息。为了控制记忆元,需要许多门,输入门、遗忘门和输出门。

6、GRU和LSTM中的门控设计策略,能够有助于缓解梯度消失或梯度爆炸问题。主要是解决长序列梯度计算中幂指数大小的问题(长序列意味着高阶乘积计算,容易导致梯度极大或极小),可以通过门控设计来直接减少高阶乘积大小(直接替换高阶乘积计算,替换为合理数值),从而缓解梯度消失或梯度爆炸问题。

7、循环神经网络的梯度爆炸和梯度消失的具体原因分析:

循环神经网络中,通过时间反向传播(backpropagation through time,BPTT)实际上是循环神经网络中反向传播技术的一个特定应用。

(1)它要求我们将循环神经网络的计算图以此展开一个时间步,以获得模型变量和参数之间的依赖关系

(2)然后,基于链式法则,应用反向传播来计算和存储梯度。

(3)由于序列可能相当长,因此依赖关系链也可能相当长。

        例如,某个1000个字符的序列,其第一个词元可能会对最后位置的词元产生重大影响。这在计算上是不可行的,它需要的时间和内存都太多了,并且还需要超过1000个矩阵的乘积才能得到非常难以捉摸的梯度。这个过程充满可计算与统计的不确定性。

8、循环神经网络的梯度分析

       分析一个简化的模型,此模型描述了循环神经网络工作原理,模型中忽略了隐状态及其更新方式的细节。

      在简化模型中,将时间步t的隐状态表示为h_{t},输入表示为x_{t},输出表示为o_{t}w_{h}w_{o}分别表示隐藏层和输出层的权重。fg分别表示隐藏层和输出层的变换。

h_{t} =f\left ( x_{t} ,h_{t-1},w_{h}\right )

o_{t}=g\left ( h_{t} ,w_{o}\right )

前向传播的计算:

L\left ( x_{1} ,...,x_{T}, y_{1} ,...,y_{T},w_{h} ,w_{o}\right )=\frac{1}{T}\sum_{t=1}^{T}l\left ( y_{t} ,o_{t}\right )

.

反向传播的计算:

\frac{\partial L}{\partial w_{h}}=\frac{1}{T}\sum_{t=1}^{T}\frac{\partial l\left ( y_{t},o_{t} \right )}{\partial w_{h}}

                                                                  =\frac{1}{T}\sum_{t=1}^{T}\frac{\partial l\left ( y_{t},o_{t} \right )}{\partial o_{t}}\frac{\partial g\left ( h_{t} ,w_{o}\right )}{\partial h_{t}}\frac{\partial h_{t}}{\partial w_{h}}

上式中第一项和第二项很容易计算,第三项\frac{\partial h_{t}}{\partial w_{h}}是比较难计算的,我们需要循环的计算参数w_{h}h_{t}的影响。

经过推导(此处省略推导过程),得到:

\frac{\partial h_{t}}{\partial w_{h}}=\frac{\partial f\left ( x_{t},h_{t-1},w_{h} \right )}{\partial w_{h}}+\sum_{t-1}^{i}\left (\prod_{j=i+1}^{t} \frac{\partial f\left ( x_{j},h_{j-1},w_{h} \right )}{\partial h_{j-1}} \right )\frac{\partial f\left ( x_{i},h_{i-1},w_{h} \right )}{\partial w_{h}}

其中当t很大时,链就很长,其中\prod代表的乘积阶数就会很高。

       这样就会导致最终的梯度\frac{\partial L}{\partial w_{h}}会因为其中的高阶数的乘积变得很敏感,容易产生非常大的数(梯度爆炸)和非常小的数(梯度消失)。

9、梯度计算的细节分析

       这里我们具体讨论通过时间反向传播(backpropagation through time,BPTT)的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。

出于简单的目的,我们以一个没有偏置参数的循环神经网络,其在隐藏层中的激活函数使用恒等函数(\phi \left ( x \right )=x)。

对于时间步t,单个样本的输入及其标签分别为\mathbf{x}_{t}\in \mathbb{R}^{d}y_{t}。计算隐状态\mathbf{h}_{t}\in \mathbb{R}^{h}和输出\mathbf{o}_{t}\in \mathbb{R}^{q}的公式为

\mathbf{h}_{t}=\mathbf{W}_{hx}\mathbf{x}_{t}+\mathbf{W}_{hh}\textbf{h}_{t-1}

\mathbf{o}_{t}=\mathbf{W}_{qh}\mathbf{h}_{t}

其中,权重参数为\mathbf{W}_{hx}\in \mathbb{R}^{h\times d}\mathbf{W}_{hh}\in \mathbb{R}^{h\times h}\mathbf{W}_{qh}\in \mathbb{R}^{q\times h}

目标函数为:

L=\frac{1}{T}\sum_{t=1}^{T}l\left ( y_{t} ,\mathbf{o}_{t}\right )

通常,训练这个模型需要对这些参数分别进行梯度计算:\partial L/\partial \textbf{W}_{hx}\partial L/\partial \textbf{W}_{hh}\partial L/\partial \textbf{W}_{qh}

\frac{\partial L}{\partial \textbf{o}_{t}}=\frac{\partial l\left ( \textbf{o}_{t},y_{t} \right )}{T\cdot \partial o_{t}}\in \mathbb{R}^{q}

\frac{\partial L}{\partial \mathbf{W}_{qh}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{o}_{t}}\textbf{h}_{t}^{\top }

\frac{\partial L}{\partial \mathbf{W}_{hx}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{h}_{t}}\textbf{x}_{t}^{\top }

\frac{\partial L}{\partial \mathbf{W}_{hh}}=\sum_{t=1}^{T}\frac{\partial L}{\partial \textbf{h}_{t}}\textbf{h}_{t-1}^{\top }

其中:

\frac{\partial L}{\partial \mathbf{h}_{t}}=\sum_{i=t}^{T}\left (\textbf{W} _{hh}^{\top } \right )^{T-i}\textbf{W}_{qh}^{\top }\frac{\partial L}{\partial \textbf{o}_{T+t-i}}

\frac{\partial L}{\partial \mathbf{h}_{t}}中可以看到,这个简单的线性例子已经展现出长序列模型的一些关键问题:

它陷入到了\textbf{W} _{hh}^{\top }的潜在的非常大的指数幂。在这个指数幂中,小于1的特征值将会消失(出现梯度消失),大于1的特征值将会发散(出现梯度爆炸)。

10、GRU和LSTM中的门控设计策略对于缓解梯度消失或梯度爆炸问题的原理和机制​​​​​​​

(1)GRU门控设计策略

支持隐状态的门控。 这意味着模型有专门的机制来确定应该何时更新隐状态, 以及应该何时重置隐状态。 这些机制是可学习的,并且能够解决了上面列出的问题。 例如,如果第一个词元非常重要, 模型将学会在第一次观测之后不更新隐状态。 同样,模型也可以学会跳过不相关的临时观测。 最后,模型还将学会在需要的时候重置隐状态。 

下面具体讨论各类门控的作用。

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

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

重置门的数学表达式:

对于给定的时间步t,假设输入是一个小批量\textbf{X}_{t}\in \mathbb{R}^{n\times d}(样本数n,输入数d),前一个时间步的隐状态是\mathbf{H}_{t-1}\in \mathbb{R}^{n\times h}(隐藏单元数h)。

那么,重置门\textbf{R}_{t}\in \mathbb{R}^{n\times h}和更新门\textbf{Z}_{t}\in \mathbb{R}^{n\times h}的计算方式如下所示:

\textbf{R}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xr}+\mathbf{H}_{t-1}\mathbf{W}_{hr}+\mathbf{b}_{r} \right )

\textbf{Z}_{t}=\sigma \left ( \mathbf{X}_{t}\mathbf{W}_{xz}+\mathbf{H}_{t-1}\mathbf{W}_{hz}+\mathbf{b}_{z} \right )

其中,\textbf{W}_{xr}\in \mathbb{R}^{d\times h}\textbf{W}_{xz}\in \mathbb{R}^{d\times h}\textbf{W}_{hr}\in \mathbb{R}^{h\times h}\textbf{W}_{hz}\in \mathbb{R}^{h\times h}是权重参数,\mathbf{b}_{r}\in \mathbb{R}^{1\times h}\mathbf{b}_{z}\in \mathbb{R}^{1\times h}是偏置参数。\sigma表示sigmoid函数,将输入值转换到区间(0,1)内。

将重置门\textbf{R}_{t}与常规隐状态更新机制集成,得到时间步t的候选隐状态\mathbf{\widetilde{H}}_{t}\in \mathbb{R}^{n\times h}

\mathbf{\widetilde{H}}_{t}=tanh\left ( \mathbf{X}_{t}\mathbf{W}_{xh}+\left (\textbf{R}_{t}\bigodot \mathbf{H}_{t-1} \right )\mathbf{W}_{hz}+\mathbf{b}_{h} \right )

候选隐状态结合更新门\textbf{Z}_{t},形成新的隐状态\mathbf{\widetilde{H}}_{t}\in \mathbb{R}^{n\times h}

\mathbf{H}_{t}=\mathbf{Z}_{t}\bigodot \mathbf{H}_{t-1}+\left (1-\mathbf{Z}_{t} \right )\bigodot \mathbf{\widetilde{H}}_{t}

每当更新门\textbf{Z}_{t}接近1时,模型就倾向只保留旧状态。 此时,来自\textbf{X}_{t}的信息基本上被忽略, 从而有效地跳过了依赖链条中的时间步t。 相反,当\textbf{Z}_{t}接近0时, 新的隐状态\textbf{H}_{t}就会接近候选隐状态\mathbf{\widetilde{H}}_{t}。 这些设计可以帮助我们处理循环神经网络中的梯度消失问题, 并更好地捕获时间步距离很长的序列的依赖关系。 例如,如果整个子序列的所有时间步的更新门都接近于1, 则无论序列的长度如何,在序列起始时间步的旧隐状态都将很容易保留并传递到序列结束。

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

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

相关文章

PIC单片机项目(7)——基于PIC16F877A的智能灯光设计

1.功能设计 使用PIC16F877A单片机,检测环境关照,当光照比阈值低的时候,开灯。光照阈值可以通过按键进行设置,同时阈值可以保存在EEPROM中,断电不丢失。使用LCD1602进行显示,第一行显示测到的实时光照强度&a…

flink watermark 实例分析

WATERMARK 定义了表的事件时间属性,其形式为: WATERMARK FOR rowtime_column_name AS watermark_strategy_expression rowtime_column_name 把一个现有的列定义为一个为表标记事件时间的属性。该列的类型必须为 TIMESTAMP(3)/TIMESTAMP_LTZ(3),且是 sche…

指标体系构建-01-什么是数据指标

参考 四千字全面解析数据产品经理必知概念:标签、维度、指标 什么是数据指标 指标是指于其中打算达到的指数,规格,标准等,是用数据对事物进行描述的工具。通常指标对应是否有价值取决于这个指标的实际意义。同时关注指标对应的数值&#x…

养老院自助饮水机(字符设备驱动)

目录 1、项目背景 2、驱动程序 2.1 三层架构 2.2 驱动三要素 2.3 字符设备驱动 2.3.1 驱动模块 2.3.2 应用层 3、设计实现 3.1 项目设计 3.2 项目实现 3.2.1 驱动模块代码 3.2.2 用户层代码 4、功能特性 5、技术分析 6. 总结与未来展望 1、项目背景 养老院的老人…

网络基础【网线的制作、OSI七层模型、集线器、交换机介绍、路由器的配置】

目录 一.网线的制作 1.1.网线的标准 1.2.水晶头的做法 二.OSI七层模型、集线器、交换机介绍 集线器(Hub): 交换机(Switch): 三.路由器的配置 3.1.使用 3.2.常用的功能介绍 1、如何管理路由器 2、家…

Linux线程

文章目录 线程线程原理页表线程VS进程线程相关函数pthread_create函数pthread_selfpthread_exitpthread_cancelpthread_joinpthread_detach 线程ID 线程 什么是线程?为什么要有线程? 线程本质上就是轻量化的进程,一个进程就是一个执行流&…

信息论安全与概率论

目录 一. Markov不等式 二. 选择引理 三. Chebyshev不等式 四. Chernov上限 4.1 变量大于 4.2 变量小于 信息论安全中会用到很多概率论相关的上界,本文章将梳理几个论文中常用的定理,重点关注如何理解这些定理以及怎么用。 一. Markov不等式 假定…

Protobuf 编码规则及c++使用详解

Protobuf 编码规则及c使用详解 Protobuf 介绍 Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data Protocol Buffers(简称为protobuf)是谷歌的语言无关、…

多层负载均衡实现

1、单节点负载均衡 1)站点层与浏览器层之间加入了一个反向代理层,利用高性能的nginx来做反向代理 2)nginx将http请求分发给后端多个web-server 优点: 1)DNS-server不需要动 2)负载均衡:通过ngi…

Python深度学习028:神经网络模型太多,傻傻分不清?

文章目录 深度学习网络模型常见CNN网络深度学习网络模型 在深度学习领域,有许多常见的网络模型,每种模型都有其特定的应用和优势。以下是一些广泛使用的深度学习模型: 卷积神经网络(CNN): 应用:主要用于图像处理,如图像分类、物体检测。 特点:利用卷积层来提取图像特…

《数据分析-JiMuReport》积木报表详细入门教程

积木报表详细入门教程 一、JimuReport部署入门介绍 积木报表可以通过源码部署、SpringBoot集成、Docker部署以及各种成熟框架部署,具体可查看积木官方文档 当前采用源码部署,首先下载Jimureport-example-1.5.6 1 jimureport-example目录查看 使用ID…

喜报|迪捷软件“ModelCoder 建模及形式化验证代码生成软件”荣登浙江省首版次产品目录

近日,浙江省经济和信息化厅公布《2023年浙江省首版次软件产品应用推广指导目录》,浙江迪捷软件科技有限公司的“ModelCoder 建模及形式化验证代码生成软件”经过多轮审核及专家评定被纳入目录,这是迪捷软件自主研发的产品继“天目全数字实时仿…

【前缀和】【单调栈】LeetCode2281:巫师的总力量和

作者推荐 map|动态规划|单调栈|LeetCode975:奇偶跳 涉及知识点 单调栈 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 作为国王的统治者,你有一支巫师军队听你指挥。 给你一个下标从 0 开始的整数数组 strength &…

【Matlab in VSCode】在VSCode中编辑MATLAB文件

【Matlab in VSCode】在VSCode中编辑MATLAB文件 1.安装插件 插件:在vscode拓展商店下载 MATLABMatlab in VSCode 其他:Windows环境MATLAB2019bpython3.7.9 2.插件配置 MATLAB插件下载后不用配置。 Matlab in VSCode需要进行相应的配置。 Windows…

【C语言】自定义类型:结构体深入解析(二)结构体内存对齐宏offsetof计算偏移量结构体传参

文章目录 📝前言🌠 结构体内存对齐🌉内存对齐包含结构体的计算🌠宏offsetof计算偏移量🌉为什么存在内存对⻬?🌠 结构体传参🚩总结 📝前言 本小节,我们学习结构的内存对…

C++面向对象(OOP)编程-STL详解(vector)

本文主要介绍STL六大组件,并主要介绍一些容器的使用。 目录 1 泛型编程 2 CSTL 3 STL 六大组件 4 容器 4.1 顺序性容器 4.1.1 顺序性容器的使用场景 4.2 关联式容器 4.2.1 关联式容器的使用场景 4.3 容器适配器 4.3.1 容器适配器的使用场景 5 具体容器的…

大模型ChatGLM下载、安装与使用

在人工智能领域,清华技术成果转化的公司智谱AI启动了支持中英双语的对话机器人ChatGLM内测。ChatGLM是一个初具问答和对话功能的千亿中英语言模型, 并针对中文进行了优化,现已开启邀请制内测,后续还会逐步扩大内测范围。 ChatGLM…

Unity中Shader平移矩阵

文章目录 前言方式一:对顶点本地空间下的坐标进行相加平移1、在属性面板定义一个四维变量记录在 xyz 上平移多少。2、在常量缓冲区进行申明3、在顶点着色器中,在进行其他坐标转化之前,对模型顶点本地空间下的坐标进行转化4、我们来看看效果 方…

Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)

文章目录 Tomcat报404问题解决方案大全(包括tomcat可以正常运行但是报404)1、正确的运行页面2、报错404问题分类解决2.1、Tomcat未配置环境变量2.2、IIs访问权限问题2.3、端口占用问题2.4、文件缺少问题解决办法: Tomcat报404问题解决方案大全(包括tomcat可以正常运…

智能优化算法应用:基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于龙格-库塔算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.龙格-库塔算法4.实验参数设定5.算法结果…