LSTM 与 GRU

RNN无法处理长距离依赖问题,通俗点就是不能处理一些较长的序列数据,那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构,LSTM和GRU。

1. LSTM(Long short-term memory)

1.1 LSTM结构

上左图是普通RNN结构图,上右图是LSTM结构图。

从图中我们可以看出,普通的RNN在隐藏层中只传递一个状态值h,而LSTM不仅传递h,还新增了一个状态值C,每一层隐藏层中的每一个神经元都接收上一时刻传递的h{t-1}和c{t-1},经过计算得到h{t}和c{t}再传入下一时刻。

那么接下来咱们就来看看状态c和h究竟在LSTM的隐藏层中做了哪些计算又是怎么传递地。

上图是LSTM的某一隐藏层的局部结构,三个矩形为{t-1},{t},{t+1}三个时刻的神经元,中间显示的是t时刻神经元的内部结构图。说实话只是单单看图的话,反正我当时是一脸懵逼,这都是些啥?不过不要慌,接下来咱们一步一步慢慢说明。

首先LSTM是由三个门来控制信息传递状态地,分别是红色方框对应的”忘记门“,绿色方框对应的”输入门“,和紫色方框对应的”输出门“。这三个门中一共包含3个sigmoid函数和2个tanh函数。使用sigmoid函数的原因是sigmoid函数能够将输入映射到[0,1]空间中,那么咱们就可以根据映射之后的概率对于上一时刻传递的信息进行有选择的去除,保留和输出。比如sigmoid函数的值为1也就是门的全开状态,则代表所有的信息都被保留,如果sigmoid函数为0也就是门的全闭状态,则代表所有的信息都不被保留。使用tanh函数是为了对数据进行处理,映射到[-1,1]的空间,当然也可以使用其他的激活函数,比如ReLU,至于效果谁好谁坏,我没有深究过,有研究表明在LSTM层数比较少的时候使用tanh比ReLU效果好。知道了这些之后,接下来咱们就来将这三个门一步一步拆解来讲讲具体这三个门中怎么计算。
忘记门

上图就是”忘记门“的结构,以及计算公式。说白了就是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wf转换后,加上偏置bf,再由sigmoid函数映射到[0,1]空间中。就形成了这个”忘记门“。

然后通过”忘记门“ft对于上一时刻传入的C{t-1}进行有选择的忘记,将C{t-1}与ft进行点乘,得到去除一些信息后的”忘记门的输出“

输入门:

上图是”输入门“的结构,与”忘记门“类似,首先把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wi转换后,加上偏置bi,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。然后得到输入数据,输入数据是把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵WC转换后,加上偏置bC,再有激活函数tanh映射到[-1,1]空间,得到输入数据Ct’。然后将"输入门"it与Ct’进行点乘,就能得到"输入门"的输出了。

得到Ct:

然后将”忘记门“的输出值与”输入门“的输出值加起来,就得到了t时刻的Ct值。

Ct中保留了t-1传入的部分信息和t时刻传入的经过筛选后的信息。得到了Ct,那咱们就只剩下计算t时刻的ht了,计算ht由”输出门“来完成。

输出门:

可以看到上图中的”输出门“的结构和计算公式,把t-1时刻传入的h{t-1}与t时刻的输入Xt进行拼接,然后通过权值矩阵Wo转换后,加上偏置bo,再由sigmoid函数映射到[0,1]空间中形成了这个”输出门“。
然后将上一步计算得到的Ct经过tanh函数缩放,映射到[-1,1]空间中,再与”输出门“点乘,就能得到输出门的输出值ht了。

这样咱们就计算出来t时刻的所有输出值,ht和Ct,然后ht和Ct又可以传入到下一时刻来进行循环操作了。
计算t时刻的输出yt:

1.2 LSTM 为什么能解决RNN的梯度消失问题?

好了,虽然上面说了那么多,可能小伙伴们也知道了LSTM的结构,但是我还是不明白啊,为什么这样的LSTM结构就能够缓解RNN中的梯度消失呢?(注意这里是缓解,并不是完美解决,LSTM层数过深时也还是有可能发生梯度消失问题)
先来回顾一下RNN导致梯度消失的原因,正是因为tanh和sigmoid函数的导数均小于1,一系列小于1的数连乘,连乘的数一多,连乘的结果就有很大概率为0,那么参数便不能进行更新了。

咱们类比到LSTM中:

为什么会是上述偏导连乘,其实可以通过数学公式推导,但是推导过程比较复杂,因为LSTM的参数太多了。

代入Ct中:

上面的公式看上去吓人,但仔细一看,后面的部分跟C{t-1}一点关系都没有,Ct对C{t-1}求偏导的话,后半边直接为0.
Ct对C{t-1}求偏导结果为:

