美文网首页
RNN(Recurrent Neural Network)

RNN(Recurrent Neural Network)

作者: Liu91 | 来源:发表于2019-01-03 16:14 被阅读0次

1. Why RNN

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

图1.1. 全连接网络 序列分析在现实生活中非常普遍,也就决定了序列网络应用的广泛性。
  • 语义分析(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.1 典型RNN网络 看不懂的时候,我们就回归到RNN网络的本质:处理序列问题,那么它是怎样在全连接网络的基础上加入先前知识来决定输出的呢?

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

图2.2. 全连接网络预测句子中下一个词 怎样在上面的基础网络中增加先前知识呢?我们知道,每个隐藏层都有独立的权重和激活,输入就是通过这些权重和激活一步一步映射到输出的,因此先前知识完全可以以输入的形式加入到这些隐藏层中,其结构如下图所示 图2.3. 加入先前知识的全连接网络 每个单词都可以看作输入,只是输入之间是有一定顺序的。既然都可以看作输入,我们为各个隐藏层设置相同的权重值和激活,并将这些隐藏层合并为一个循环层 图2.4. 循环层网络基本结构 可以看出,图2.4就是图2.1的结构。上面的推导只是对RNN网络直观上的理解。下面详细介绍循环层各个参数的意义。RNN在实际实现的时候把隐藏层的输出叫作state,将前一刻的state和当前时刻的输入作为共同输入,喂给下一隐藏层。具体如图2.1.5所示。
图2.5. RNN循环层展开

3. How RNN

我们以一个简单例子:预测下一个词符,来直观的理解RNN是如何实现对序列问题的处理及输入--隐藏层--State--输出之间的关系。

假设我们的输入是h, e, l, l,任务是预测下一个字符。词表是h, e, l, l, o, a(这里我们只是为了说明RNN结构,简化词表。实际使用时词表可以理解为一个字典,应该包括尽可能多的词或者字符)。

图3.1. 预测词符 如上图所示,隐藏层对每个输入和state应用循环递归公式
图4.1. RNN展开图 假设 图4.2. RNN误差计算公式 我们通常把整个序列看作一个训练样本,所以总的误差是每个时间步误差之和。因为权重在每一个时间步长是相同的,所以可以计算总误差后一起更新。
所以RNN反向传播的重点有两个:
  • (1). 按时间步展开
  • (2). 各个隐藏层权重相同,误差求和得到梯度后更新权重
    如果对具体的推导公式感兴趣,可以参见博客

5. RNN 发展历史

18年的综述文章: Recent Advances in Recurrent Neural Networks对RNN的发展历史进行了回顾。

图5.1. RNN的发展历史 从网络结构,训练方法,激活函数等,RNN在近30年内得到了很大的发展。下面的表格罗列了不同RNN网络的优缺点,这些网络结构,我们在后面会进行详细的解释。
图5.2. 不同RNN结构的优缺点

6. RNN梯度消失

RNN基于这样的机制,信息的结果依赖于前面的状态或前N个时间步。普通的RNN可能在学习长距离依赖性方面存在困难。例如,如果我们有这样一句话,“The man who ate my pizza has purple hair”。在这种情况下,purple hair描述的是The man,而不是pizza。所以这是一个长距离的依赖关系。

如果我们在这种情况下反向传播,就需要应用链式法则。在三个时间步后对第一个求梯度的公式如下:

∂E/∂W = ∂E/∂y_3y_3/∂h_3h_3/∂y_2 *∂y_2/∂h_1 .. 这就是一个长距离的依赖关系。如果任何一个梯度接近0,所有的梯度都会成指数倍的迅速变成零。这样将不再有助于网络学习任何东西。这就是所谓的消失梯度问题。关于梯度的理论解释可以参看1994年论文Learning Long-Term Dependencies with Gradient Descent is Difficult

消失梯度问题与爆炸梯度问题相比,对网络更有威胁性,梯度爆炸就是由于单个或多个梯度值变得非常高,梯度变得非常大。

之所以我们更关心梯度消失问题,是因为通过一个预定义的阈值可以很容易地解决梯度爆炸问题。幸运的是,也有一些方法来处理消失梯度问题。如LSTM结构(长短期记忆网络)和GRU(门控性单位)可以用来处理消失的梯度问题。

参考资料
[1] RNN详解
[2] RNN正向反向传播公式推导
[3] RNN综述文章解读

相关文章

网友评论

      本文标题:RNN(Recurrent Neural Network)

      本文链接:https://www.haomeiwen.com/subject/yupplqtx.html