深度学习入门笔记(八)可以不断思考的模型:RNN与LSTM

8.1 循环神经网络RNN

之前学到的 CNN 和全连接,模型的输入数据之间是没有关联的,比如图像分类,每次输入的图片与图片之间就没有任何关系,上一张图片的内容不会影响到下一张图片的结果。但在自然语言处理领域,这就成了一个短板。

RNN因此出现,它是一类用于处理序列数据的神经网络。其基本单元结构如下
在这里插入图片描述
自底向上的三个蓝色的节点分别是输入层、隐藏层和输出层。U 和 V 分别是连接两个层的权重矩阵。如果不考虑右边的棕色环路的话,就是一个典型的全连接的网络。

将上面的环路展开,如下
在这里插入图片描述
含义为:在 t 时刻,网络接受输入 Xt 和来自 t-1 时刻的隐藏层状态 St-1,并产生一个 t 时刻的隐藏层状态 St,以及 t 时刻的输出 Ot。其公式化的表示为:
在这里插入图片描述
其中 g 和 f 是各自节点的激活函数。这里面需要注意的一点是,对于每一个时间 t,U、V、W 都是同一个,这非常类似上一章讲到的权值共享。

RNN 的权值共享主要出于两方面的考虑:

  • 减少参数量,也减少计算量
  • RNN 接受的输入是可变长的,如果不进行权值共享,那每个 W 都不同,我们无法提前预知需要多少个 W,实现上的计算就会非常困难。

以上是典型的RNN结构。

8.1.1 变体:双向RNN(BiRNN)

在这里插入图片描述

相比于 RNN,BiRNN 维持了两个方向的状态。正向计算和反向计算不共享权重,也就是说 U、V、W 分别有两个,以对应不同的方向。其公式化的表示就变成了如下的形式:
在这里插入图片描述

8.1.2 变体:深度RNN

前面介绍的结构中,隐藏层只有一层,但在实际的使用中,也经常会增加隐藏层的数量,即为深度RNN,能够捕获和关联更多的前后信息以提升效果。

8.2 RNN 的梯度消失与爆炸

我们尝试求 RNN 的梯度,首先明确函数关系,如下所示:
在这里插入图片描述
求梯度实际上是求 W、V、U 的偏导数。我们以 L 对 W 在 t 时刻求偏导数为例,推导过程如下:
在这里插入图片描述
可以发现,L 关于 W 的偏导数会随着序列的长度而产生长期依赖。

也就是指当前系统的状态,可能受很长时间之前系统状态的影响,这是RNN中无法解决的一个问题。

而且RNN 一般会使用 tanh 函数作为它的激活函数,而 tanh 的导数在 0-1 之间。如此一来,如果 W 也是在 0-1之间,随着 t 的增大,梯度计算中连续相乘就会变得很长,很多个在 0~1 之间的数相乘会逐渐接近 0。梯度接近 0 则意味着梯度消失了;反之如果 W 很大,则梯度也会变得非常大,进而产生梯度爆炸,这是一个很严重的问题。

这就是接下来要介绍的长短期记忆网络要解决的问题。

8.3 长短期记忆网络LSTM

针对RNN的问题,如果我们能让 RNN 在接受上一时刻的状态和当前时刻的输入时,有选择地记忆和删除一部分内容(或者说信息),问题就可以解决了,比如有一句话提及刚才吃了苹果,那么在此之前说的吃香蕉的内容就没那么重要,删除就好了。

LSTM结构如下
在这里插入图片描述
Ct-1表示上一时刻的细胞状态(cell state),ht-1则表示上一时刻的隐藏状态(hidden state)。

LSTM 独特的地方在于它内部使用了 3 个逻辑门来控制细胞的状态,分别是遗忘门、输入门和输出门,并对应了忘记、选择、更新、输出这 4 个不同的阶段,从而有选择性地保留或删除信息。

忘记阶段

刚才说过,对于上一时刻的状态我们如果能够选择性地记忆就好了。LSTM 中就使用了 Zf这个逻辑门来实现相应的功能,这个逻辑门实际上是一个 Sigmoid 单元,我们称为遗忘门。Sigmoid 可以将输入映射在 0~1 之间,得到的值再与 Ct-1相乘,这样就实现了对上一时刻状态 Ct-1的控制,即哪些信息保留或者删除多少。遗忘门的公式化表示为:
在这里插入图片描述