上面的值地范围在0~1之间,但是在实际参数更新的过程中,可以通过控制bf较大,使得该值接近于1。这样即使在多次连乘的情况下,梯度也不会消失。
但是咱们回过头来再看看RNN:

虽然RNN也可以通过调整Ws来使得连乘接近于1,但是RNN是通过乘以Ws来调节,大家知道乘法数值变化较快,比较敏感,参数很难调,一不小心就超过了上界发生梯度爆炸,达不到下界不发生梯度消失。而LSTM是通过加上bf来调节,来降低梯度消失的风险,调节起来更容易,相对于RNN较好。所以之前也只是说了LSTM能相对于RNN缓解梯度消失的问题,并不能完全消除。

1.3 LSTM问题

OK,看到这,相信你对于LSTM的结构也已经有了清楚的认识。你有没有发现LSTM需要训练的参数好像有点多,Wf,Wi,Wo,Wc,bf,bi,bo,bc,V,9个参数。这是LSTM的优点也是缺点,优点是有更多的参数对于模型进行调节,结果更加精确,缺点是,参数太多了。

2. GRU(Gate Recurrent Unit)

GRU是一种也能达到LSTM相当效果,但是参数更少,相对更容易训练的算法,能够很大程度上提升训练效率,接下来咱们就来看看GRU的结构吧!

2.1 GRU结构

上图是GRU的整体结构图,发现跟普通的RNN没有区别,也就只有一条状态传递的通道,ht。那么接下来看看GRU中隐藏层的内部结构,到底是如何传递信息地。

上图就是GRU隐藏层的内部结构,先不要慌,虽然看上去很复杂,但是原理跟LSTM差不多,我来一步一步讲解。
LSTM有”忘记门“,”输入门“,”输出门“三个门来控制信息传递,GRU只有两个,一个是上图中的reset 重置门,一个是update 更新门。

reset 重置门:

rt就是”重置门“,计算公式还是跟LSTM一样,只是处理数据的方式不同,得到”重置门“rt后,将rt与上一时刻传入的h{t-1}进行点乘,得到重置之后的数据。

然后将得到的h{t-1}‘与Xt进行拼接。

这里的h’包含了输入信息Xt,和经过选择后的上一时刻的重要信息h{t-1}’,这样就达到了记忆当前状态信息的目的。
update 更新门:

Zt就是”更新门“,那么咱们来看看”更新门“是如何同时进行遗忘和记忆地。
先来看具体公式:

可以看到,这里的遗忘 z 和(1-z) 是联动的。也就是说,对于传递进来的维度信息,我们会进行选择性遗忘,则遗忘了多少权重 (z ),我们就会使用包含当前输入的 h’ 中所对应的权重进行弥补 (1-z) 。以保持一种”恒定“状态。

GRU只有两个门,相应地参数也就比LSTM要少,效率要高,但是结果并没有多大的区别。


原文链接:https://blog.csdn.net/Tink1995/article/details/104881633

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

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

相关文章

Windows下Eclipse C/C++开发环境配置教程

1.下载安装Eclipse 官网下载eclipse-installer(eclipse下载器),或者官方下载对应版本zip。 本文示例: Eclipse IDE for C/C Developers Eclipse Packages | The Eclipse Foundation - home to a global community, the Eclipse ID…

#Day Day Plan# 《NCB_PCI_Express_Base 5.0.1.0》pdf 译文笔记

目录 前言碎语 第4章 Physical Layer Logic Block S4.1 Introduction S4.2 Logical sub-block S4.2.4 Link Initialization and Traning S4.2.4.3 Electrical Idle Sequence(EIOS) 译文:EIOS 电器空闲Ordered Set S4.2.7 Link Training and Status State R…

C语言-面试题实现有序序列合并

要求: a.输入两个升序排列的序列,将两个序列合并为一个有序序列并输出。 数据范围: 1≤n,m≤1000 1≤n,m≤1000 , 序列中的值满足 0≤val≤30000 输入描述: 1.输入包含三行, 2.第一行包含两个正整数n, m&am…

【强连通+背包】CF1763E

Problem - E - Codeforces 题意 思路 首先,先考虑第一个条件,要保证是p个节点互相到达且节点数最少,一定是个强连通,图的形态一定就是和强连通相关的。 然后,因为在这个前提上,要让单向节点数尽可能多&a…

【密评】商用密码应用安全性评估从业人员考核题库(十一)

商用密码应用安全性评估从业人员考核题库(十一) 国密局给的参考题库5000道只是基础题,后续更新完5000还会继续更其他高质量题库,持续学习,共同进步。 2501 多项选择题 GM/T 0047《安全电子签章密码检测规范》规定的电…

shell 中单引号,双引号,反引号的区别

1 单引号 str1hello echo $str1 打印结果是:$str1 总结: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的,所以不能使用单引号 来解析变量。不过单引号可以引用变量。 例如: str1hello echo $str…

IMU预积分的过程详解

