引言

对于NLP任务有个很典型的任务,叫做情感分类,还有对话机器人,诗词生成,还有slot填充任务等等都是可以用RNN来做的(这里我们说的RNN是广义的RNN)。


全方位总结和深入循环神经网络RNN全方位总结和深入循环神经网络RNN全方位总结和深入循环神经网络RNN

为什么这些任务需要RNN呢?
因为某些任务需要能够更好地处理序列信息,即前面的输入和后面的输入是有关系的,因此需要模型具备记忆能力

简单版本RNN

RNN为什么会有记忆能力呢,首先我们看一下RNN的结构:


全方位总结和深入循环神经网络RNN

xx是一个向量,它表示某个时刻输入层的值(多个时刻的xx组成一个序列);ss是一个向量,它表示隐藏层的值;UU是输入层到隐藏层的权重矩阵,oo也是一个向量,它表示输出层的值;VV是隐藏层到输出层的权重矩阵。WW是什么:循环神经网络的隐藏层的值ss不仅仅取决于当前这次的输入xx,还取决于上一次隐藏层的值ss。权重矩阵 WW就是隐藏层上一次的值作为这一次的输入的权重。


全方位总结和深入循环神经网络RNN

第一个式子是输出层的计算公式,输出层是一个全连接层,也就是它的每个节点都和隐藏层的每个节点相连。V是输出层的权重矩阵,g是**函数。第二个式子是隐藏层的计算公式,它是循环层。U是输入x的权重矩阵,W是上一次的s的权重矩阵,f是**函数。从上面的公式我们可以看出,循环层和全连接层的区别就是循环层多了一个权重矩阵 W。 注意:W,V,U为共享权重。所以W,U,VW,U,V一共三个。


全方位总结和深入循环神经网络RNN

我们把上述两个式子展开来看,就可以看出,循环神经网络的输出值,受前面历次输入值x1x2...xt1x_1、x_2...x_{t-1}影响,这就是为什么循环神经网络具备记忆能力的原因。


全方位总结和深入循环神经网络RNN

很多现实中的数据都是序列数据,前后相关,需要具备记忆能力的模型来建模。 比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列;当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。

双向RNN

例如我们一些完形填空的任务,都需要我们上下文的理解,才可以知道我们这个空处应该填写什么。但是简单版本的循环神经网络无法对此进行建模,因此,我们需要双向循环神经网络。


全方位总结和深入循环神经网络RNN

从上图可看出,双向循环神经网络的隐藏层要保存两个值,一个AA参与正向计算,另一个值AA'
与反向计算。如,最终y2y_2的输出值取决于A2A_2A2A'_2


全方位总结和深入循环神经网络RNN

正向计算和反向计算不共享权重,也就是说UUUU'WWWW'VVVV'都是不同的权重矩阵。


全方位总结和深入循环神经网络RNN

RNN也可以在纵向方向进行延伸,即深度多层RNN。前面介绍的循环神经网络只有一个隐藏层,当然也可以根据任务及数据情况,堆叠两个以上的隐藏层,这样就得到了深度循环神经网络。


全方位总结和深入循环神经网络RNN

简单版本RNN存在的问题

其实大家发现无论是在一些顶会中还是在一些项目上,RNN都很少出现。这是因为RNN存在一些弊端。简单来说,就是RNN出现梯度消失和梯度爆炸的现象。


全方位总结和深入循环神经网络RNN

我们下面用数学推导看一些为什么RNN存在上述问题。根据我们前面定义好的RNN前向传导公式,假设tt最大为3,损失函数定义为:


全方位总结和深入循环神经网络RNN

我们以t=3t=3为例,前向传播时:


全方位总结和深入循环神经网络RNN

反向传播可得:


全方位总结和深入循环神经网络RNN

我们也可以知道tanhtanh函数在两端梯度会很小,然后通过这个累乘机制,小于1的数相乘越来越小。但是我们发现对于序列后面的输入例如t=3时,并没有累乘,所以梯度不会变得很小;而t=1时,前面累乘很多,就会梯度变得很小。

需要明确的是,RNN 中的梯度消失/梯度爆炸和普通的 MLP 或者深层 CNN 中梯度消失/梯度爆炸的含义不一样:MLP/CNN 中不同的层有不同的参数,各是各的梯度;而 RNN 中同样的权重在各个时间步共享,最终的梯度 g 等于各个时间步的梯度 g_t 的和。

由 1 中所述的原因,RNN 中总的梯度是不会消失的。即便梯度越传越弱,那也只是远距离的梯度消失,由于近距离的梯度不会消失,所有梯度之和并不会消失。RNN 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。

所以RNN无法很好的学习到远距离的依赖关系,无法处理长序列。

实践中梯度爆炸一般通过梯度裁剪来解决。

LSTM基本结构解析

LSTM中记忆机制

LSTM的动机就是由于我们人类大脑也有选择性输入和选择性遗忘机制。记忆是一种随时间而变化的状态。决定记忆状态的两大因素:选择性的输入、选择性的遗忘。在不同场景下的记忆输出不同。
正是基于人们的记忆有如此特性,LSTM中引出了四个重要概念:细胞状态、输入门、遗忘门以及输出门。

LSTM的本质思想是输入有效的信息,遗忘无用的信息,输出与任务强相关的信息应用于任务处理。
LSTM是一种特殊的RNN网络,并有许多人对其进行了改进和普及。他们的工作被用来解决了各种各样的问题,直到目前还被广泛应用。
全方位总结和深入循环神经网络RNN
总体运算流程如上图所示:黄色方框表示**函数操作,粉色圆圈表示点操作,单箭头表示数据流向,箭头合并表示向量的合并(concat)操作,箭头分叉表示向量的拷贝操作。

RNN的技术选型

全方位总结和深入循环神经网络RNN
图1是普通的单个神经网络。
图2是把单一输入转化为序列输出,可以用来做生成模型。例如输入一个图像信息,生成一段文字,典型任务就是看图说话。
图3是把序列输入转化为单个输出。可以做一个典型序列分类的问题,例如文本分类和视频分类。
图4是把序列转化为序列,也就是 seq2seq 的做法。这里的输入序列和输出序列是错位的,意味着输入序列和输出序列长度可以不一样,经典任务 如机器翻译。
图5是无时差的序列到序列转化,可以作为普通的语言模型。这里输入和输出序列长度相同,有种一一对应的感觉(对齐),还可以做一些NER问题。

LSTM基本结构解析

GRU基本机构解析