【神经网络】LSTM

news2024/11/16 9:27:33

1.什么是LSTM

        长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,相比普通的RNN,LSTM能够在更长的序列中有更好的表现。

        LSTM区别于RNN地方,主要就在于它在算法中加入了一个判断信息有用与否的"处理器",这个处理器作用的结构被称为cell。一个cell当中被放置了三扇门,分别叫做输入门、遗忘门和输出门。一个信息进入LSTM的网络当中,可以根据规则来判断是否有用。只有符合算法认证的信息才会留下,不符的信息则通过遗忘门被遗忘。

2.LSTM的优势

2-1 LSTM架构

        相比于RNN,LSTM的结构增加了三个门“遗忘门”、“输入门”、“输出门”。LSTM靠着一些“门”结构让信息有选择地影响循环神经网络中每个时刻的状态,所谓“门”结构,就是使用一个sigmoid的全连接层和一个按位做乘法的操作,这两个结合起来就是一个“门”结构。之所以叫“门”结构是因为使用sigmoid作为激活函数的全连接神经网络会输出一个0到1之间的数值,描述当前输入的有多少信息量可以通过这个结构。当门全打开时(sigmoid全连接层输出为1时),全部信息都能通过;当门全部关上时(sigmoid全连接层输出为0时),任何信息不能通过。如下图为LSTM的整体结构图,其中黄色的框代表的是激活函数,其中σ代表sigmoid函数(0-1之间),tanh自然就是tanh函数(-1-1之间);粉色的圆圈代表的是向量之间的运算。 

如下图为LSTM的内部结构图。

    图中ca2e01a80a0220069168f9b012ff4216.png代表遗忘门,cf5bcb9803a46fb739b2800951c1c319.png代表输入门,3091516090d9993be68608a46fdd16f3.png代表输出门。C是memroy cell,存储记忆信息。681ac60ef0697ba97c40ebbbff9872d3.png代表上一时刻的记忆信息,3802974735f2ec4406ecb0f40bb75db7.png代表当前时刻的记忆信息,h是LSTM单元的输出,5a90fed5f45bb9b10a9202b28941df7a.png是前一刻的输出。

2-2 LSTM结构

2-2-1 细胞状态

        LSTM的关键是细胞状态(直译:cell state),表示为 Ct ,用来保存当前LSTM的状态信息并传递到下一时刻的LSTM中。当前的LSTM接收来自上一个时刻的细胞状态C_{t-1} ,并与当前x_{t}LSTM接收的信号输入x_{t} 共同作用产生当前LSTM的细胞状态C_{t} 。      

        在LSTM中,采用专门设计的“门”来引入或者去除细胞状态 Ct 中的信息。门是一种让信息选择性通过的方法。有的门跟信号处理中的滤波器有点类似,允许信号部分通过或者通过时被门加工了;有的门也跟数字电路中的逻辑门类似,允许信号通过或者不通过。这里所采用的门包含一个sigmod神经网络层和一个按位的乘法操作。

2-2-2遗忘门 

       遗忘门决定了细胞状态C_{t-1} 中的哪些信息将被遗忘。 遗忘门由一个sigmod神经网络层和一个按位乘操作构成。

        遗忘门包含一个sigmod神经网络层(黄色方框,神经网络参数为W_{f}b_{f}),接收t时刻的输入信号x_{t}t-1时刻LSTM的上一个输出信号h_{t-1},这两个信号进行拼接以后共同输入到神经网络层sigmod中,然后输出信号f_{t} ,f_{t}是0-1到之间的数值,并与C_{t-1}相乘来决定C_{t-1}中的哪些信息将被保留,哪些信息将被舍弃。具体公式如下:

        C_{t-1}= [0.5,0.6,0.7],h_{t-1} = [0.3,0.8,0.69],x_{t} = [0.2,1,3,0.7] ,那遗忘门的输入信号就是h_{t-1}x_{t}的组合,[h_{t-1},x_{t}] = [0.3,0.8,0.69,0.2,1.3,0.7],然后通过sigmod神经网络层输出每个元素都是处于0-1之间的向量f_{t} = [0.5,0.1,0.8]C_{t-1}按位相乘。

 2-2-3 输入门

        输入门的作用与遗忘门相反,它将决定新输入的信息x_{t}h_{t-1}中哪些信息将被保留。输入门包含两部分,一个是sigmod神经网络层(神经网络参数为W_{i}b_{i})和一个tanh神经网络层(神经网络参数为W_{c}b_{c})

        sigmod神经网络层的作用很明显,跟遗忘门一样,它接收 h_{t-1}x_{t}作为输入,然后输出一个0到1之间的数值i_{t}来决定哪些信息需要被更新; 

        Tanh神经网络层的作用是将输入的 h_{t-1}x_{t}整合,然后通过tanh神经网络层来创建一个新的状态候选向量\tilde{C_{t}}\tilde{C_{t}}的值范围在-1到1之间。 

        输入门的输出由上述两个神经网络层的输出决定i_{t} 与\tilde{C_{t}}相乘来选择哪些信息将被新加入到  时刻的细胞状态C_{t}中。 