选择阶段

忘记阶段用来选择性保留或者删除上一时刻的内容,选择阶段决定给当前时刻的细胞状态添加哪些新的信息。

这个阶段包括 2 个环节:首先是利用 ht-1和 xt通过 1 个 Sigmoid 单元决定更新哪些信息,然后利用 ht-1和 xt通过 1 个 tanh 层得到新的候选细胞信息,这些信息会根据计算的结果更新到细胞中。这个过程就是输入门,公式化表示为:

在这里插入图片描述

更新阶段

接下来就要对细胞状态 C 进行更新了。这个环节实际上就是把前 2 个环节得到的结果与对应的信息相乘后再加起来,其公式化表示如下:
在这里插入图片描述
zf 和 zi 分别控制了上个阶段和当前阶段要保留多少内容,ct-1 和 zi 则是上个阶段和当前阶段的内容本身。

输出阶段

更新完细胞的状态,就到了最终的输出环节。ht-1 和 xt 这 2 个信息经过一个叫输出门的 Sigmoid 逻辑单元后,与经过 tanh 后被缩放到-1~1 之间的细胞状态 Ct 信息相乘,就得到了当前时刻的隐藏状态 ht。得到 ht 之后,就能得到当前时刻的输出 y 了。ht 的计算过程如下:

在这里插入图片描述
LSTM依然有明显缺点:

  • 并行化困难:LSTM 的本质是一个递归的训练过程,随着实际问题的愈发复杂,这个缺点就会越来越致命。
  • 梯度消失。LSTM 虽然在一定程度上缓解了 RNN 的问题,但是对于长序列的情况,仍有可能会出现梯度消失。
  • LSTM 在计算的时候需要的资源较多。

所以在NLP领域,LSTM逐渐被现在大热的Transformer取代。后面我们也会对Transformer展开介绍。

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

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

相关文章

spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 spring boot 2.4.x 版本之前通过 ConfigFileApplicationListener 加载配置 https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/mai…

Redis Centos7 安装到启动

文章目录 安装Redis启动redis查看redis状况连接redis服务端 安装Redis 1.下载scl源 yum install centos-release-scl-rh2.下载redis yum install rh-redis5-redis 3. 创建软连接 1.cd /usr/bin 2. In -s /opt/rh/rh-redis5/root/usr/bin/redis-server ./redis-server 3. …

【RT-DETR进阶实战】利用RT-DETR进行过线统计(可用于人 、车过线统计)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 Hello,各位读者,最近会给大家发一些进阶实战的讲解,如何利用RT-DETR现有的一些功能进行一些实战, 让我们不仅会改进RT-DETR,也能够利用RT-DETR去做一些简单的小工作,后面我也会将这些功能利用PyQt或者是p…

机器学习系列——(十九)层次聚类

引言 在机器学习和数据挖掘领域,聚类算法是一种重要的无监督学习方法,它试图将数据集中的样本分组,使得同一组内的样本相似度高,不同组间的样本相似度低。层次聚类(Hierarchical Clustering)是聚类算法中的…

幻兽帕鲁服务器创建私服教程(新版教程更简单)

幻兽帕鲁官方服务器不稳定?自己搭建幻兽帕鲁服务器,低延迟、稳定不卡,目前阿里云和腾讯云均推出幻兽帕鲁专用服务器,腾讯云直接提供幻兽帕鲁镜像系统,阿里云通过计算巢服务,均可以一键部署,鼠标…

项目02《游戏-07-开发》Unity3D

基于 项目02《游戏-06-开发》Unity3D , 接下来做UI框架的逻辑系统,管理器和UI背包, 首先闯将UI框架的两个重要脚本 BasePanel.cs 和 UIManager.cs , 双击BasePanel.cs脚本修改代码: using UnityEngine; pu…

【java苍穹外卖项目实战一】苍穹外卖项目介绍

文章目录 1、项目介绍1、项目概述2、 产品原型3、技术选型 1、项目介绍 在开发苍穹外卖这个项目之前,我们需要全方位的来介绍一下当前我们学习的这个项目。接下来,我们将从项目简介、产品原型、技术选型三个方面来介绍苍穹外卖这个项目。 1、项目概述 …

