1. Why RNN
如图1.1所示,全连接网络的特点是:层与层之间是全连接的,每层之间的节点是无连接的,因此全连接网络只能处理一个一个的输入。X是一句话,可以将x1,x2,x3分别视为一个字(或一个拼音,一个音素,语音的一帧数据等)。将x1和x2换一下位置,对于网络本身的学习来说是没有任何变化的。即对于全连接网络来说,前一个输入和后一个输入是完全没有关系的。但是我们在现实生活中会遇到很多和序列有关的问题,例如:“We love working on deep learning”, 打乱顺序为“working love learning we on deep”,意思是完全不同,甚至是完全无法理解的。这种序列的信息决定事件本身的任务,就需要先前的知识与当前信息共同决定输出结果。因此对处理序列的网络提出需求,也是RNN网络存在的意义。

-
语义分析(Semantic Analysis):按照语法分析器识别的语法范畴进行语义检查和处理,产生相应的中间代码或目标代码。(
多对多
) -
情感分析(Sentiment Classification):例如简单的把一条推文分为正负两种情绪的任务。所以输入是任意长度的推文, 而输出是固定的长度和类型(
多对一
)
图1.2. 情感分析
-
图像标注(Image Captioning)对图片进行文本描述。输入是单一的图像,输出是一系列或序列单词。这里的图像可能是固定大小的,但输出是不同长度的文字描述。(
一对多
)图1.3.图像标注
-
语言翻译(Language Translation):不同语言之间的翻译。(
多对多
)
2. What is RNN
RNN有很多变体,我们先从最典型最简单的序列网络说起。
典型RNN的基本结构如图2.1所示,x是输入数据, s是隐藏层输出,o是网络输出,U是输入到隐藏层的权重值,W是前一时刻隐藏层对当前隐藏层贡献的权重值,V是隐藏层到输出层的权重值。
是不是一脸懵......

假设我们的任务是预测句子中下一个词,传统全连接网络的实现形式如图2.2所示:输入--隐藏层--输出


循环层
:

state
,将前一刻的state和当前时刻的输入作为共同输入,喂给下一隐藏层。具体如图2.1.5所示。
3. How RNN
我们以一个简单例子:预测下一个词符,来直观的理解RNN是如何实现对序列问题的处理及输入--隐藏层--State--输出之间的关系。
假设我们的输入是h, e, l, l,任务是预测下一个字符。词表是h, e, l, l, o, a(这里我们只是为了说明RNN结构,简化词表。实际使用时词表可以理解为一个字典,应该包括尽可能多的词或者字符)。

循环递归公式
:

所以RNN反向传播的重点有两个:
- (1). 按时间步展开
- (2). 各个隐藏层权重相同,误差求和得到梯度后更新权重
如果对具体的推导公式感兴趣,可以参见博客
5. RNN 发展历史
18年的综述文章: Recent Advances in Recurrent Neural Networks对RNN的发展历史进行了回顾。


6. RNN梯度消失
RNN基于这样的机制,信息的结果依赖于前面的状态或前N个时间步。普通的RNN可能在学习长距离依赖性方面存在困难。例如,如果我们有这样一句话,“The man who ate my pizza has purple hair”。在这种情况下,purple hair描述的是The man,而不是pizza。所以这是一个长距离的依赖关系。
如果我们在这种情况下反向传播,就需要应用链式法则。在三个时间步后对第一个求梯度的公式如下:
∂E/∂W = ∂E/∂ ∂
/∂
∂
/∂
*∂
/∂
.. 这就是一个长距离的依赖关系。如果任何一个梯度接近0,所有的梯度都会成指数倍的迅速变成零。这样将不再有助于网络学习任何东西。这就是所谓的消失梯度问题。关于梯度的理论解释可以参看1994年论文Learning Long-Term Dependencies with Gradient Descent is Difficult
消失梯度问题与爆炸梯度问题相比,对网络更有威胁性,梯度爆炸就是由于单个或多个梯度值变得非常高,梯度变得非常大。
之所以我们更关心梯度消失问题,是因为通过一个预定义的阈值可以很容易地解决梯度爆炸问题。幸运的是,也有一些方法来处理消失梯度问题。如LSTM结构(长短期记忆网络)和GRU(门控性单位)可以用来处理消失的梯度问题。
参考资料
[1] RNN详解
[2] RNN正向反向传播公式推导
[3] RNN综述文章解读
网友评论