LSTM和双向LSTM讲解及实践

news2024/9/21 14:26:01

目录:

  • RNN的长期依赖问题
  • LSTM原理讲解
  • 双向LSTM原理讲解
  • keras实现LSTM和双向LSTM

RNN 的长期依赖问题

在上篇文章中介绍的循环神经网络RNN在训练的过程中会有长期依赖的问题,这是由于RNN模型在训练时会遇到梯度消失(大部分情况)或者梯度爆炸(很少,但对优化过程影响很大)的问题。对于梯度爆炸是很好解决的,可以使用梯度修剪(Gradient Clipping),即当梯度向量大于某个阈值,缩放梯度向量。但对于梯度消失是很难解决的。所谓的梯度消失或梯度爆炸是指训练时计算和反向传播,梯度倾向于在每一时刻递减或递增,经过一段时间后**,梯度就会收敛到零(消失)或发散到无穷大(爆炸)。简单来说,长期依赖的问题就是在每一个时间的间隔不断增大时**,RNN会丧失到连接到远处信息的能力

如下图,随着时间点t的不断递增,当t时刻和0时刻的时间间隔较大的时候 t t t时刻的记忆 h t ht ht可能已经丧失了学习连接到远处0时刻的信息的能力了
假定 x 0 x_0 x0,的输入为“我住在深圳”。后面插入了很多其他的句子,然后在 x t x_t xt输入了:我在市政府上班,由于 x 0 和 x t x_0和x_t x0xt相差很远,当RNN输入到 x t x_t xt时, t t t时刻的记忆已经丧失了 x 0 x_0 x0时保存的信息啦。因此 x t x_t xt时刻的神经网络已经无法理解到我是在那个城市的市政府上班啦

在这里插入图片描述

LSTM原理讲解

在理论上, RNN绝对可以处理这样长度依赖问题,人们可以仔细的挑选参数来解决这类问题中的最初级形式。但在实践中,RNN却不能够成功的学习到这些知识,因此,LSTM就是为了解决长期依赖问题而生的,LSTM通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中,是LSTM默认行为。而非需要付出很大的代价才能才能获得的能力
所有的RNN都具有一种重复神经网络模块的链式的形式。在标准的RNN中,这个重复的模块只有一个非常简单的结构。例如一个 t a n h 层 tanh层 tanh
在这里插入图片描述
LSTM同样是这样结构,但是重复的模块拥有一个不同的结构,不同于,单一神经网络层, 这里有四个,以一种非常特殊的方式进行交互

在这里插入图片描述
先介绍上图中符号的含义:
在这里插入图片描述
在上面的图例中,每一条黑线都传输着一整个向量从一个节点的输出到其他节点的输入。粉色的圈代表 p o i n t w i s e pointwise pointwise操作。
诸如向量的和,而黄色的矩阵都是学习到的神经网络层
合在一起的线表示向量的连接分开的线表示内容被复制
然后分发到不同位置

接下来将对LSTM进行逐步理解,在每个记忆单元(图中A)中包括细胞状态 c t c_t ct,遗忘门、输入门和输出门。这些门结构能够让信息选择性的通过。用来去除和增加信息到细胞状态

细胞状态( c t c_t ct)

t t t时刻记忆信息,用来保存重要信息。就好像我们的笔记本一样,保存了我们以前学过的知识点,如下图的水平线从图上方贯穿运行直接在整个链上运行,使得信息在上面流传保持不变会很容易

在这里插入图片描述

遗忘门

控制遗忘上一层细胞状态的内容,根据上一序列 h t − 1 h_{t-1} ht1,
和本序列 x t x_t xt为输入。通过 S i g m o i d Sigmoid Sigmoid激活函数,得到上一层细胞状态内容那些需要去除。那些需要保留。值得注意的是:
该输入是以向量的形式,我们希望遗忘门输出的值大多为0或1. j即对向量中的每个值是完全忘记或完全记住
因此,我们使用的是 S i g m o i d Sigmoid Sigmoid作为激活函数,因为该函数在许多取值范围内的值都接近于0和1.(这里不能用阶跃函数作为激活函数)因此其在所有位置的梯度都为0,无法作为激活函数,其他们使用 S i g m o i d Sigmoid Sigmoid函数同理。因此,虽然在其他神经网咯可以变换激活函数。但并不建议变换LSTM的激活函数
在这里插入图片描述
以上一个例子来说明遗忘门的作用。在语言模型中,细胞状态可以保存着这样重要的信息。当前主语为单数或复数等,如当前的主语**为"小明“**如当前的主语为“小明”,当输入为“同学们”,此时遗传门就要开始“干活”了,将“小明”遗忘,主语为单数形式遗忘