2-2-4 细胞状态更新

        通过遗忘门和输入门,将可以细胞状态 Ct更新。

        细胞状态更新公式如下: 

     将遗忘门的输出f_{t} 与上一时刻的细胞状态C_{t-1}相乘来选择遗忘和保留一些信息,将输入门的输出与从遗忘门选择后的信息加和得到新的细胞状态 C_{t}。这就表示t时刻的细胞状态C_{t}已经包含了此时需要丢弃的t-1时刻传递的信息和t时刻从输入信号获取的需要新加入的信息i_{t}*\tilde{C_{t}}。 C_{t}将继续传递到t+1时刻的LSTM网络中,作为新的细胞状态传递下去。  

2-2-5 输出门

        输出门用来控制单元状态C_{t}有多少输入到LSTM的当前输出h_{t}。由sigmod神经网络层tanh激活函数以及按位乘操作组成。

         h_{t-1}x_{t}作为输入,经过sigmod的神经网络层(神经网络层的网络参数为W_{0}b_{0}),然后输出一个0到1之间的数值o_{t}; 

            C_{t}经过一个tanh激活函数,此处需要注意的是(tanh是作为激活函数而不是神经网络层)得到一个在-1到1之间的树枝,并与o_{t}相乘得到输出信号h_{t}。之后h_{t}作为下一时刻的输入信号传递到下一阶段。

3.后记

        LSTM通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。但也因为引入了很多内容,导致参数变多,也使得训练难度加大了很多。

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

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

相关文章

Java查漏补缺(09)异常概述、Java异常体系、常见的错误和异常、异常的处理、手动抛出异常对象:throw、自定义异常

Java查漏补缺(09)异常概述、Java异常体系、常见的错误和异常、异常的处理、手动抛出异常对象:throw、自定义异常本章专题与脉络1. 异常概述1.1 什么是生活的异常1.2 什么是程序的异常1.3 异常的抛出机制1.4 如何对待异常2. Java异常体系2.1 T…

【JAVA】xxl-job服务搭建

xxl-job服务搭建 1.下载xxl-job项目 https://github.com/xuxueli/xxl-job 2.数据库表创建 3.修改配置 注意:这是两个项目,一个是xxl-job前台,一个是xxl-job执行器,找到这两个项目得配置文件,修改配置。 配置文件地址…

day54【代码随想录】二刷数组

