深度学习面经-part3(RNN、LSTM)

news2024/9/22 11:29:28

3.RNN

核心思想:像人一样拥有记忆能力。用以往的记忆和当前的输入,生成输出。

RNN 和 传统神经网络 最大的区别:在于每次都会将前一次的输出结果,带到下一次的隐藏层中,一起训练。

RNN应用场景:

1.文本生成 2.语音识别 3.机器翻译 4.生成图像描述 5.视频标记

缺点:

        RNN 有短期记忆问题,无法处理很长的输入序列

        训练 RNN 需要投入极大的成本

RNN 是一种死板的逻辑,越晚的输入影响越大,越早的输入影响越小,且无法改变这个逻辑。

3.1 RNNs训练和传统ANN训练异同点?

相同点:都使用BP误差反向传播算法。

不同点:

        RNNs网络参数W,U,V是共享的,而传统神经网络各层参数间没有直接联系。

        对于RNNs,在使用梯度下降算法中,每一步的输出不仅依赖当前步的网络,还依赖于之前若干步的网络状态。

3.2 为什么RNN 训练的时候Loss波动很大?

​         由于RNN特有的memory会影响后期其他的RNN的特点,梯度时大时小,lr没法个性化的调整,导致RNN在train的过程中,Loss会震荡起伏,为了解决RNN的这个问题,在训练的时候,可以设置临界值,当梯度大于某个临界值,直接截断,用这个临界值作为梯度的大小,防止大幅震荡。

3.3 RNN中为什么会出现梯度消失?

        梯度消失现象:累乘会导致激活函数导数的累乘,如果取tanh或sigmoid函数作为激活函数的话,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。

        实际使用中,会优先选择tanh函数,原因是tanh函数相对于sigmoid函数来说梯度较大,收敛速度更快且引起梯度消失更慢。

3.4 如何解决RNN中的梯度消失问题?

1.选取更好的激活函数,如Relu激活函数。ReLU函数的左侧导数为0,右侧导数恒为1,这就避免了“梯度消失“的发生。但恒为1的导数容易导致“梯度爆炸“,但设定合适的阈值可以解决这个问题。

2.加入BN层,其优点:加速收敛.控制过拟合,可以少用或不用Dropout和正则。降低网络对初始化权重不敏感,且能允许使用较大的学习率等。

3.改变传播结构,LSTM结构可以有效解决这个问题。

3.5 CNN VS RNN

不同点

1.CNN空间扩展,神经元与特征卷积;RNN时间扩展,神经元与多个时间输出计算

2.RNN可以用于描述时间上连续状态的输出,有记忆功能,CNN用于静态输出。

3.6 Keras搭建RNN

4. LSTM

        长短期记忆网络(Long Short-Term Memory)是一种时间循环神经网络,是为了解决一般的RNN存在的长期依赖问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。

        三个门(遗忘门,输入门,输出门),两个状态(Ct,ht)

遗忘门

​ 作用对象:细胞状态 。

两个输入:当前时刻的input、上一时刻同一block内所有Cell作为输入

​ 作用:将细胞状态中的信息选择性的遗忘。上一时刻的单元状态Ht-1有多少能保留到当前时刻

Ft和Ct-1做点积操作,Ft确保Ct-1有哪些东西需要被遗忘调

输入层门

作用对象:细胞状态

​ 作用:将新的信息选择性的记录到细胞状态中。决定当前时刻网络的输入Xt有多少能够保留到单元状态上。

两个输入:当前时刻的input、上一时刻同一block内所有Cell作为输入【例子中每层仅有单个Block,单个Cesll】

​ 操作步骤:

​ 步骤一:sigmoid 层称 “输入门层” 决定什么值我们将要更新

​ 步骤二,tanh 层创建一个新的候选值向量加入到状态中

输出层门

​ 作用对象:隐层ht  作用:确定输出什么值。控制单元状态Ct多少输出到LSTM的当前输出值

​ 操作步骤:

​ 步骤一:通过sigmoid 层来确定细胞状态的哪个部分将输出。

​ 步骤二:把细胞状态通过 tanh 进行处理,并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。

4.1 LSTM结构推导,为什么比RNN好?

        推导forget gate,input gate,cell state, hidden information等的变化;因为LSTM有进有出且当前的cell informaton是通过input gate控制之后叠加的,RNN是叠乘,因此LSTM可以防止梯度消失或者爆炸。

4.2 为什么LSTM模型中既存在sigmoid又存在tanh两种激活函数,而不是选择统一一种sigmoid或者tanh?

sigmoid用在了各种gate上,产生0~1之间的值,一般只有sigmoid最直接了;

tanh用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。

4.3 LSTM中为什么经常是两层双向LSTM?

        有些时候预测需要由前面若干输入和后面若干输入共同决定,这样会更加准确。

4.4 RNN扩展改进

4.4.1 Bidirectional RNNs

​          将两层RNNs叠加在一起,当前时刻输出(第t步的输出)不仅仅与之前序列有关,还与之后序列有关。例如:为了预测一个语句中的缺失词语,就需要该词汇的上下文信息。Bidirectional RNNs是一个相对较简单的RNNs,是由两个RNNs上下叠加在一起组成的。输出由前向RNNs和后向RNNs共同决定。

