6.1 简介

RNN与前馈神经网络有什么不同?这种不同有什么好处?

  • 前馈神经网络:
      1. 只能处理固定长度的输入,不能处理变长输入(即每个样本长度可能不一致)。
      1. 静态网络,没有记忆力
  • RNN:
      1. 通过在不同时间步共享网络,实现了可以变长输入。
      1. 通过隐藏层的状态来保持记忆力,即ch06 循环神经网络 - 图1

        6.2 简单循环网络

        写出简单循环网络的公式?

        ch06 循环神经网络 - 图2

        画出简单循环网络的结构图?

        RNN可以看成在时间维度上权值共享的神经网络,从下图可以看出,实际上只有一个网络,只是在不同的时间步,展示成了下图的样子。
        image.png

        RNN常见的3种模式?

  1. 序列->类别
  2. 同步的sequence-to-sequence
  3. 异步的sequence-to-sequence:自回归,也被称为Encoder-Decoder模型。

image.png

6.4 参数学习

介绍一下随时间反向传播算法BPTT?

以下内容参考

rnn-bptt.svg
简单说一下图,图中表示了一个有3个时间步的RNN网络示意图。其中x1,x2,x3代表输入(每个为单样本,d维度,即d个特征),W都是参数矩阵,参数在RNN中都是共享的,假设隐藏层的激活函数是f(x)=x,那么前向传播为:t这里好像很混乱,这里明显代表是第t步,ot应该是一个实数,怎么下面又是表示向量?
ch06 循环神经网络 - 图6
因为每个时间步都有一个输出,所以总的损失为每个时间步损失的和:
ch06 循环神经网络 - 图7
在反向传播时,对otot有q维,这里q=3,即o1,o2,o3)有:
ch06 循环神经网络 - 图8 这一步有啥意义?
对输出层来说,Wqh的梯度为:
ch06 循环神经网络 - 图9
而ht的情况则比较复杂,因为除了h3是只跟L有关,其他如h2就必须依赖h3,h1必须依赖h2和h3,所以分为t=T和t当t=T时:
ch06 循环神经网络 - 图10
当tch06 循环神经网络 - 图11
tch06 循环神经网络 - 图12
最终,我们得到了参数的梯度,注意我们这里激活函数f(x)=x,因此省略了一步,实际上最终结果还应该包含一个激活函数的导数(注意这里ht-1可以理解为是在当前层已经是实数了,不用继续求导),从这里看的话,好像RNN用Sigmoid激活函数也没关系?毕竟上下时间步用的是用一套参数?:
ch06 循环神经网络 - 图13
附加内容,上面的通项公式,从t=T倒推比较容易看出来:
40d4940a1f1636cb2065ed32a4046bfa17e7a0d5_2_750x1000.jpeg

6.5 长程依赖问题

什么是长程依赖问题?

理论上来说,RNN相比于传统神经网络具有记忆力,因此可以建模长距离依赖关系,但实际上由于梯度消失/爆炸,只能学习到短期依赖,这种无法学习到长距离依赖的情况,称为长程依赖问题。

什么是梯度消失/爆炸?为什么会出现?怎么解决?

为什么出现梯度消失或爆炸:
梯度消失/爆炸是指在反向传播时,隐藏层的梯度逐渐趋于0或无穷大,从而导致梯度消失或爆炸。
原因:
上面RNN中隐藏层梯度的计算公式如下:
ch06 循环神经网络 - 图15
在这个公式中,WThh的幂度有可能是非常大的,当T很大,或者i很小的时候,矩阵WThh小于1的特征值将会消失,大于1的特征值将会发散,这在数值上是不稳定的,表现形式为梯度消失或梯度爆炸(注意这里是指更远距离的梯度会出现梯度消失,即幂数较大的,其实近距离的是没问题的,因为这是个求和,近距离的梯度还是存在的,只是远距离的较难传播过来)。直观的理解,假如WThh是一个实数,例如0.5,那么0.5的幂如果非常大的话,就会趋近于0,出现梯度消失;如果WThh=2,当幂非常大的时候,就会趋于无穷大,出现梯度爆炸。注意,梯度消失更精确的原因是ch06 循环神经网络 - 图16消失了,从而影响到了ch06 循环神经网络 - 图17,即对隐藏层的梯度消失了,导致对参数矩阵的梯度消失了。
缓解
梯度爆炸:梯度爆炸一般比较容易解决,通过权重衰减和梯度截断可以有效避免,权重衰减是通过L1或L2正则来限制参数的取值范围,梯度截断则是直接对梯度结果进行截断,超过一定阈值时,取固定值,也避免了梯度持续的增大。
梯度消失:梯度消失是RNN的主要问题。

  1. 梯度裁剪
  2. 使用合理的参数初始化方案,如He初始化。合理的初始化方案,可以确保Whh更加合理,从而缓解梯度消失。但这个方案比较依赖人工经验,且比较难到达良好效果。
  3. 使用 ReLU、LReLU、ELU、maxout 等激活函数,sigmoid函数的梯度随着x的增大或减小和消失,而ReLU不会。但这个并没有解决Whh的问题
  4. 使用BN,使得输入中心化,一定程度上缓解Sigmoid函数的问题。
  5. 残差结构

    RNN中的梯度消失和前馈神经网络中的梯度消失有什么不同?

    前馈神经网络的梯度消失是由于激活函数引起的,而RNN中除了激活函数外,还有隐藏层的长距离依赖引起的。

    6.6 基于门控的RNN

    为什么要有LSTM?介绍一下LSTM,比RNN的改进在哪里?

    LSTM是为了解决普通RNN的梯度消失或爆炸问题,通过引入一个新的内部状态(即记忆细胞)和门控机制,实现了信息的远距离传递。普通RNN中,隐藏太在每个时刻都会被重写,因此称为短期记忆,而通过记忆细胞,LSTM能够把某个时刻的短期记忆保存较长的时间,这也是LSTM中文名称长-短期记忆网络的名字由来。

LSTM有3个门(输入门i,输出门o和遗忘门f)和两个细胞(候选记忆细胞ch06 循环神经网络 - 图18,记忆细胞c)

  • 输入门:logistic函数,控制当前记忆细胞从候选细胞获取多少信息
  • 输出门:logistic函数,控制当前记忆细胞有多少信息需要输出
  • 遗忘门:logistic函数,控制当前记忆细胞需要从上一个记忆细胞获取多少信息

候选细胞是用结合上一个隐层状态和当前的输入信息,经过tanh得来。

  1. 先算候选细胞
  2. 通过3个门,控制当前细胞和输出

image.png

介绍一下GRU,比RNN的改进在哪里?

GRU也是引入门控机制来控制信息的更新,但是没有记忆细胞。
GRU通过更新门z和重置门r来实现LSTM同样的功能。更新门同时控制从上一个隐藏态和候选状态的信息,实现了LSTM中遗忘门和输入门的作用;重置门用来控制候选状态从上一个状态获取的信息量。
image.png
image.png
image.png

GRU为什么选择了Tanh作为激活函数?

主要是Tanh的导数有比较大的值域,能够缓解梯度消失问题。

6.8 扩展到图结构

循环神经网络(Recurrent)与递归神经网络和图神经网络的关系?

递归神经网络是RNN在树状层次的扩展,图神经网络是将信息传递的思想扩展到图上。