RNN/LSTM/GRU 学习笔记

文章目录

  • RNN/LSTM/GRU
    • 一、RNN
      • 1、为何引入RNN?
      • 2、RNN的基本结构
      • 3、各种形式的RNN及其应用
      • 4、RNN的缺陷
      • 5、如何应对RNN的缺陷?
      • 6、BPTT和BP的区别
    • 二、LSTM
      • 1、LSTM 简介
      • 2、LSTM如何缓解梯度消失与梯度爆炸?
    • 三、GRU
    • 四、参考文献

RNN/LSTM/GRU

一、RNN

1、为何引入RNN?

循环神经网络(Recurrent Neural Network,RNN) 是用来建模序列化数据的一种主流深度学习模型。我们知道,传统的前馈神经网络一般的输入都是一个定长的向量,无法处理变长的序列信息,即使通过一些方法把序列处理成定长的向量,模型也很难捕捉序列中的长距离依赖关系。RNN则通过将神经元串行起来处理序列化的数据。由于每个神经元能用它的内部变量保存之前输入的序列信息,因此整个序列被浓缩成抽象的表示,并可以据此进行分类或生成新的序列1


2、RNN的基本结构

RNN的朴素形式可分别由如下两幅图表示2

在这里插入图片描述

其中 x 1 , x 2 , ⋯ , x T x_1,x_2,\cdots,x_T x1,x2,,xT 是输入,每一个位置是一个实数向量; U U U V V V W W W 是权重矩阵,通常在模型初始化时随机生成,通过梯度下降进行优化; h t h_t ht 是位于隐藏层上的活性值,很多文献上也称为状态(State)或隐状态(Hidden State); p t p_t pt 表示第 t t t 个位置上的输出。

h t h_t ht p t p_t pt 可由下列公式得出( b b b 是偏置项):
h t = tanh ⁡ ( U ⋅ h t − 1 + W ⋅ x t + b ) h_t=\tanh\left(U\cdot h_{t-1}+W\cdot x_t+b\right) ht=tanh(Uht1+Wxt+b)

p t = s o f t m a x ( V ⋅ h t + c ) p_t=\mathrm{softmax}(V\cdot h_t+c) pt=softmax(Vht+c)

3、各种形式的RNN及其应用

(图片来自于cs231n)

在这里插入图片描述

模式描述应用领域
One to One单个输入对应单个输出图像分类、回归任务
One to Many单个输入生成序列输出图像字幕生成、音乐生成
Many to One序列输入生成单个输出情感分析、时间序列分类
Many to Many序列输入对应序列输出机器翻译、语音识别
Many to Many(同步)同步序列输入输出视频帧分类、实时语音处理

4、RNN的缺陷

RNN通过在所有时间步共享相同的权重,使得可以在不同时间步之间传递和积累信息,从而更好地捕捉序列数据中的长期依赖关系,但是缺点也很明显:在RNN的学习过程中,由于共享权重 W W W,导致随着时间步的增加,权重矩阵 W W W 不断连乘,最终产生梯度消失(即 ∂ L t ∂ h k \frac{\partial \mathcal{L}_{t}}{\partial \boldsymbol{h}_{k}} hkLt 消失, 1 ≤ k ≤ t 1 \le k\le t 1kt )和梯度爆炸,具体解释如下:

首先由RNN前向传播公式:
h t = f ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=f(W\cdot h_{t-1}+U\cdot x_t+b) ht=f(Wht1+Uxt+b)
其中 f f f 为激活函数。

在反向传播时(BPTT),损失函数 L \mathcal{L} L 对某一时间步长的梯度涉及到时间上所有的前置状态,因此梯度会被多个矩阵连乘表示为:
∂ L ∂ h t = ∂ L ∂ h T ⋅ ∏ k = t T − 1 A k \frac{\partial\mathcal{L}}{\partial h_t}=\frac{\partial\mathcal{L}}{\partial h_T}\cdot\prod_{k=t}^{T-1}A_k htL=hTLk=tT1Ak
其中 A k = diag ⁡ ( f ′ ( h k ) ) ⋅ W A_k=\operatorname{diag}(f^{\prime}(h_k))\cdot W Ak=diag(f(hk))W