输入门

处理当前序列位置的输入,确定需要更新的信息。去更新细胞状态。此过程分为两部分:

  • 一部分使用包含 s i g m o i d sigmoid sigmoid层的输入们决定那些信息该被加入到细胞状态
  • 确定了那些信息要加入后,需要将新信息转换成能够加入到细胞状态的形式。所以,另一部分是使用 t a n h tanh tanh函数,产生一个新的候选向量。(可以这么理解,LSTM的做法是对信息都转为能加入细胞状态的形式,然后再通过第一部分得到的结果,确定其中那些信息加入到细胞状态。)
    在这里插入图片描述
    有了遗忘门和输入门,现在我们就能把细胞状态 C t − 1 C_{t-1} Ct1更新为 C t C_t Ct,如下图所示:其中 f t × C t − 1 f_t \times C_{t-1} ft×Ct1表示希望删除的信息,
    i t × C t it \times C_t it×Ct示新增的信息

在这里插入图片描述

输出门

最后要基于细胞状态保存的内容来确定输出什么内容。即选择性的输出细胞状态保存的内容。类似于输入门两部分实现更新一样,输出门也是需要使用sigmoid激活函数确定哪个部分的内容需要输出,然后再使用tanh激活函数对细胞状态的内容进行处理(因为通过上面计算得到的Ct每个值不是在tanh的取值范围-1~1中,需要调整),将这两部分相乘就得到了我们希望输出的那部分。

在这里插入图片描述
举个例子,同样在语言模型中,细胞状态中此时包含很多重要的信息,比如:主语为单数形式、时态为过去时态、主语的性别为男性等。此时输入为一个主语,可能需要输出与动词相关的信息。这时候只需要输出的是单数的形式和时态为过程。而不需要输出主语性别就可以确定动词词性的变化

双向LSTM

如上篇文章BRNN所述同理,有时候预测可能需要由前面若干输入后面若干输入共同决定。这样会更加准确,因此,提出了双向循环神经网络。网络结构如下图:可以看到 f o r w a r 层 forwar层 forwar B a c k w a r d 层 Backward层 Backward,共同连接着输出层,其中包含着六个共享权值 w 1 − w 6 w1-w6 w1w6.
在这里插入图片描述
在Forward层从 1 1 1时刻到 t t t时刻,正向计算一遍。得到并保存每个时刻向前隐含层的输出。在 B a c k w a r d Backward Backward层中,沿着时刻 t t t和时刻 1 1 1反向计算一遍,得到并保存每个时刻向后隐含层的输出
最后在每个时刻,结合 F o r w a r d 层 和 B a c k w a r d 层 Forward层和Backward层 ForwardBackward的相应时刻输出的结果得到最终的输出,用数学表达式计算如下:
在这里插入图片描述
有的问题,其实稍微看一遍都可以明白了。

keras实现LSTM和双向LSTM

keras对神经网络的支持和封装,在上一篇文章中已经讲解了,在这里仅介绍两个模型的搭建,如雨疑问,请阅读keras系列的上一篇文章。

LSTM模型

在这里插入图片描述

Bi-LSTM模型

在这里插入图片描述

训练模型

在这里插入图片描述

预测

在这里插入图片描述

总结

慢慢的将各种模型都罗列出来,全部都将其搞定都行啦的样子打算。

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

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

相关文章

网络1323的分类行为

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 用网络分类A和B,让A是(0,1)(1,1),让B是(1,0)(1,1)。测试集为&#xf…

[附源码]计算机毕业设计springboot学生在线考试系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

408 考研《操作系统》第一章第三节:中断和异常、系统调用

文章目录教程1.中断和异常1.1 中断的作用1.2 中断的类型1.2.1 外中断的处理过程1.2.1 内中断的处理过程1.3 中断机制的基本原理1.4 总结2. 系统调用2.1 什么是系统调用?2.2 小例子:为什么系统调用是必须的?2.3 什么功能要用系统调用实现&…

m基于随机接入代价的异构网络速率分配算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 无线接入技术发展迅速,异构网络并存的现象普遍存在;同时,随着终端用户数量的剧增、业务类型的多样化和高服务质量多媒体数据业务需求的增加,通过异…

磨金石教育插画技能干货分享|插画怎么配色才好看?

在绘画界,配色是非常重要的步骤,一幅作品能够展现出什么样的品质,配色起着举足轻重的作用。颜色配的好会给作品晋商添花,配的不好,就会让作品失去水准,缺少神韵。 所以想学好插画,就要在在配色上…

python离线环境下安装第三方模块的方法