一、IMU和相机数据融合保证位姿的有效性: 当运动过快时,相机会出现运动模糊,或者两帧之间重叠区域太少以至于无法进行特征匹配,所以纯视觉SLAM对快速的运动很敏感。而有了IMU,即使在相机数据无效的那段时间内&#xff…

iOS UIWebView与WKWebView 那些事

一、前言介绍 UIWebView 是 iOS 2 中推出的网页容器,UIWebView是最占内存的控件;直到 iOS 8 以后,苹果推出了 WebKit 框架,其中 WKWebView 正式被推出来接替 UIWebView 的位置;iOS 12 中,苹果正式弃用 UIWebView,要求开发者用 WKWebView 全面替换 UIWebView,apple 官方…

C++ -- 位运算与常用库函数(ACWING语法基础)

位运算 & 与 | 或 ~ 非 ^ 异或 >> 右移 << 左移 常用操作&#xff1a; 求x的第k位数字 x >> k & 1lowbit(x) x & -x&#xff0c;返回x的最后一位1 常用库函数、 reverse 翻转 翻转一个vector&#xff1a; reverse(a.begin(), a.end(…

C++基类和派生类的内存分配,多态的实现

目录 基类和派生类的内存分配基类和派生类的成员归属多态的实现 基类和派生类的内存分配 类包括成员变量&#xff08;data member&#xff09;和成员函数&#xff08;member function&#xff09;。 成员变量分为静态数据&#xff08;static data&#xff09;和非静态数据&…

html web前端,登录,post请求提交 json带参

html web前端&#xff0c;登录&#xff0c;post请求提交 json带参 3ca9855b3fd279fa17d46f01dc652030.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></t…

FPGA【紫光语法】

寄存器数据类型&#xff1a; reg 默认为 1 bit wide&#xff0c;如果超过 1 bit&#xff0c;则需要 range declaration 设置 reg 的位宽integer 默认位宽为 32 bit&#xff0c;不允许有 range declarationtime 默认位宽为 64 bit&#xff0c;不允许有 range declarat…

sqlmap 攻击

sqlmap 是kali 里面的工具 sqlmap对注入点注入 1 如果是 get 注入&#xff0c;直接&#xff0c;sqlmap -u "注入点网址". 2 如果是 post 注入&#xff0c;可以 sqlmap –r "burp 地址访问包” 3 如果是 cookie&#xff0c;X-Forwarded-For 等&#xff0c…

02-2、PyCharm中文乱码的三处解决方法

PyCharm中文乱码 修改处1&#xff1a; 修改处2&#xff1a;这个也没用 在Pycharm中可以创建一个模版&#xff0c;每次新建python文件时Pycharm会默认在前两行生成utf-8 #!/user/bin/env python3 # -- coding: utf-8 -- 还是乱码 再在这里设置以下 添加 &#xff1a; -Dfi…

坐标由本地坐标系转wgs84坐标系

&#xff08;1&#xff09;坐标系一&#xff1a;&#xff08;0,0,0&#xff09;为原点的本地坐标系 &#xff08;2&#xff09;坐标系二&#xff1a;wgs84坐标系 转换方法&#xff1a;proj4 关键点&#xff1a;需要知道&#xff08;0,0,0&#xff09;原点的经纬度坐标 代码&a…

IEEE754 标准存储浮点数

1. IEEE754 标准简介 IEEE754 标准是一种用于浮点数表示和运算的标准&#xff0c;由国际电工委员会&#xff08;IEEE&#xff09;制定。它定义了浮点数的编码格式、舍入规则以及基本的算术运算规则&#xff0c;旨在提供一种可移植性和一致性的方式来表示和处理浮点数 IEEE754 …

tcp/ip协议和opc协议对比详解

TCP/IP协议和OPC协议是两种重要的网络协议&#xff0c;它们在不同的网络层级上运行&#xff0c;并为数据传输和通信提供了不同的功能。 TCP/IP协议&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/互联网协议&#xff09;是互联网通信的…

基于DF模式的协作通信技术matlab性能仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、DF概述 4.2、DF基本原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2013b 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd))…

Postman —— postman的介绍和安装

Postman的介绍 Postman 是一款谷歌开发的接口测试工具,使API的调试与测试更加便捷。 它提供功能强大的 Web API & HTTP 请求调试。它能够发送任何类型的HTTP 请求 (GET, HEAD, POST, PUT..)&#xff0c;附带任何数量的参数 headers postman是一款支持http协议的接口调试与…

OpenHarmony 持久化存储 UI 状态:PersistentStorage

前两个小节介绍的 LocalStorage 和 AppStorage 都是运行时的内存&#xff0c;但是在应用退出再次启动后&#xff0c;依然能保存选定的结果&#xff0c;是应用开发中十分常见的现象&#xff0c;这就需要用到 PersistentStorage。 PersistentStorage 是应用程序中的可选单例对象…