循环神经网络(RNN)简介

2024-05-05 21:56

1. 循环神经网络(RNN)简介

 循环神经网络英文名称为 ( Recurrent Neural Network, RNN ),其通过使用带自反馈的神经元,能够处理任意长度的 时序 数据。
   给定输入时序序列        式中,  表示一段时序数据,  为时间长度
   以一段英文段落为例,其时序数据可以表示为:
   若是一段视频,将其每一帧通过CNN网络处理得到相应的编码向量
   循环神经网络通过以下公式更新隐藏层的活性值          
                                           
   循环神经网络图示
   RNN的基本模型如下图所示,为便于理解,图中将RNN的模型展开,按照时序方向对其前向传播流程进行介绍
                                           RNN的基本模型
   利用数学表达式整个过程可以变得更加清晰,RNN的前向传播公式如下:     
     
     
     
   将上述过程整合到一个RNN cell中,可以表示为如下图所示的过程:
                                           RNN的前向传播示意图
   缺陷:
   没有利用到模型后续的信息,可以通过双向RNN网络进行优化
   RNN主要有两种计算梯度的方式:随时间反向传播(BPTT)和实时循环学习法(RTRL)算法
   本文中主要介绍随时间反向传播的方法 (  BackPropagation Through Time  )
   RNN的损失函数与任务有关,对于同步的序列对序列任务,其loss可以用交叉熵公式表示     
     
   然后通过BPTT算法便可以进行梯度的反向传播计算
   梯度爆炸的解决方法:梯度修剪
   梯度消失的解决方法:增加长程依赖 LSTM,GRU
   GRU的基本思路:增加相关门(Relate Gate)和更新门(Update Gate),进而使得RNN单元具有记忆能力
   首先从数学角度对GRU的前向传播过程进行介绍,具体公式如下:     
     
     
     
     
     
   公式中各变量的含义:
   将上述数学公式转化为图像,可得
                                           GRU Cell的前向传播流程
   LSTM意为长短时记忆网络  (Long Short-Term Memory Network,LSTM)  ,可以有效地解决简单神经网络的梯度消失和爆炸问题
   在LSTM中,与GRU主要有两点不同
   同样,先从数学公式入手,对LSTM的前向传播过程进行了解     
     
     
     
     
     
   基于数学公式的过程,可将LSTM CELL的前向传播过程总结为(图片借用于nndl):
                                           LSTM Cell的前向传播示意图
   从上图中可以看出,LSTM在前向传播的过程中传输了两个状态:内部状态  以及外部状态  ,在整个传播过程中 外部状态(隐状态)   每个时刻都会被重写,因此可以看作一种 短时记忆 ,而 内部状态   可以在某个时刻捕捉一些关键信息,并将此信息保存一段时间间隔,可以看作一种 长时记忆 (长的短时记忆)
   此外,在LSTM网络初始化训练的时候,需要手动将遗忘门的数值设置的大一些,否则在参数初始化的时候,遗忘门的数据会被初始化为一个很小的值,前一时刻的内部状态  大部分都会丢失,这样网络很难获取到长距离的依赖信息,并且相邻时间间隔的梯度会非常小,导致 梯度弥散 问题,因此遗忘门的 偏置变量  的初始值 一般很大,取 1或2 
   将  设置为1即可,但是长度非常的大的时候会造成记忆单元的饱和,降低性能
   三个门不仅依赖于  和  ,也依赖于  
   将两者合并为一个门,即:     
   首先,我们要理解什么是深层的RNN,对于单个的RNN cell,若将其在时间维度上展开,其深度与时间维度的长度成正比,但若将一个RNN cell看作为单个从  的映射函数,则单个cell实际上是很浅显的一层,因此深层循环神经网络要做的就是把多个RNN cell组合起来,换句话说,就是增加从输入  到输出  的路径,使得网络的深度更深。
   如何增加从输入  到输出  的路径呢?两种途径:
                                           堆叠循环神经网络示意图
   将网络带入到实际应用场景中:假如我们要翻译一段句子
   在这里,is和are实际上是由后面的Lucy和they所决定的,而这种单向的按照时序进行传播的方式没有利用到后面的信息。因此诞生了双向循环网络
                                           双向循环神经网络示意图
   双向循环神经网络实际上就是简单的双层循环神经网络,只不过第二层网络的传播方式为按时序的逆向传播,其传播公式为:     
     
     

循环神经网络(RNN)简介

2. 循环神经网络(RNN)的应用

 循环神经网络(RNN)是目前深度学习最有前景的工具之一,它解决了传统神经网络不能共享从数据中共享位置的特征的问题。目前,RNN已经有了不少有意思的应用:
    语音识别 :输入的语音数据,生成相应的语音文本信息。比如微信的语音转文字功能。
    机器翻译 :不同语言之间的相互转换。像有道翻译、腾讯翻译官等。最近微软据说实现了中翻英媲美人类的水平
    音乐生成 :使用RNN网络生成音乐,一般会用到RNN中的LSTM算法(该算法可以解决RNN网络中相距较远的节点梯度消失的问题)。下面这个github项目实现了jazz音乐的生成。    deepjazz 
    文本生成 :利用RNN亦可以生成某种风格的文字。有兴趣的可以看一下一下两个github项目    numpy实现字符层面的文本生成器     keras实现特定作家风格的文本 
    情感分类 :输入文本或者语音的评论数据,输出相应的打分数据。
    DNA序列分析 :输入的DNA序列,输出蛋白质表达的子序列。
    视频行为识别 :识别输入的视频帧序列中的人物行为。
    实体名字识别 :从文本中识别实体的名字。

