循環神經網絡(recurrent neural network)RNN是一類用於處理序列**數據**的神經網絡,即某一時刻的輸出結果會受到前面時刻的輸入的影響。

1.RNN拓扑结构

1.1基本的RNN结构

Simple RNN


image.png
RNN循环神经网络 - 图2
【注意點】

  • t-1時刻的 hidden layer 和 t 時刻的 hidden layer之間是全連接(fully connected)
  • 每一時刻的拓撲結構都是相同的,初始化時,U/V/W都是同一份矩陣。
  • 正向傳播時,每一時刻都求得 Loss損失;反向傳播時,根據最後一個時刻的Loss推導調整 U/V/W,同時,之前每一時刻的 U/V/W也被調整。

image.png image.png

  • 因为有上一时刻内存中的值作为输入,在RNN中即使是一样的原始输入,可能有不一样的输出。
  • 内存中的值在每一个时刻都会被“清洗掉”(重新赋值)。

    理论上,在时刻t,simpleRNN应该能够记住之前0~(t-1)个时间步见过的信息,但实际上因为梯度消失问题,随着层数的增加,网络变得无法训练,实际上不可能学到这种长期依赖。LSTM和GRU就是为了解决这个问题而设计的,可以携带信息跨越多个时间步。

  • RNN中同一个网络在不同的时刻被反复使用。

  • RNN的网络结构可以任意设计,比如:多层、双向、Elman、Jordan等。

    Deep RNN

    RNN循环神经网络 - 图5
    image.png

    Elman、Jordan

    image.png

    双向RNN

    双向(Bidirectional)RNN在每个输出的时刻,看到数据的范围更广,表现可以更好。RNN循环神经网络 - 图8

image.png

1.2 LSTM

梯度消失/爆炸问题

image.png
如图中的SimpleRNN网络中,对于前3个时刻(暂不考虑激活函数),中间状态S和最终输出O:
RNN循环神经网络 - 图11
RNN循环神经网络 - 图12时刻,假设损失函数为:RNN循环神经网络 - 图13,总体的损失为每一时刻的累加值RNN循环神经网络 - 图14
RNN循环神经网络 - 图15时刻,对参数求偏导:
RNN循环神经网络 - 图16
由上述求导过程可以看出,对RNN循环神经网络 - 图17求导没有长期依赖,但对RNN循环神经网络 - 图18求导会随着时间序列产生长期依赖。
对于任意时刻t,有一般化结论:
RNN循环神经网络 - 图19,代入激活函数,则RNN循环神经网络 - 图20
RNN循环神经网络 - 图21
由于RNN循环神经网络 - 图22,当RNN循环神经网络 - 图23很小时,连乘趋近于0,当RNN循环神经网络 - 图24很大时,连乘趋近于无穷,于是造成了梯度消失、梯度爆炸。
造成梯度消失/爆炸的关键是RNN循环神经网络 - 图25,如果令RNN循环神经网络 - 图26,就能解决这个问题。LSTM就是通过遗忘门,控制了中间状态的输出,解决了梯度消失/爆炸问题。

LSTM: Long Short-Term Memory Unit 长短时记忆单元,表示长时间(long)的短期记忆(shor-term),在基本的RNN网络结构中,内存中的值在每个时间点会被重新赋值,每个时间步(timestep)是循环在t时刻的输出,包含时间步0~t的信息,即关于过去的全部信息。在LSTM中,因为有forget gate,短期记忆(short-term)可以得到长时间(long)保存。
LSTM单元的作用:允许过去的信息稍后重新进入,从而解决梯度消失/爆炸问题。

LSTM神经元

image.png

线性变换

input(x1,_x_2)会乘以不同的weight当做LSTM不同的输入,即乘以不同的weight去操控input gate、forget gate,output gate。

image.png
【问题】普通神经元到LSTM神经元,输入从1个变成4个,具体如何操作呢?
假设有4个LSTM神经元,输入向量为X,将X乘以一个矩阵完成一次线性变换(transform),将X进行4次不同的线性变换之后,得到4个向量Z,每个向量Z的维数都和LSTM神经元的数量一致,每个向量Z分别作为LSTM的4个输入。c表示携带(carry),即携带着跨越时间步的信息。
image.png

LSTM最终形态(单层)

  • 没有peephole

image.png
遗忘门、输入门和输出门,使用sigmoid函数是为了控制门的开启和关闭。
相邻时刻的状态C变化时较慢较小的,相邻时刻的输出h的变化是较快较大的。
RNN循环神经网络 - 图31 RNN循环神经网络 - 图32

  • 有peephole

image.png

LSTM最终形态(多层)

image.png

1.3 GRU

LSTM实验

GRU: Gated Recurrent Unit:相比LSTM的3个门,GRU变成了2个门,但performance跟LSTM差不多(少了1/3的参数,也是比较不容易overfitting)。
image.png

GRU结构

image.png
RNN循环神经网络 - 图37
RNN循环神经网络 - 图38

GRU使用更新门(Update gate),通过缩放到(0,1)来决定是否将上一时刻的 RNN循环神经网络 - 图39传递给当前时刻的RNN循环神经网络 - 图40;使用reset gate来控制我们需要RNN循环神经网络 - 图41的哪一部分参与运算。

2.RNN的应用

2.1Slot Filling

image.png
image.png

词向量的表示

  • 1 of N encoding

image.png

  • word hashing
    image.png

来源: 1.https://medium.com/@saurabh.rathor092/simple-rnn-vs-gru-vs-lstm-difference-lies-in-more-flexible-control-5f33e07b1e57 2.https://jhui.github.io/2017/03/15/RNN-LSTM-GRU/ 3.https://zhuanlan.zhihu.com/p/30844905 4.李宏毅《机器学习》2017 5.RNN梯度消失和爆炸的原因:https://zhuanlan.zhihu.com/p/28687529