4.4.2 CNN-LSTMs

        该模型中,CNN用于提取对象特征,LSTMs用于预测。CNN由于卷积特性,其能够快速而且准确地捕捉对象特征。LSTMs的优点:能够捕捉数据间的长时依赖性。

4.4.3 Bidirectional LSTMs

        有两层LSTMs。 一层处理过去的训练信息,另一层处理将来的训练信息。

        通过前向LSTMs获得前向隐藏状态,后向LSTMs获得后向隐藏状态,当前隐藏状态是前向隐藏状态与后向隐藏状态的组合。

4.4.4 GRU

(14年提出)是一般的RNNs的变型版本,其主要是从以下两个方面进行改进。

1.以语句为例,序列中不同单词处的数据对当前隐藏层状态的影响不同,越前面的影响越小,即每个之前状态对当前的影响进行了距离加权,距离越远,权值越小。

2.在产生误差error时,其可能是由之前某一个或者几个单词共同造成,所以应当对对应的单词weight进行更新。GRUs的结构如下图所示。GRUs首先根据当前输入单词向量word vector以及前一个隐藏层状态hidden state计算出update gate和reset gate。再根据reset gate、当前word vector以及前一个hidden state计算新的记忆单元内容(new memory content)。当reset gate为1的时候,new memory content忽略之前所有memory content,最终的memory是由之前的hidden state与new memory content一起决定。

4.5 LSTM、RNN、GRU区别?

        与LSTM相比,GRU内部少了一个”门控“,参数比LSTM少,但是却也能够达到与LSTM相当的功能。考虑到硬件的计算能力和时间成本,因而很多时候我们也就会选择更加实用的GRU。

4.6 LSTM是如何实现长短期记忆功能的?

4.7 LSTM的原理、写LSTM的公式、手推LSTM的梯度反向传播

4.7.1 正向传播

4.8 如何缓解梯度消失和梯度爆炸问题

  1. 使用门控循环单元(GRU)或长短期记忆网络(LSTM):这两种结构都是对 RNN 的改进,它们通过引入门控机制来控制信息的流动,从而缓解梯度消失和梯度爆炸的问题。GRU 和 LSTM 中的门控机制可以控制哪些信息应该被保留或遗忘,从而使模型更加稳定。
  2. 使用梯度裁剪:梯度裁剪是一种简单而有效的方法,可以防止梯度爆炸。在训练过程中,可以对梯度进行裁剪,使其不超过某个阈值。这样可以确保梯度不会变得过大,从而避免梯度爆炸。
  3. 使用正则化:正则化可以帮助控制模型的复杂度,从而缓解梯度消失和梯度爆炸的问题。常见的正则化方法包括 L1 和 L2 正则化、Dropout 等。
  4. 使用残差连接:残差连接是一种在深度神经网络中常用的技术,它可以帮助解决梯度消失和梯度爆炸的问题。在 RNN 中,可以在每个时间步的输出上添加一个残差连接,将当前时间步的输出与前一个时间步的输出相加,然后将结果作为当前时间步的输出。这样可以确保信息在模型中传递,从而缓解梯度消失和梯度爆炸的问题。
  5. 使用更好的初始化:在训练 RNN 时,初始化权重非常重要。如果权重初始化不当,可能会导致梯度消失或梯度爆炸。可以使用 Xavier 初始化或 He 初始化等方法来初始化权重,这些方法可以确保权重的分布更加均匀,从而缓解梯度消失和梯度爆炸的问题。

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

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

相关文章

【DataWhale学习笔记-蝴蝶书共读】大语言模型背后

从图灵测试到ChatGPT 1950年,艾伦•图灵(Alan Turing)发表论文《计算机器与智能》( Computing Machinery and Intelligence),提出并尝试回答“机器能否思考”这一关键问题。在论文中,图灵提出了“模仿游戏”&#xff…

RabbitMQ介绍及搭建

架构 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,使用erlang语言编写,依赖Erlang环境运行。 Broker:运行消息队列服务进程的节点,包含Exchange、Queue; Producer:消…

自学Python第二十九天-feapder框架创建爬虫

自学Python第二十九天-feapder框架创建爬虫 安装feapder 的设计架构feapder 框架的简单使用简单创建爬虫简单爬取数据简单的数据保存 中间件校验浏览器渲染使用浏览器渲染获取接口数据 feapder是一款上手简单,功能强大的 Python爬虫框架,内置 AirSpide…

Games101笔记-模型、视图、投影

在旋转点,旋转矩阵的逆等于矩阵的转置 视图变换和投影变换 三维变换 左边3*3是线性变换,右边一列是仿射变换(平移) 先线性再平移 缩放、旋转、平移 x叉乘y得到z,y叉乘z得到x, xyz给任何两个可以得到另一个 (循环对称) z叉乘x得…

EDI在汽车主机厂配送流程中的应用