显然若 W > 1 W>1 W>1,随着时间的增加,多个 W W W 连乘后结果会不断增大,最终导致梯度爆炸;

同理 W < 1 W<1 W<1,多个 W W W 连乘后结果会不断减小至趋于0,最终导致梯度消失。

而在CNN中,每一层的权重矩阵 W W W 是不同的,并且在初始化时它们是独立同分布的,因此最后可以相互抵消,不容易发生梯度爆炸或消失。

5、如何应对RNN的缺陷?

对于梯度爆炸,一般通过权重衰减(Weight Decay)梯度截断(Gradient Clipping) 来避免3。权重衰减,通过引入衰减系数来约束并避免权重矩阵元素过大,从而减少梯度连乘时的爆炸风险;梯度截断,直接将梯度大小进行限制以防止梯度爆炸,比如按值截断:在第 t t t 次迭代时,梯度为 g t g_t gt ,给定一个区间 [ a , b ] [a,b] [a,b] ,如果一个参数的梯度小于 a a a 时,就将其设为 a a a ;如果大于 b b b 时,就将其设为 b b b,公式如下:
g t = max ⁡ ( min ⁡ ( g t , b ) , a ) . \mathbf{g}_t=\max(\min(\mathbf{g}_t,b),a). gt=max(min(gt,b),a).

对于梯度消失,一个想法是改进激活函数,比如替换成 ReLU ,因为其右侧导数恒为 1 ,可以缓解梯度消失(不能杜绝,因为本质上是权重矩阵的问题)。缺点是不好解决梯度爆炸,从 RNN 的前向传播公式来看待这个问题,前向传播公式如下:
h t = f ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=f(W\cdot h_{t-1}+U\cdot x_t+b) ht=f(Wht1+Uxt+b)
使用 ReLU 激活函数后, h t h_t ht 可表达为:
h t = r e l u ( W ⋅ h t − 1 + U ⋅ x t + b ) h_t=\mathrm{relu}\left(W\cdot h_{t-1}+U\cdot x_t+b\right) ht=relu(Wht1+Uxt+b)
显然不管 h t − 1 h_{t-1} ht1 怎么变化,前面始终要乘上一个权重矩阵 W W W ,因此替换激活函数后,并不能实质上解决由于权重矩阵 W W W 连乘而导致的梯度爆炸问题。

③ 使用合适的权重初始化方法,如 Xavier 初始化或 He 初始化,使 W W W 的特征值接近 1 。

如果从结构上来考虑,通过改变网络结构来减缓梯度消失或爆炸,长短期记忆网络(LSTM,Long Short-Term Memory) 就是基于这个想法诞生的。

6、BPTT和BP的区别

BP算法:只处理纵向层级间的梯度反向传播,适用于前馈神经网络。

BPTT算法:在训练RNN时,需要同时处理纵向层级间的反向传播(深度方向)和时间维度上的反向传播(时间方向)。


二、LSTM

1、LSTM 简介

LSTM 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。LSTM 网络结构如下:

在这里插入图片描述