3. 分析RNN和NN(神经网络)的区别。

4.从处理输入来说,RNN可以用于处理单独的一个一个的输入。但是,当我们处理序列信息时,即前面的输入跟后面的输入是有关系的,普通的神经网络(NN)模型就无法实现了。【摘要】
分析RNN和NN(神经网络)的区别。【提问】
区别有好几方面,1.从名字上来说:RNN是循环神经网络,NN是神经网络【回答】
2.从定义上来说,传统的神经网络模型(左图),输入层(input layer)到隐藏层(hidden layer),隐藏层再到输出层(output layer),层与层之间是全连接的,但是隐藏层节点之间是无连接的。循环神经网络(右图),隐藏层节点之间是有连接的。【回答】
【回答】
3.从基本结构来看,在RNN中,每一层都共享参数U、V、W,降低了网络中需要学习的参数,提高学习效率。【回答】
U是输入层到隐藏层的权重矩阵。​ V是隐藏层到输出层的权重矩阵。【回答】
4.从处理输入来说,RNN可以用于处理单独的一个一个的输入。但是,当我们处理序列信息时,即前面的输入跟后面的输入是有关系的,普通的神经网络(NN)模型就无法实现了。【回答】

分析RNN和NN(神经网络)的区别。

4. 循环神经网络(RNN)——处理序列样本

循环神经网络(Recurrent Neural Network,RNN)具有记忆功能,他可以发现样本之间的序列关系,是处理序列样本的首选模型。循环神经网络大量应用在数值、文本、声音、视频处理等领域。
  
 循环神经网络模型是一个具有记忆功能的模型。它可以发现样本之间的相互关系,多用于处理带有序列特征的样本数据。
  
 RNN模型有很多种结构,其最基本的结构是将全连接网络的输出节点复制一份并传回到输入节点中,与输入数据一起进行下一次运算。这种神经网络将数据从输入层又传回到输出层,形成了循环结构,所以被叫做循环神经网络。
  
 通过RNN模型,可以将上一个序列的样本输出结果与下一个序列样本一起输入模型中进行运算,使模型所处理的特征信息中,既含有该样本之前序列的信息,又含有该样本自身的数据信息,从而使网络具有记忆功能。
  
 在实际开发中,所使用的RNN模型还会基于上述的原理做更多的结构改进,使得网络的记忆功能更强。
  
 在深层网络结构中,还会在RNN模型基础上结合全连接网络、卷积网络、等组成拟合能力更强的模型。