汽车主机厂的汽车配送流程始于汽车 “生产结束 ” ,止于 “交付给经销商 ” 。在这个流程中,企业作为主机厂的下游供应商,与主机厂的物流服务供应商之间的信息交换将会变得十分重要。 配送流程:运输订单以及报告 汽车主机厂提供预…

6-高维空间:机器如何面对越来越复杂的问题

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)二维输入数据 (二)数据特征维度 …

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

小白向-使用git实现不同服务器改动的同步

背景 深度学习项目,已有可运行的backbone,已将此项目在github建库。 需要使用不同分支进行不同改动的测试;有两台服务器可供程序运行; 项目需求 以github云端仓库为媒介,实现不同服务器改动无痛关联。维护项目代码…

MS14_064 漏洞利用与安全加固

文章目录 环境说明1 MS14_064 简介2 MS14_064 复现过程3 MS14_064 安全加固 环境说明 渗透机操作系统:kali-linux-2024.1-installer-amd64漏洞复现操作系统: sc_winxp_pro_with_sp2 1 MS14_064 简介 要利用此漏洞则需要进行用户交互。通过发送电子邮件信息给本地登…

【云开发笔记No.4】DevOps的起源,定义和基本原则

DevOps,作为一组过程、方法与系统的统称,它的出现并不是偶然的,而是源于软件开发与运维领域长期以来所面临的挑战和痛点。其诞生背景可以追溯到敏捷开发模式的兴起以及持续开发所带来的运维问题。随着软件行业的飞速发展,传统的软…

Godot 学习笔记(3):IOC容器注入,以NlogServices为例

文章目录 前言环境注意事项Ioc注入文件夹设置Service服务搭建Nlog.configNlogService配置ButtonTest1Service控制反转Program主入口ButtonTest1从Ioc中获取服务 输出生命周期问题 总结 前言 Godot.Net中使用IOC之后,Godot的代码将会被极大的解耦。这里不不展开说明…

【大模型】直接在VS Code(Visual Studio Code)上安装CodeGeeX插件的过程

文章目录 一、什么是CodeGeeX(一)我理解的CodeGeeX(二)优缺点 二、CodeGeex下载、安装、注册(一)安装VS Code(Visual Studio Code)(二)下载安装CodeGeeX(三)注…

SpringBoot中使用验证码easy-captcha

easy-captcha使用的大概逻辑: 当一个请求发送到后端服务器请求验证,服务器使用easy-captcha生成一个验证码图片,并通过session将验证信息保存在服务器,当用户登录校验时候,会从ession中取出对比是否一致 但是前后端分离之后 由于跨域问题 以上就无法实现了 下面这种情况没…

Trait与生命周期

原文链接:(*∇`*) 咦,又好了~ Rust – xiaocr_bloghttp://www.xiaocr.fun/index.php/2024/03/18/trait%E4%B8%8E%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F/ 目录 Trait 定义trait 默认实现 trait作为参数 Trait Bound语法 通过指定多个 trait bound …

B003-springcloud alibaba 服务治理 nacos discovery ribbon feign

目录 服务治理服务治理介绍什么是服务治理相关方案 nacos实战入门搭建nacos环境安装nacos启动nacos访问nacos 将商品微服务注册进nacos将订单微服务注册进nacos订单服务通过nacos调用商品服务 实现服务调用的负载均衡什么是负载均衡代码实现负载均衡增加一个服务提供者自定义实…

【CKA模拟题】掌握Pod日志输出的秘密

题干 For this question, please set this context (In exam, diff cluster name) 对于这个问题,请设置这个上下文(在考试中,diff cluster name) kubectl config use-context kubernetes-adminkubernetes product pod is running. when you access log…

flask之ssti [WesternCTF2018]shrine1

打开题目 整理一下,代码: import flask import osapp flask.Flask(__name__) app.config[FLAG] os.environ.pop(FLAG) app.route(/)def index():return open(__file__).read()app.route(/shrine/)def shrine(shrine):def safe_jinja(s):s s.replace((, ).replac…

无人机三维建模过程中注意事项

无人机三维建模是指利用无人机技术进行三维建模,该方法通过无人机搭载的多种传感器,如摄像头、激光扫描仪等,获取建筑物的多角度影像数据,然后利用计算机视觉技术和三维重建算法,将这些影像数据转化为高精度的三维模型…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-下

文章目录 一、数据聚合1.1 聚合种类1.2 DSL实现聚合1.3 RestAPI实现聚合1.4 演示:多条件聚合 二、自动补全2.1 拼音分词器2.2 自定义分词器2.3 DSL自动补全查询2.5 实现酒店搜索框自动补全2.5.1 修改酒店索引库数据结构2.5.2 RestAPI实现自动补全查询2.5.3 实战 三、…

Docker部署Django项目——基础

1.服务器配置 1.1centos7 系统的安装 centos-7-isos-x86_64安装包下载) VMware安装自定义配置 选择对应的系统镜像 一般选择内核4核、内存8g、硬盘80g 相关配置 1.2.网络配置 1.2.1查看win电脑虚拟机VMnet8的ip 使用ipconfig查看虚拟机的ip 1.2.2配置虚拟机VMnet8的ip…