LSTM 网络引入门控机制(Gating Mechanism) 来控制信息传递的路径,公式如下:
i t = σ ( U i ⋅ h t − 1 + W i ⋅ x t + b i ) f t = σ ( U f ⋅ h t − 1 + W f ⋅ x t + b f ) o t = σ ( U o ⋅ h t − 1 + W o ⋅ x t + b o ) c ~ t = tanh ⁡ ( U c ⋅ h t − 1 + W c ⋅ x t + b c ) c t = i t ⊙ c ~ t + f t ⊙ c t − 1 h t = o t ⊙ tanh ⁡ ( c t ) \begin{array}{c}\boldsymbol{i}_{t}=\sigma\left(\boldsymbol{U}_{i} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{i} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{i}\right) \\\boldsymbol{f}_{t}=\sigma\left(\boldsymbol{U}_{f} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{f} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{f}\right) \\\boldsymbol{o}_{t}=\sigma\left(\boldsymbol{U}_{o} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{o} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{o}\right) \\\tilde{\boldsymbol{c}}_{t}=\tanh \left(\boldsymbol{U}_{c} \cdot \boldsymbol{h}_{t-1}+\boldsymbol{W}_{c} \cdot \boldsymbol{x}_{t}+\boldsymbol{b}_{c}\right) \\\boldsymbol{c}_{t}=\boldsymbol{i}_{t} \odot \tilde{\boldsymbol{c}}_{t}+\boldsymbol{f}_{t} \odot \boldsymbol{c}_{t-1} \\\boldsymbol{h}_{t}=\boldsymbol{o}_{\boldsymbol{t}} \odot \tanh \left(\boldsymbol{c}_{t}\right)\end{array} it=σ(Uiht1+Wixt+bi)ft=σ(Ufht1+Wfxt+bf)ot=σ(Uoht1+Woxt+bo)c~t=tanh(Ucht1+Wcxt+bc)ct=itc~t+ftct1ht=ottanh(ct)
进一步可以简写成:
[ c ~ t o t i t f t ] = [ tanh ⁡ σ σ σ ] ( W [ x t h t − 1 ] + b ) , c t = f t ⊙ c t − 1 + i t ⊙ c ~ t , h t = o t ⊙ tanh ⁡ ( c t ) , \begin{aligned}\begin{bmatrix}\tilde{\boldsymbol{c}}_t\\\\\boldsymbol{o}_t\\\\\boldsymbol{i}_t\\\\\boldsymbol{f}_t\end{bmatrix}&=\begin{bmatrix}\tanh\\\\\sigma\\\\\sigma\\\\\sigma\end{bmatrix}\begin{pmatrix}\boldsymbol{W}\begin{bmatrix}\boldsymbol{x}_t\\\\\boldsymbol{h}_{t-1}\end{bmatrix}+\boldsymbol{b}\end{pmatrix},\\\\\boldsymbol{c}_t&=\boldsymbol{f}_t\odot\boldsymbol{c}_{t-1}+\boldsymbol{i}_t\odot\boldsymbol{\tilde{c}}_t,\\\boldsymbol{h}_t&=\boldsymbol{o}_t\odot\tanh\left(\boldsymbol{c}_t\right),\end{aligned} c~totitft ctht= tanhσσσ W xtht1 +b ,=ftct1+itc~t,=ottanh(ct),

公式中有三个“门”,分别为输入门 i t \boldsymbol{i}_t it 、遗忘门 f t \boldsymbol{f}_t ft 和输出门 o t \boldsymbol{o}_t ot 。这三个门的作用为

  • 遗忘门 f t f_t ft 控制上一个时刻的内部状态 c t − 1 \boldsymbol c_t-1 ct1 需要遗忘多少信息。
  • 输入门 i t \boldsymbol{i}_t it 控制当前时刻的候选状态 c ~ t \tilde{\boldsymbol{c}}_t c~t 有多少信息需要保存。
  • 输出门 o t \boldsymbol{o}_t ot 控制当前时刻的内部状态 c t \boldsymbol{c}_t ct 有多少信息需要输出给外部状态 h t . \boldsymbol{h}_t. ht.

具体的可点击查看如下视频,很清晰易懂:

【【官方双语】LSTM(长短期记忆神经网络)最简单清晰的解释来了!】 https://www.bilibili.com/video/BV1zD421N7nA/?share_source=copy_web&vd_source=199a3f4e3a9db6061e1523e94505165a


2、LSTM如何缓解梯度消失与梯度爆炸?

LSTM的细胞状态更新机制(下图黄色部分)可以有效地存储长期的信息:

在这里插入图片描述

其更新公式如下:
C t = f t ⊙ C t − 1 + i t ⊙ C ~ t C_t=f_t\odot C_{t-1}+i_t\odot\tilde{C}_t Ct=ftCt1+itC~t

由于这一过程本质是线性操作(加权求和),相当于是所有候选路径的线性组合,故不会因为一个路径上梯度的消失,而导致整体梯度不断衰减。LSTM的细胞状态经过门控机制(通过或阻断,即 1 或 0)控制这个线性组合,达到缓解梯度消失的效果;而门控机制又可以通过调节输入输出,通过灵活地舍弃一些部分,来缓解梯度爆炸问题。

简言之,由于此线性组合会通过门控机制自主的调节,而非 RNN 那样直接连乘,因此可以达到减缓梯度消失和梯度爆炸的效果,并实现对信息的过滤,从而达到对长期记忆的保存与控制。


