循环神经网络学习

循环神经网络

一、绪论

1. 循环神经网络的应用

  • 语音问答(speech question answering)
  • 机器翻译(machine translation)
  • 股票预测
  • 作词机、作诗
  • 模仿写论文、写代码(格式)
  • 图像理解(Image caption)
  • 视觉问答(visual question answering)

2. 循环神经网络VS卷积神经网络

循环神经网络所做的任务

  • 特点:上下文关系(时序)

  • 目标:考虑更多的上下文

RNN和CNN的区别:

  • 传统神经网络,卷积神经网络,输入输出之间是相互独立的

  • RNN可以更好的处理具有时序关系的任务

  • RNN通过其循环结构引入“记忆”的概念

  • RNN输出不仅依赖于输入,还依赖“记忆”;将同一个结构循环利用

二、基本组成结构

1. 基本结构

隐层的数据被存入到一个“记忆”单元中;

存在“记忆”中的数据会被作为另外一个输入与原始输入一起输入到神经网络中。

  • f是不断重复利用的

  • 模型所需要学习的参数是固定的

  • 无论输入的长度是多少,只需要一个函数f

  • 隐层状态h可以被看作是“记忆”,它包含了之前时间点上的相关信息

  • 输出y不仅由当前的输入所决定,还会考虑到之前的“记忆”

  • RNN在不同时刻共享同一组参数(U,W,V),加大的减少了需要训练和预估的参数量

2. 深度RNN

3. 双向RNN

结构:

优势:

当需要判断一个词的语义时,需要从整个句子的角度进行判断,因此需要正向RNN接收所有输入后,再反向回顾整个句子的语义,从而判断该词语在本次输入(语句)中的语义。

4. BPTT算法

  1. BP算法

    可能会出现梯度消失的问题。

  2. BPTT算法

通过链式求导后

三、循环神经网络的变种

1. 传统RNN

从上图中BPTT算法的链式求导过程中可得:

下图红色为tan图像,绿色为tan的导数图像:

可以得到:

所以,传统的RNN很容易出现梯度消失/梯度爆炸现象。因此,针对以上现象,采取权重衰减/梯度截断进行改进。

梯度消失会导致长时依赖问题,从而使得RNN随着时间间隔的不断增大,丧失学习到连接远距离的信息的能力。

2. LSTM(Long Short-term Memory)长短期记忆模型

LSTM拥有三个门(遗忘门,输入门,输出门),来保护和控制细胞状态

  • 遗忘门(forget gate):

    • Sigmoid函数的取值范围在0~1之间,因此利用遗忘门来描述允许有多少的量通过

    • 通过遗忘门来决定记忆的有无

  • **输入门(input gate):

    • 先通过Sigmoid决定什么信息需要更新,然后通过tanh层输出备选的需要更新的内容,然后加入新的状态中。
    • 0代表“不更新”,1代表“完全更新”
    • 通过输入门记住真正需要的内容
  • 输出门(output gate)

    • 通过Sigmoid来确定细胞状态的哪个部分将输出出去。然后,将细胞状态通过tanh进行处理并将它和Sigmoid门的输出相乘,最终仅仅会输出我们确定输出的那部分
    • 0代表”不输出“,1代表”完全输出“
    • 通过输出门,判断在做下面决策时有哪些真正需要的记忆,进行输出

3. LSTM VS RNN

  • RNN和LSTM对记忆的处理方式不同

  • RNN的”记忆“在每个时间点被新的输入覆盖,LSTM的”记忆“是与新的输入相加(线性操作)

  • LSTM:如果前边的输入对Ct产生了影响,那这个影响会一直存在,除非遗忘门的权重为0

  • LSTM中的learning rate可以被尽量的设置小

4. GRU

下图为LSTM和GRU:

差异:

  • GRU只有两个门,分别为重置门和更新门
  • 混合了细胞状态和隐藏状态

相似:

  • 从t-1到t时刻的记忆的更新都引入加法
  • 可以防止梯度消失

下图为LSTM和GRU的公式对比:

问题:GRU中的公式取消了偏置项的计算,有什么好处?

四、扩展

1. Clockwise RNN(CW-RNN)

相比较于RNN:

  • CW-RNN把隐层分成很多组,每组有不同的循环周期;有的周期是1(=普通RNN),有的周期更长(例如:从前两个时间步连接到当前时间步;不同周期的cell之间也有一些连接)
  • 如此,距离较远的某个依赖关系就可以通过周期较长的cell少数几次循环访问到,从而减少网络层数,容易学习

2. 基于attention的RNN

注意力机制

示例如下:

当翻译某个词的时候,关注点不一样

  1. 把feature map和权重相乘,进行加和(每个channel进行一遍)
  2. 通过h1生成一个词,计算概率(第一次)
  3. 再经过h1在生成一个新的权重,然后再和feature map相乘,从而改变权重,达到改变注意力的目的。
posted @ 2020-08-21 15:24  陳半仙  阅读(282)  评论(0编辑  收藏  举报