首页 > 其他分享 >深度学习面经-part3(RNN、LSTM)

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

时间:2024-03-18 23:59:03浏览次数:15  
标签:输出 RNN 状态 梯度 面经 part3 LSTM RNNs

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 初始化等方法来初始化权重,这些方法可以确保权重的分布更加均匀,从而缓解梯度消失和梯度爆炸的问题。

标签:输出,RNN,状态,梯度,面经,part3,LSTM,RNNs
From: https://blog.csdn.net/qq_40102160/article/details/136825333

相关文章

  • 2024.2.27校招 实习 内推 面经
    绿*泡*泡VX:neituijunsir  交流*裙,内推/实习/校招汇总表格1、校招|蔚来2024届春季校园招聘启动(内推)校招|蔚来2024届春季校园招聘启动(内推)2、校招|经纬恒润2024春季校园招聘正式启动(内推)校招|经纬恒润2024春季校园招聘正式启动(内推)3、校招|众星智能2024......
  • Python进行金融特征的估计和分类,及如何构建深度RNN
    8.5金融特征RNN的应用不仅限于原始价格或收益率数据,还可以包括附加特征以改进它的预测性能。以下Python代码向数据集中添加了典型的金融特征。In[77]:data=generate_data()In[78]:data['r']=np.log(data/data.shift(1))In[79]:window=20data['mom']=......
  • 面经
    一、基础内容1、测试基础测试流程:需求评审→工时评估&排期→技术评审→用例编写&评审→提测演示→用例执行→验收测试→项目上线→线上监控2、线上bug分类产品类:产品优化建议、产品设计缺陷、需求变更系统类:代码错误(常见:代码逻辑错误、边界值错误)、数据错误......
  • Self-Attention相比较RNN和LSTM的优缺点
    2024.3.13Self-AttentionSelf-Attention相比较RNN和LSTM的优缺点RNN基本单元结构无法做长序列,当一段话达到50个字,效果就很差了复杂度为n的平方$X_0$往后面越传播,信息越少(如你爷爷的爷爷的爷爷的名字)LSTM基本结构LSTM通过各种门,遗忘门,选择性的可以记忆之前的信息(200词)Se......
  • 图像算法实习生--面经1
    系列文章目录文章目录系列文章目录前言一、为什么torch里面要用optimizer.zero_grad()进行梯度置0二、Unet神经网络为什么会在医学图像分割表现好?三、transformer相关问题四、介绍一下胶囊网络的动态路由五、yolo系列出到v9了,介绍一下你最熟悉的yolo算法六、一阶段目标......
  • RNN又行了!DeepMind新发布的Griffin可以与同级别的LLM性能相当
    Hawk和Griffin是DeepMind推出的新型循环神经网络(RNNs),2月刚刚发布在arxiv上。Hawk通过使用门控线性递归(gatedlinearrecurrences)超越了Mamba的性能,而Griffin则是一种混合型模型,结合了门控线性递归和局部注意力(localattention),与Llama-2的性能相当,但使用的训练数据明显较少。Griffi......
  • 数据库面经
    目录1.什么是数据库事务?2.数据库事务的特性?1.什么是数据库事务?数据库事务(transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。2.数据库事......
  • Python用RNN循环神经网络:LSTM长期记忆、GRU门循环单元、回归和ARIMA对COVID
    原文链接:http://tecdat.cn/?p=27042原文出处:拓端数据部落公众号 该数据根据世界各国提供的新病例数据提供。  获取时间序列数据  df=pd.read_csv("C://global.csv")探索数据此表中的数据以累积的形式呈现,为了找出每天的新病例,我们需要减去这些值 ......
  • RNN循环神经网络&LSTM长短期记忆网络&GRU
    个人学习使用,内容来源于网络,侵权删1.基本原理传统网络的结构:RNN的结构:使用场景:语音识别,要按顺序处理每一帧的声音信息,有些结果需要根据上下文进行识别;自然语言处理,要依次读取各个单词,识别某段文字的语义这些场景都有一个特点,就是都与时间序列有关,且输入的序列数......
  • 双向RNN计算实现
    个人学习使用,内容来源于网络,侵权删双向RNN如下,做两遍计算:第一遍先正向计算隐状态h,保存成一个序列,顺序是t时刻从1到T。第二遍,将输入反转,计算隐状态h,保存为一个序列,这样顺序就是t时刻从T到1.最后在计算output,这样在计算output时,所有时刻的隐状态都是已经计算出来了。参考来源......