三、GRU

门控循环单元(GRU) 是对 LSTM 进行简化得到的模型。对于 LSTM 与 GRU 而言,它们效果相当,但由于 GRU 参数更少,所以 GRU 的收敛速度更快,计算效率更高。

与LSTM相比,GRU 仅有两个门——更新门(update gate)和重置门(reset gate),不使用记忆元。重置门有助于捕获序列中的短期依赖关系,更新门有助于捕获序列中的长期依赖关系,详细结构如下图:

在这里插入图片描述


四、参考文献


  1. 诸葛越, 葫芦娃, 百面机器学习, 北京:人民邮电出版社, 2018 ↩︎

  2. 李航. 机器学习方法[M]. 第一版. 清华大学出版社, 2022. ↩︎

  3. 邱锡鹏, 神经网络与深度学习, 北京:机械工业出版社, 2020 ↩︎

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

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

相关文章

qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记

qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记 文章目录 qt-Quick3D笔记之官方例程Runtimeloader Example运行笔记1.例程运行效果2.例程缩略图3.项目文件列表4.main.qml5.main.cpp6.CMakeLists.txt 1.例程运行效果 运行该项目需要自己准备一个模型文件 2.例程缩略图…

以太坊入门【详解】

以太坊的组成部分 P2P网络&#xff1a;以太坊在以太坊网络上运行&#xff0c;该网络可在TCP端口30303上寻址&#xff0c;并运行一个协议。交易&#xff1a;以太坊交易时网络消息&#xff0c;其中包括发送者&#xff0c;接受者&#xff0c;值和数据的有效载荷以太坊虚拟机&…

实验十四 EL和JSTL

实验十四 EL和JSTL 一、实验目的 1、掌握EL表达式的使用 2、掌握JSTL的使用 二、实验过程 1、在数据库Book中建立表Tbook&#xff0c;包含图书ID&#xff0c;图书名称&#xff0c;图书价格。实现在bookQuery.jsp页面中模糊查询图书&#xff0c;如果图书的价格在50元以上&#…

安装和卸载RabbitMQ

我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/SUWXdDb0UoCV86xP6b3c7qtMn6b 使用Ubuntu环境进行安装 一、安装Erlang 在安装RabbitMQ之前,我们需要先安装Erlang,RabbitMQ需要Erlang的语言支持 #安装Erlang sudo apt-get install erlang 在安装的过程中,会弹出一段信息,此…

音视频多媒体编解码器基础-codec

如果要从事编解码多媒体的工作&#xff0c;需要准备哪些更为基础的内容&#xff0c;这里帮你总结完。 因为数据类型不同所以编解码算法不同&#xff0c;分为图像、视频和音频三大类&#xff1b;因为流程不同&#xff0c;可以分为编码和解码两部分&#xff1b;因为编码器实现不…

ML基础-Jupyter notebook中的魔法命令

在 Jupyter Notebook 或 IPython 环境中&#xff0c;“魔法命令”&#xff08;Magic Commands&#xff09;是一些以百分号&#xff08;%&#xff09;或惊叹号&#xff08;!)开头的特殊命令&#xff0c;用于执行一些与代码运行环境相关的操作&#xff0c;而不仅仅是执行普通的 P…

【Unity2D 2022:UI】创建滚动视图

一、创建Scroll View游戏对象 在Canvas画布下新建Scroll View游戏对象 二、为Content游戏对象添加Grid Layout Group&#xff08;网格布局组&#xff09;组件 选中Content游戏物体&#xff0c;点击Add Competent添加组件&#xff0c;搜索Grid Layout Group组件 三、调整Grid La…

9-收纳的知识

[ComponentOf(typeof(xxx))]组件描述&#xff0c;表示是哪个实体的组件 [EntitySystemOf(typeof(xxx))] 系统描述 [Event(SceneType.Demo)] 定义事件&#xff0c;在指定场景的指定事件发生后触发 [ChildOf(typeof(ComputersComponent))] 标明是谁的子实体 [ResponseType(na…

数据库系统概念第六版记录 一