绝缘栅极晶体管IGBT

IGBT(绝缘栅极晶体管): 常用于百V百A级使用,外观上看相比于MOS最大的区别是比较大,mos主要用于中小功率器件中。 本质是一个电子开关,相比于MOS和三极管来说其最大的特点是耐压很高,可达6000V以上&#xf…

【LeetCode每日一题】525连续数组 303区域和检索(前缀和的基本概念和3个简单案例)

前缀和 // 构造prefix let prefix [0] arr.forEach(num > {prefix.push(prefix.at(-1) num); })如果想要计算某个区间 i 到 j 这个子数组的和时,可以根据 prefix[j1] - prefix[i] 获得。 例题1:303.区域和检索 - 数组不可变 给定一个整数数组 num…

【开源】SpringBoot框架开发考研专业课程管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 考研高校模块2.3 高校教师管理模块2.4 考研专业模块2.5 考研政策模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 考研高校表3.2.2 高校教师表3.2.3 考研专业表3.2.4 考研政策表 四、系统展示五、核…

npm---设置淘宝镜像时报“certificate has expired“的错误

今天使用vue create my-app 创建项目时,竟然报错: Error: Command failed: npm info vue-cli-version-marker --json --registryhttps://registry.npm.taobao.org npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request t…

c语言中的模拟多态性

在C语言中模拟多态性 多态性是面向对象编程中的一个核心概念,它允许我们通过一个共同的接口来操作不同的数据类型。虽然C语言是一种过程式语言,本身不直接支持面向对象的特性,如继承、封装和多态,但我们可以通过一些技巧来模拟这些…

算法之双指针系列1

目录 一:双指针的介绍 1:快慢指针 2:对撞指针 二:对撞指针例题讲述 一:双指针的介绍 在做题中常用两种指针,分别为对撞指针与快慢指针。 1:快慢指针 简称为龟兔赛跑算法,它的基…

机器学习11-前馈神经网络识别手写数字1.0

在这个示例中,使用的神经网络是一个简单的全连接前馈神经网络,也称为多层感知器(Multilayer Perceptron,MLP)。这个神经网络由几个关键组件构成: 1. 输入层 输入层接收输入数据,这里是一个 28x…

跳过mysql5.7密码并重置密码 shell脚本

脚本 目前只是验证了5.7 版本是可以的,8.多的还需要验证 以下是一个简单的Shell脚本,用于跳过MySQL密码设置并重置密码: #!/bin/bash yum install psmisc -y# 停止MySQL服务 sudo service mysqld stop# 跳过密码验证 sudo mysqld --skip-g…

【Linux】进程学习(二):进程状态

目录 1.进程状态1.1 阻塞1.2 挂起 2. 进程状态2.1 运行状态-R进一步理解运行状态 2.2 睡眠状态-S2.3 休眠状态-D2.4 暂停状态-T2.5 僵尸状态-Z僵尸进程的危害 2.6 死亡状态-X2.7 孤儿进程 1.进程状态 1.1 阻塞 阻塞:进程因为等待某种条件就绪,而导致的…

Elasticsearch: 非结构化的数据搜索

很多大数据组件在快速原型时期都是Java实现,后来因为GC不可控、内存或者向量化等等各种各样的问题换到了C,比如zookeeper->nuraft(https://www.yuque.com/treblez/qksu6c/hu1fuu71hgwanq8o?singleDoc# 《olap/clickhouse keeper 一致性协调服务》)&a…

掌握Vue,开启你的前端开发之路!

介绍:Vue.js是一个构建数据驱动的Web应用的渐进式框架,它以简洁和轻量级著称。 首先,Vue.js的核心在于其视图层,它允许开发者通过简单的模板语法将数据渲染进DOM(文档对象模型)。以下是Vue.js的几个重要特点…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之StepperItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、StepperItem组件 用作Stepper组件的页面子组件。 子组件 无。 接口 St…

Project2007下载安装教程,保姆级教程,附安装包和工具

前言 Project是一款项目管理软件,不仅可以快速、准确地创建项目计划,而且可以帮助项目经理实现项目进度、成本的控制、分析和预测,使项目工期大大缩短,资源得到有效利用,提高经济效益。软件设计目的在于协助专案经理发…