当前位置: 首页 > article >正文

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

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.kler.cn/a/273481.html

相关文章:

  • Echarts环形图引线设置
  • GO语言基础(三)
  • copyq禁止访问网络(ubuntu cgroup)
  • 面试题:JVM(二)
  • Docker BUG排查
  • GBase与梧桐数据库数据加载与导出的差异
  • DOcker搭建Rancher
  • 爬虫加密算法
  • 聚类分析 | Matlab实现基于NNMF+DBO+K-Medoids的数据聚类可视化
  • unity 加载BMP格式图片数据流
  • GPT实战系列-LangChain的Prompt提示模版构建
  • 瓷管电阻的工艺结构原理及选型参数总结
  • web渗透测试漏洞复现:Elasticsearch未授权漏洞复现
  • uniapp运行项目到微信小程序报错——未找到[“sitemapLocation“]
  • Chrome历史版本下载地址:Google Chrome Older Versions Download (Windows, Linux Mac)
  • 蓝桥杯物联网竞赛_STM32L071_12_按键中断与串口中断
  • 音视频开发之旅——音频基础概念、交叉编译原理和实践(LAME的交叉编译)(iOS)
  • VTK----VTK的事件机制
  • 信息学奥赛一本通之MAC端VSCode C++环境配置
  • 常见视频名词及视频格式
  • webpack5零基础入门-11处理html资源
  • uniapp微信小程序随机生成canvas-id报错?
  • 每天学习几道面试题|Kafka架构设计类
  • 记录一下小程序自定义导航栏消息未读已读小红点,以及分组件的消息数量数据实时读取
  • c语言,联合体
  • Jenkins-pipeline流水线构建完钉钉通知