RNN序列模型介绍

5.1 序列模型

5.1.1 RNN结构介绍

CNN模型中一定是要求固定长度的输入和输出,而RNN单元的内部结构如下图所示。

RNN序列模型介绍_第1张图片

 

RNN序列是可以有多种结构的,并且每种结构下又可以有多种变体。

One-to-n的结构如下,圆圈或是方块表示的是向量,一个箭头就表示对该向量做一次变换

RNN序列模型介绍_第2张图片

RNN序列模型介绍_第3张图片

 

one-to-n 的结构可以用来从图像生成文字(image caption),此时输入的X就是图像的特征,而输出的y序列就是一段句子,就像看图说话等。

N-to-n的结构如下,要求输入序列和输出序列是等长的。

 

RNN序列模型介绍_第4张图片

n-to-one的结构主要是用来做序列分类,如下所示。

RNN序列模型介绍_第5张图片

RNN存在的问题:

  1. 当输入序列过长时,RNN后面序列的特征无法获得前面的特征,导致长期依赖(Long Term Dependency)问题。
  2. 梯度爆炸和梯度消失。梯度爆炸可以通过设定梯度阈值来解决。梯度消失是由于权值矩阵循环相乘导致在长期依赖中梯度过小。因为为了让h4依然能够获得h1时刻的特征,就要求梯度尽可能小,可能导致梯度消失(Vanishing Gradient)。

 

5.1.2 LSTM

LSTM1997年第一次提出,在深度学习时代大放异彩,很好的抑制了原始RNN算法中的梯度消失问题。LSTM单元的内部结构如下图所示。每个黄色方框表示一个神经网络层,由权值,偏置以及激活函数组成;每个粉色圆圈表示元素级别操作。

RNN序列模型介绍_第6张图片

其中有几个特定称呼:

单元状态(cell state

RNN序列模型介绍_第7张图片

遗忘门

 

,

表示Ct-1的哪些特征被用于计算Ct

 

RNN序列模型介绍_第8张图片

输入门

叫作输入门,it用于控制的哪些特征用于更新Ct。类似ft

表示单元状态更新值。

RNN序列模型介绍_第9张图片

输出门

 

 

Ot是输出门。其中ot的作用类似ftit,是用来控制一个比例的。

 

RNN序列模型介绍_第10张图片

 

5.1.3 GRU

GRUGate Recurrent Unit)在2014年提出,与LSTM功能一样,优势是计算简单快速。

 

 

RNN序列模型介绍_第11张图片

r是重置门控(reset gate),z是控制更新的门控(update gate

RNN序列模型介绍_第12张图片

 

GRU只有两个门控状态。使用了,是经过重置门重置过的前一个隐藏状态,表示是对之前状态的选择性记忆。计算的阶段包含了遗忘和记忆,门控z越接近1代表记忆越多,越接近0代表遗忘越多。

LSTMGRU的关系如下:1GRULSTM是表现最好的模型;(2GRU的在除了语言模型的场景中表现均超过LSTM;(3LSTM的输出门的偏置的均值初始化为1时,LSTM的性能接近GRU;(4)在LSTM中,门的重要性排序是遗忘门 > 输入门 > 输出门。

 

5.1.4 Multi-layer RNN

RNN也可以有多层结构,原理上没有什么特别之处,其中隐含层的输入输出可以是多种变体结构,下图是一个例子,且每一个cell unit可以是LSTMGRU等。

RNN序列模型介绍_第13张图片

 

5.1.5 Bi-LSTM

LSTM的直观问题就是无法编码从后向前的信息,比如文本情感分类任务中这个餐厅脏的不行,这里不行是对餐厅的形容,通过BiLSTM可以更好的捕捉双向语义关系。注意前向编码和后向编码的向量最终是要拼接在一起,形式可以有多种,比如以下两种形式。

RNN序列模型介绍_第14张图片

 

RNN序列模型介绍_第15张图片

 

 

关于RNN及上面各种变体的tf代码示例参考

https://github.com/aymericdamien/TensorFlow-Examples/。

其中RNN的TF cell介绍见:

https://github.com/weidong1/tf_ai_algorithm/blob/master/tf_examples/rnn_examples/tf_rnn_introduction.py

RNN建模见:

https://github.com/weidong1/tf_ai_algorithm/blob/master/tf_examples/rnn_examples/tf_rnn.py

BiLSTM建模见:

https://github.com/weidong1/tf_ai_algorithm/blob/master/tf_examples/rnn_examples/tf_bilstm.py

Multi-layer RNN建模见:

https://github.com/weidong1/tf_ai_algorithm/blob/master/tf_examples/rnn_examples/tf_multilayer_rnn.py

 

你可能感兴趣的:(深度学习)