循环神经网络LSTM

devtools/2024/11/15 3:56:47/

循环神经网络LSTM

LSTM模型单元

LSTMRNN两个神经网络运行方式相同,但单元结构不同

LSTM的单元结构较RNN复杂一些,因此运行时间较长,但性能比较好

如下,就是LSTM神经网络的一个单元

img

LSTM单元中包含四个交互的层,即三个 S i g m i o d Sigmiod Sigmiod层和一个 t a n h tanh tanh层,并以一种非常特殊的方式进行交互

如上图中,每一条黑线传输着一个向量,粉色的圈代表某种操作(加、乘),黄色的矩阵代表学习到的神经网络层,合在一起的线表示向量的连接,即Cancatenate,分开的线代表内容的复制,分发到不同的位置

LSTM遗忘门

遗忘门的作用是信息的筛选,告诉我们:

  • 什么样的东西应该保存下来,即乘1,相当于信息的复制
  • 什么样的东西应该被以往,即乘0,相当于信息的剔除

遗忘门是通过 S i g m i o d Sigmiod Sigmiod函数实现的,将输入映射到 [ 0 , 1 ] [0, 1] [0,1]区间内,越重要的信息映射的值越接近于1,越不重要的信息映射的值越接近于0,从而确保了保存重要的信息,丢弃不重要的信息

img

最终得到向量 f t f_t ft,能够帮助我们的网络进行筛选信息,本文在这称为筛子

LSTM输入门

输入门,顾名思义就是告诉我们需要输入哪些信息,即 h t − 1 h_{t-1} ht1 x t x_t xt

img

h t − 1 h_{t-1} ht1 x t x_t xt 融合之后得到 [ h t − 1 , x t ] [h_{t-1}, x_t] [ht1,xt],然后分两次通过一层 S i g m o i d Sigmoid Sigmoid t a n h tanh tanh,分别得到 i t i_t it C t ~ \tilde{C_t} Ct~

其中, i t i_t it的功能与 f t f_t ft 一样,起到筛子的作用

细胞状态更新

细胞状态更新包括两个部分:

  • 前一时刻的信息
  • 现有时刻的信息

img

通过遗忘门,可以得到 f t f_t ft,位于 [ 0 , 1 ] [0, 1] [0,1]区间,其数值大小代表信息重要程度,将 f t f_t ft C t − 1 C_{t-1} Ct1 (前一时刻信息)对应元素相乘,进行了对前一时刻信息的筛选

通过输出门,得到 i t i_t it,其功能与 f t f_t ft 一样,生成的是信息重要程度向量,将 i t i_t it C t ~ \tilde{C_t} Ct~ (当前时刻信息)对应元素相乘,进行了对现有时刻信息的筛选

最后在将二者融合,即相加,更新细胞状态,得到 C t C_t Ct

C t C_t Ct 里保留了了 0 − t 0 - t 0t 中的所有较为重要的信息,不存在或者较少的存在那些不重要的信息

通过网络的不断训练,不断更新输入们与遗忘门中的权重参数( W 、 b W、b Wb),模型会更好的知道哪些信息是重要的,哪些信息是不重要的,最终完成我们的任务

LSTM输出门

输出门主要用来输出 h t h_t ht,即确定我们要输出什么样的值

img

首先将 [ h t − 1 , x t ] [h_{t-1}, x_t] [ht1,xt]融合,经过 S i g m o i d Sigmoid Sigmoid函数再形成一个筛子,然后再与当前的细胞状态 C t C_t Ct 进行对应元素相乘,对信息进行再筛选,然后一路通往下一层最为当前层的输出,一路通往下一时刻,作为下一时刻的输入

LSTM最终的输出需要进行三次筛选(状态更新两次,输出门一次),因此能够较好地保留有用的信息,剔除没用的信息,相较于RNN的效果较好,但由于需要训练的参数较多,因此速度较慢

LSTM缓解梯度消失问题