1.关系型数据库 关系型数据库&#xff08;Relational Database&#xff0c;简称 RDB&#xff09;是基于关系模型的一种数据库&#xff0c;它通过表格的形式来组织和存储数据。每个表由若干行&#xff08;记录&#xff09;和列&#xff08;字段&#xff09;组成&#xff0c;数据…

Vue前端开发-pinia之Actions插件

Store中的Actions部分&#xff0c;用于定义操作属性的方法&#xff0c;类似于组件中的methods部分&#xff0c;它与Getters都可以操作State属性&#xff0c;但在定义方法时&#xff0c;Getters是对State属性进行加工处理&#xff0c;再返回使用&#xff0c;属于内部计算;Action…

生成式AI安全最佳实践 - 抵御OWASP Top 10攻击 (下)

今天小李哥将开启全新的技术分享系列&#xff0c;为大家介绍生成式AI的安全解决方案设计方法和最佳实践。近年来生成式 AI 安全市场正迅速发展。据IDC预测&#xff0c;到2025年全球 AI 安全解决方案市场规模将突破200亿美元&#xff0c;年复合增长率超过30%&#xff0c;而Gartn…

一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI

一、GenBI AI 代理介绍&#xff08;文末提供下载&#xff09; github地址&#xff1a;https://github.com/Canner/WrenAI 本文信息图片均来源于github作者主页 在 Wren AI&#xff0c;我们的使命是通过生成式商业智能 &#xff08;GenBI&#xff09; 使组织能够无缝访问数据&…

JAVA架构师进阶之路

JAVA架构师进阶之路 前言 苦于网络上充斥的各种java知识&#xff0c;多半是互相抄袭&#xff0c;导致很多后来者在学习java知识中味同嚼蜡&#xff0c;本人闲暇之余整理了进阶成为java架构师所必须掌握的核心知识点&#xff0c;后续会不断扩充。 废话少说&#xff0c;直接上正…

java程序员面试自身优缺点,详细说明

程序员面试大厂经常被问到的Java异常机制问题,你搞懂了吗运行时异常:运行时异常是可能被程序员避免的异常。与检查性相反,运行时异常可以在编译时被忽略。错误(ERROR):错误不是异常,而是脱离程序员控制的问题。错误通常在代码中容易被忽略。例如:当栈溢出时,一个错误就发生了,它…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数&#xff08;C11起&#xff09;默认移动赋值运算符&#xff08;C11起&#xff09;取地址及const取地址操作符重载取地址操作符重…

防火墙的安全策略

1.VLAN 2属于办公区;VLAN 3属于生产区&#xff0c;创建时间段 [FW]ip address-set BG type object [FW-object-address-set-BG]address 192.168.1.0 mask 25 [FW]ip address-set SC type object [FW-object-address-set-SC]address 192.168.1.129 mask 25 [FW]ip address-se…

windows下搭建鸿蒙OS应用开发环境

一、前言 HUAWEI DevEco Studio 是华为推出的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于开发基于华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的应用。作为华为开发者工具的核心之一&#xff0c;DevEco Studio 提供了一个多功能的开发平台&…

MacBook Pro(M1芯片)Qt环境配置

MacBook Pro&#xff08;M1芯片&#xff09;Qt环境配置 1、准备 试图写一个跨平台的桌面应用&#xff0c;此时想到了使用Qt&#xff0c;于是开始了搭建开发环境&#xff5e; 在M1芯片的电脑上安装&#xff0c;使用brew工具比较方便 Apple Silicon&#xff08;ARM/M1&#xf…

Sqlserver DBCC Check 遇到Msg 3853报错涉及sys.columns和sys.objects信息不匹配的解决方法

对数据库CacheDBMSIntl执行DBCC checkcatalog(‘CacheDBMSIntl’)时遇到报错如下 Msg 3853, Level 16, State 1, Line 7 Attribute (object_id1071830442) of row (object_id1071830442,column_id1) in sys.columns does not have a matching row (object_id1071830442) in sy…

VUE之组件通信(二)

1、v-model v-model的底层原理&#xff1a;是:value值和input事件的结合 $event到底是啥&#xff1f;啥时候能.target 对于原生事件&#xff0c;$event就是事件对象 &#xff0c;能.target对应自定义事件&#xff0c;$event就是触发事件时&#xff0c;所传递的数据&#xff…