文章目录前言一、二分查找(力扣724)二、移除元素(力扣27)【双指针】三、有序数组的平方(力扣977)【双指针】四、合并两个有序数组(力扣88)五、长度最小的子数组(力扣209&…

前端学习第二阶段-第3章 Flex 伸缩布局

3-1 移动端基础知识 01-移动端基础 02-视口 03-meta视口标签 04-物理像素与物理像素比 05-二倍图 06-背景缩放background-size 07-背景二倍图以及多倍图切图 08-移动端开发选择 09-移动端技术解决方案 10-移动端特殊样式 11-移动端技术选型 12-流式布局 3-2 移动端电商首页制作…

Python基础—while循环

(1)while循环&#xff1a; 语法格式&#xff1a; while 条件&#xff1a;   执行语句1……   执行语句2…… 适用条件&#xff1a;无限循环 死循环 while True:print(条件是真的&#xff01;)代码实例&#xff1a; i 0 # 创建一个计数的变量 while i < 5: # Truepr…

感知趋势,洞察发展:2023(第十届)趋势与预测大会成功举办

2023年2月23日&#xff0c;运联年会&#xff1a;2023&#xff08;第十届&#xff09;趋势与预测大会在深圳机场凯悦酒店成功闭幕。自2014年开始&#xff0c;“运联年会&#xff1a;趋势与预测”已经连续举办九届。这场大会&#xff0c;既是一次行业性的“年终总结”&#xff0c…

【Java开发】JUC基础 01:进程、线程、多线程

1 进程与线程1.1 进程开发写的代码称为程序&#xff0c;那么我们将程序运行起来&#xff0c;我们称之为进程&#xff1b;进程就是申请一块内存空间&#xff0c;将数据放到内存空间中去&#xff0c;是系统进行资源分配和调度的基本单位。&#x1f4cc; 程序与进程的区别程序是数…

QML Item

在QML中所有的可视项目都继承自Item&#xff0c;虽然Item本身没有可视化的外观&#xff0c;但它定义了可视化项目的所有属性。 Item可以作为容器使用&#xff1a; Item{Rectangle{id:retc}Rectangle{id:retc1}Rectangle{id:retc2}Rectangle{id:retc3}} item拥有children属性…

MyBatis学习笔记(七) —— 特殊SQL的执行

7、特殊SQL的执行 7.1、模糊查询 模糊查询的三种方式&#xff1a; 方式1&#xff1a;select * from t_user where username like ‘%${mohu}%’ 方式2&#xff1a;select * from t_user where username like concat(‘%’,#{mohu},‘%’) 方式3&#xff1a;select * from t_u…

DolphinScheduler跨版本升级1.3.8至3.0.1

DolphinScheduler跨版本升级1.3.8至3.0.1Refer背景基础环境依赖版本升级修改pom.xml问题解决MYSQL升级1.文件替换2.修改表结构t_ds_process_definitiont_ds_alertt_ds_process_instance3.时间参数修改4.数据库升级DOLPHIN安装zookeeper集群创建用户dolphinscheduler_env.shinst…

指针变量作为函数参数详解,形参和实参之间的值传递如何传递?如何改变指针变量所指向的变量?

函数的参数不仅可以是整型&#xff0c;浮点型&#xff0c;字符型等数据&#xff0c;还可以是指针类型&#xff1b;它的作用是将一个变量的地址传送到另一个函数中。 关于地址&#xff0c;指针&#xff0c;指针变量可以参考我的上一篇文章&#xff1a; 地址&#xff0c;指针&…

线程的基本方法

线程等待&#xff1a;wait方法 调用wait方法的线程会进入WAITING状态&#xff0c;只有等到其他线程的通知或程序被中断才会返回。调用wait方法后会释放对象的锁&#xff0c;因此 wait方法一般被用于同步方法或同步代码块中 。 线程睡眠&#xff1a;sleep方法 调用sleep方法会导…

Spring Boot 版本升级2.2.11.RELEASE至2.7.4

2.2.11.RELEASE > 2.7.4项目更新spring-boot-starter-parent 主依赖&#xff0c;导致项目跑不起了日志也没有输出有用信息&#xff0c;自己查看源码调试启动入口打断点&#xff0c;一步步进入方法定位项目停止代码我的项目执行到SpringApplication.class 的152行代码会停止项…

华为HCIE学习之Openstack Glance组件(glance对接swift)

文章目录一、Glance的结构二、服务部署流程三、将glance存储在swift中1、默认使用swift来存储2、指定可以存在swift中3、swift版本4、keystone的endpoint地址&#xff08;当glance去找swift时通过keystone去找&#xff09;5、租户名:用户名&#xff0c;用户必须拥有admin角色6、…

【C语言】自定义类型:结构体、枚举、联合

目录 1.结构体 1.1结构体类型 1.2结构体的自引用 1.3结构体的初始化 1.4结构体内存对齐 //对齐 //offsetof //修改默认对齐数 1.5结构体传参 2.位段 2.1位段的内存开辟 2.2位段的内存分配 3.枚举 4.联合&#xff08;共用体&#xff09; //判断大小端 1.结构体…

【GO】k8s 管理系统项目23[前端部分–工作负载-Pod]

k8s 管理系统项目[前端部分–工作负载-Deployment] 1. 代码部分 1.1 准备工作 由于Pod页面和Deployment内容差不多.那么就直接把Deployment的内容复制过来.再做修改. 替换Deployment为Pod替换Deploy为Pod替换deployment为pod替换deploy为pod禁用新增的按钮,删除新增方法,表…

django后端服务、logstash和flink接入VictoriaMetrics指标监控

0.简介 通过指标监控可以设置对应的告警&#xff0c;快速发现问题&#xff0c;并通过相应的指标定位问题。 背景&#xff1a;使用的 VictoriaMetrics(简称 VM) 作为监控的解决方案&#xff0c;需要将 django 服务、logstash 和 flink 引擎接入进来&#xff0c;VM 可以实时的获…

SpringBoot:SpringBoot配置文件.properties、.yml 和 .ymal(2)

SpringBoot配置文件1. 配置文件格式1.1 application.properties配置文件1.2 application.yml配置文件1.3 application.yaml配置文件1.4 三种配置文件优先级和区别2. yaml格式2.1 语法规则2.2 yaml书写2.2.1 字面量&#xff1a;单个的、不可拆分的值2.2.2 数组&#xff1a;一组按…

操作系统权限提升(十八)之Linux提权-内核提权

Linux 内核提权 Linux 内核提权原理 内核提权是利用Linux内核的漏洞进行提权的&#xff0c;内核漏洞进行提权一般包括三个环节&#xff1a; 1、对目标系统进行信息收集&#xff0c;获取到系统内核信息及版本信息&#xff1b; 2、根据内核版本获取其对应的漏洞以及EXP 3、使…

第七届蓝桥杯省赛 C++ A/B组 - 四平方和

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;四平方和 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家…