RNN中,导致梯度消失的原因是 ∏ k = i k = t − 1 ∂ h k + 1 ∂ h k \prod_{k=i}^{k=t-1} \frac{\partial h_{k+1}}{\partial h_k} k=ik=t1hkhk+1中每个小项都是小于0的情况下导致梯度连乘最后接近于0,从而出现梯度消失的情况

而在LSTM细胞状态更新中,即公式 C t = f t ∗ C t − 1 + i t ∗ C t ~ C_t = f_t * C_{t-1} + i_t * \tilde{C_t} Ct=ftCt1+itCt~,也存在 C t − 1 C_{t-1} Ct1 项,即也存在递归现象

但是,对 ∂ C t ∂ C t − 1 \frac{\partial C_t}{\partial C_{t-1}} Ct1Ct 求偏导后,可以发现存在一项 f t f_t ft ,遗忘门的输出,可以控制 ∂ C t ∂ C t − 1 \frac{\partial C_t}{\partial C_{t-1}} Ct1Ct 的数值大小,即可以缓解梯度消失的问题

求导过程

在这里插入图片描述


http://www.ppmy.cn/devtools/86445.html

相关文章

R语言 爬取数据+简单清洗

小小练习。见代码注释 # 加载必要的包 library(rvest) library(dplyr) library(tidyr)# 指定网页URL url <- "https://research.un.org/en/unmembers/scmembers"# 读取网页内容 webpage <- read_html(url)# 提取所有表格节点 table_nodes <- html_nodes(web…

基于SpringBoot+Vue的漫画网站(带1w+文档)

基于SpringBootVue的漫画网站(带1w文档) 基于SpringBootVue的漫画网站(带1w文档) 在漫画信息管理方面还有许多改进。实际上如今信息化成为一个未来的趋势或者可以说在当前现代化的城市典范中,信息化已经成为主流,开发一个漫画网站一方面的可能会更合乎时宜,另一方面来说也可以提…

FFmpeg研究

1.FFmpeg介绍 FFmpeg的全称是“Fast Forward Moving Picture Expert Group”&#xff0c;组件由命令行应用程序和函数库两部分组成。通俗概括来说&#xff0c;FFmpeg 是一个免费的开源程序库&#xff0c;一个多媒体音视频处理分析工具软件&#xff0c;且提供命令行方式调用&am…

面向对象编程:一切皆对象

面向对象(OOP)是一种编程范式,它使用对象来设计软件。对象可以包含数据和代码&#xff1a;数据代表对象的状态&#xff0c;而代码代表操作数据的方式。在面向对象编程中&#xff0c;一切皆对象&#xff0c;这意味着将现实世界事务使用类与实例来模拟&#xff0c;如灯&#xff0…

Cocos Creator2D游戏开发-(1)初始化设置

初心: 做一款微信或者抖音小游戏,然后发布,对于我来说这是一个新的赛道; 写这些文档的原因,记录一下自己学习过程,下次用的时候方便找 cocos creator版本: 3.8.3 当前小游戏飞机大战教程来源于: 抖音: 禅影 chanying001 源码目录: https://www.kdocs.cn/l/caLr6XCbEfPa 创建一个…

数据结构——双向链表

目录 一、链表的分类 (1)单向或双向​编辑 &#xff08;2&#xff09;带头或不带头​编辑 &#xff08;3&#xff09;循环或不循环​编辑 &#xff08;4&#xff09;补充 二、实现双向链表 &#xff08;1&#xff09;List.h (2)List.c (3)注意 三、顺序表和链表的比较 四…

UPLOAD-LABS靶场[超详细通关教程,通关攻略]

---------------------------------------- 靶场环境&#xff1a; 下载链接&#xff1a; https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 ------------------------------------…

Java面试八股之简述spring boot的目录结构

简述spring boot的目录结构 Spring Boot 项目遵循标准的 Maven 或 Gradle 项目布局&#xff0c;并且有一些约定的目录用于组织不同的项目组件。下面是一个典型的 Spring Boot 项目目录结构&#xff1a; src/main/java&#xff1a;包含所有的 Java 源代码&#xff0c;通常按包组…