5. 几种常见的循环神经网络结构RNN、LSTM、GRU

 传统文本处理任务的方法中一般将TF-IDF向量作为特征输入。显而易见,这样的表示实际上丢失了输入的文本序列中每个单词的顺序。在神经网络的建模过程中,一般的前馈神经网络,如卷积神经网络,通常接受一个定长的向量作为输入。卷积神经网络对文本数据建模时,输入变长的字符串或者单词串,然后通过滑动窗口加池化的方式将原先的输入转换成一个固定长度的向量表示,这样做可以捕捉到原文本中的一些局部特征,但是两个单词之间的长距离依赖关系还是很难被学习到。   循环神经网络却能很好地处理文本数据变长并且有序的输入序列。它模拟了人阅读一篇文章的顺序,从前到后阅读文章中的每一个单词,将前面阅读到的有用信息编码到状态变量中去,从而拥有了一定的记忆能力,可以更好地理解之后的文本。   其网络结构如下图所示:
                                           由图可见,t是时刻,x是输入层,s是隐藏层,o是输出层,矩阵W就是隐藏层上一次的值作为这一次的输入的权重。
                                           如果反复把式 2 带入到式 1,将得到:
                                           其中f和g为激活函数,U为输入层到隐含层的权重矩阵,W为隐含层从上一时刻到下一时刻状态转移的权重矩阵。在文本分类任务中,f可以选取Tanh函数或者ReLU函数,g可以采用Softmax函数。
   通过最小化损失误差(即输出的y与真实类别之间的距离),我们可以不断训练网络,使得得到的循环神经网络可以准确地预测文本所属的类别,达到分类目的。相比于卷积神经网络等前馈神经网络,循环神经网络由于具备对序列顺序信息的刻画能力,往往能得到更准确的结果。
   RNN的训练算法为:BPTT   BPTT的基本原理和BP算法是一样的,同样是三步:   1.前向计算每个神经元的输出值;   2.反向计算每个神经元的误差项值,它是误差函数E对神经元j的加权输入的偏导数;   3.计算每个权重的梯度。   最后再用随机梯度下降算法更新权重。   具体参考: https://www.jianshu.com/p/39a99c88a565    最后由链式法则得到下面以雅可比矩阵来表达的每个权重的梯度:
                                                                                   由于预测的误差是沿着神经网络的每一层反向传播的,因此当雅克比矩阵的最大特征值大于1时,随着离输出越来越远,每层的梯度大小会呈指数增长,导致梯度爆炸;反之,若雅克比矩阵的最大特征值小于1,梯度的大小会呈指数缩小,产生梯度消失。对于普通的前馈网络来说,梯度消失意味着无法通过加深网络层次来改善神经网络的预测效果,因为无论如何加深网络,只有靠近输出的若干层才真正起到学习的作用。 这使得循环神经网络模型很难学习到输入序列中的长距离依赖关系 。
   关于RNN梯度下降的详细推导可以参考: https://zhuanlan.zhihu.com/p/44163528 
   梯度爆炸的问题可以通过梯度裁剪来缓解,即当梯度的范式大于某个给定值时,对梯度进行等比收缩。而梯度消失问题相对比较棘手,需要对模型本身进行改进。深度残差网络是对前馈神经网络的改进,通过残差学习的方式缓解了梯度消失的现象,从而使得我们能够学习到更深层的网络表示;而对于循环神经网络来说,长短时记忆模型及其变种门控循环单元等模型通过加入门控机制,很大程度上弥补了梯度消失所带来的损失。
   LSTM的网络机构图如下所示:
                                           与传统的循环神经网络相比,LSTM仍然是基于xt和ht−1来计算ht,只不过对内部的结构进行了更加精心的设计,加入了输入门it 、遗忘门ft以及输出门ot三个门和一个内部记忆单元ct。输入门控制当前计算的新状态以多大程度更新到记忆单元中;遗忘门控制前一步记忆单元中的信息有多大程度被遗忘掉;输出门控制当前的输出有多大程度上取决于当前的记忆单元。
   在经典的LSTM模型中,第t层的更新计算公式为
                                                                                                                                                                                                                                                   其中it是通过输入xt和上一步的隐含层输出ht−1进行线性变换,再经过激活函数σ得到的。输入门it的结果是向量,其中每个元素是0到1之间的实数,用于控制各维度流过阀门的信息量;Wi 、Ui两个矩阵和向量bi为输入门的参数,是在训练过程中需要学习得到的。遗忘门ft和输出门ot的计算方式与输入门类似,它们有各自的参数W、U和b。与传统的循环神经网络不同的是,从上一个记忆单元的状态ct−1到当前的状态ct的转移不一定完全取决于激活函数计算得到的状态,还由输入门和遗忘门来共同控制。
   在一个训练好的网络中,当输入的序列中没有重要信息时,LSTM的遗忘门的值接近于1,输入门的值接近于0,此时过去的记忆会被保存,从而实现了长期记忆功能;当输入的序列中出现了重要的信息时,LSTM应当把其存入记忆中,此时其输入门的值会接近于1;当输入的序列中出现了重要信息,且该信息意味着之前的记忆不再重要时,输入门的值接近1,而遗忘门的值接近于0,这样旧的记忆被遗忘,新的重要信息被记忆。经过这样的设计,整个网络更容易学习到序列之间的长期依赖。
   GRU是在LSTM上进行简化而得到的,GRU的网络结构如下所示:
                                           Zt代表更新门,更新门的作用类似于LSTM中的遗忘门和输入门,它能决定要丢弃哪些信息和要添加哪些新信息。   Rt代表重置门,重置门用于决定丢弃先前信息的程度。
   要注意的是,h只是一个变量,因此在每个时刻,包括最后的线性组合,h都是在用以前的自己和当前的备选答案更新自己。举例来说,这一个变量好比一杯酒,每次我们要把一部分酒倒出去,并把倒出去的酒和新加入的原料混合,然后在倒回来,这里的reset控制的就是要倒出去的,并且混合好之后再倒回来的酒的比例,而update控制的则是用多大的比例混合新原料和倒出来的之前调制好的酒。同理,也可以以此理解LSTM,LSTM的遗忘门功能上和reset相似,而输入门与update相似,不同之处在于LSTM还控制了当前状态的exposure,也就是输出门的功能,这是GRU所没有的。
   1.百面机器学习   2. https://zhuanlan.zhihu.com/p/45649187    3. https://www.jianshu.com/p/39a99c88a565 

几种常见的循环神经网络结构RNN、LSTM、GRU

6. CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?

如下:
1、DNN:存在着一个问题——无法对时间序列上的变化进行建模。然而,样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。对了适应这种需求,就出现了另一种神经网络结构——循环神经网络RNN。
2、CNN:每层神经元的信号只能向上一层传播,样本的处理在各个时刻独立,因此又被称为前向神经网络。
3、RNN:神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出!

介绍
神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。
在实际应用中,所谓的深度神经网络DNN,往往融合了多种已知的结构,包括卷积层或是LSTM单元。