一.背景 1.背景: 在实际开发中,我们自己电脑上方便上网可以随时安装自己需要的包文件,但是有的项目现场不能联网或者现场是“内网”不具备联网条件,所以必须解决在“离线电脑上”安装需要的软件包的问题。 2.环境说明以及实现步…

SpringCloud微服务项目实战 - 项目搭建

面对大河我无限惭愧 我年华虚度空有一身疲倦 系列文章目录 项目搭建app登录 一、项目介绍 1. 项目背景 项目概述: 类似于新闻头条,是一个新闻资讯类项目 (这里之后放项目APP端的截图) 技术架构: 项目术语&…

Ubuntu18.04安装ROS、Gazebo、Mavros、PX4、QGC教程

修改国内源 修改apt sudo cp /etc/apt/source.list /etc/apt/source.list.old sudo gedit /etc/apt/source.list输入如下进行保存 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic m…

转行|什么是游戏建模??小本本记下来

今天来说一下游戏建模…小本本记下来 👀3D手绘建模 3D美术设计师根据原画设计师的构思,将二维的东西在3D软件里面制作出来,最终得到的东西是模型( 3Dmax )和贴图(软件PS、Bodypaint ) ,模型是物体的主要构架&#xff…

Kaggle Feedback Prize 3比赛总结:两种模型设计思路

比赛的目标:本次竞赛的目标是评估8-12年级英语学习者(ELLs)的语言能力。利用英语学习者所写的论文数据集开发出能更好地支持所有学生的能力模型,帮助ELL学生在语言发展方面得到更准确的反馈,并加快教师的评分周期。 方…

RestTemplate使用InputStreamResource上传文件

背景 1. 我们应用服务是Spring boot项目,预览服务是我们另一个团队提供的用.net写的,最终使用的是office online来实现文件预览的功能。 2. 我们文件在阿里云OSS存储,我们需要预览文件需要将文件上传至预览服务器。 3. 计划使用RestTemplate…

线程池自查注意点

文章目录线程池自查注意点1、线程池的标准创建方式2、线程池的任务调度流程3、避免使用Executors快捷创建线程池3.1、newSingleThreadExecutor()3.2、newCachedThreadPool()3.3、ScheduledThreadPool()4、避免在方法中创建线程池5、不要盲目使用同步队列6、使用线程池&#xff…

MySQL库的操作

文章目录MySQL库的操作创建数据库创建数据库案例字符集和校验规则查看系统默认字符集以及校验规则查看数据库支持的字符集查看数据库支持的字符集校验规则校验规则对数据库的影响操纵数据库查看数据库显示创建语句修改数据库删除数据库备份和恢复数据库的备份和恢复表的备份和恢…

Cracking the Safes之Linux系统下gdb调试

Cracking Safe是什么 挑战是找出四个保险箱中每个保险箱预期的正确的5个输入集。在运行二进制安全程序时,您需要一次输入一个猜测,如下所示: 其实,就是输入5次,程序会对输入内容进行判断,只有符合程序要求才能成功,任务就是逆向找到正确的字符串!!! 解题思路 反汇…

mac pro M1(ARM)安装:centos8.0虚拟机

0.引言 mac发布了m1芯片,其强悍的性能收到很多开发者的追捧,但是也因为其架构的更换,导致很多软件或环境的安装成了问题,之前我们讲解了如何安装centos7。这次我们接着来看如何在mac m1环境下安装centos8 1.下载 1.1 安装VMwar…

Java基于springboot+vue的五金用品销售购物商城系统 前后端分离

五金用品是当前很多家庭和维修人员必备的工具,他们可以让维修变的更加简单,甚至有很多维修必须有配套的专业工具才能够完成,但是很多时候人们在五金店购买这些五金用品的时候不是价格昂贵就是缺少一些想要的工具,这个是通过开发一…

Guava 对 Map的操作

Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合、缓存、并发、I/O等多个方面。使用这些API一方面可以简化我们代码,使代码更为优雅,另一方面它补充了很多jdk中没有的功能,能让我们开发中更…

C语言刷题(2)

🐒博客名:平凡的小苏 📚学习格言:别人可以拷贝我的模式,但不能拷贝我不断往前的激情 文件拷贝 问题描述: 小蓝正在拷贝一份文件,他现在已经拷贝了 t 秒时间,已经拷贝了 c 字节&#…

解决eclipse导入svn项目报 403Forbidden

解决eclipse导入svn项目报 403Forbidden问题; 首先,产生这个问题的原因:①导入的svn项目没有权限;②上次导入的svn项目在身份验证的时候保存了用户名以及密码;(我遇到这个情况的原因是因为②) …