深度学习原理与实践(开源图书)-总目录, 构建知识谱系。
递归神经网络(Recursive NN,RNN)通过带有树状相似的神经网络结构来递归复杂的深度网络。本质上,递归神经网络是对循环神经网络(Recurrent Neural Network)的一个有效扩展,他们具有不同的计算图。
递归神经网络(Recursive NN)和循环神经网络(Recurrent NN, RNN)统称为递归神经网络(RNN)。循环神经网络(Recurrent Neural Network, RNN)属于时间递归神经网络,时间递归神经网络的神经元间连接构成矩阵; 递归神经网络(Recursive NN)属于结构递归神经网络,结构递归神经网络利用相似的神经网络结构递归构造更为复杂的深度网络。递归神经网络(RNN)无法处理随着递归,权重指数级爆炸或消失的问题(Vanishing gradient problem),难以捕捉长期时间关联。
RNN通常是指循环神经网络,我们可以将递归神经网络看做是循环神经网络的一种泛化。
递归神经网络(RNN)包括一层内的加权连接(与传统前馈网络相比,连接仅馈送到后续层)。因为RNN包含循环,所以它们可以在处理新输入的同时存储信息。这种记忆使它们非常适合处理必须考虑事先输入的任务(比如时间序列数据)。递归神经网络(RNN)非常适合处理文本、语音、视频等时间序列数据样本。
递归神经网络是循环神经网络的泛化,递归神经网络的计算图结构为1个深层树,而不是RNN的链式结构。
递归神经网络(Recursive NN)和循环神经网络(Recurrent NN)都可以处理时间序列数据。但是递归神经网络(Recursive NN)在基于词嵌入和句子的连续表示、自然场景图像和自然语言处理中的学习时序和树结构方面表现突出。
常见的时间序列数据包括:语言模型、手写体识别、序列生成、机器翻译、语音、视频分析等。时间序列数据的样本间存在顺序关系,每个样本和它之前的样本存在关联;直白一点呢的表述也就是选择和决策参考了上一次的状态。RNN不仅能够处理序列的输入,也能得到序列的输出,这里的序列指的是向量序列。
假设时间序列为: X { x 1 , x 2 , … , x N } X\{x_1, x_2, \ldots, x_N\} X{x1,x2,…,xN}
时间序列模型为: P ( X ) = ∏ i = 1 N P ( x i ∣ x 1 , … , x i − 1 ) P(X)=\prod_{i=1}^N{P(x_i|x_1,\ldots,x_{i-1})} P(X)=∏i=1NP(xi∣x1,…,xi−1)
根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。每个矩形是一个向量;箭头代表函数(例如矩阵乘法);红色的是输入向量;蓝色的是输出向量;绿色的是某一时间的RNN状态。如下图,
因为神经网络的输入层单元个数是固定的,因此必须用循环或者递归的方式来处理长度可变的输入。循环神经网络(Recurrent NN)通过将长度不定的输入分割为等长度的小块,然后再依次的输入到网络中,从而实现了神经网络对变长输入的处理。递归神经网络(Recursive NN)当面对按照树/图结构的时序信息(非序列的时序信息)时, 具有独特优势。
对于时间序列数据,循环神经网络(Recurrent NN)按照时间顺序链式展开,上去和HMM很像,它的网络参数是跨时刻共享的。对于时间序列数据,递归神经网络(Recursive NN)一般按照树形结构展开(递归由此而来),它的网络参数是跨时刻共享的。共享参数的思想和和卷积神经网络(CNN)是相通的,CNN在二维数据的空间位置之间共享卷积核参数,而RNN则是在序列数据的时刻之间共享参数。共享参数使得模型的复杂度大大减少,并使RNN可以适应任意长度的序列,带来了更好的可推广性。如下图所示。
RNN训练困难的主要原因在于隐藏层参数ww的传播:由于误差传播在展开后的RNN上,无论在前向传播过程还是在反向传播过程中ww都会乘上多次,这就导致:
当然了,这个问题其实存在于任何深度神经网络中,只是由于RNN的递归结构导致其尤其明显。
对于梯度爆炸问题,可以通过截断的方式来有效避免。
而对梯度消失问题,则有很多不同的方案:
1 循环神经网络和递归神经网络的区别?
循环神经网络(Recurrent NN)是在时间维度上的展开,代表信息在时间维度从前往后的的传递和积累,可以类比markov假设,后面的信息的概率建立在前面信息的基础上,在神经网络结构上表现为后面的神经网络的隐藏层的输入是前面的神经网络的隐藏层的输出;从结构上来说,循环神经网络(Recurrent NN)是有环的;
递归神经网络(Recursive NN)是空间维度的展开,是一个树结构,比如NLP里某句话,用循环神经网络(Recurrent NN)来建模的话就是假设句子后面的词的信息和前面的词有关,而用递归神经网络(Recursive NN)来建模的话,就是假设句子是一个树状结构,由几个部分(主语,谓语,宾语)组成,而每个部分又可以在分成几个小部分,即某一部分的信息由它的子树的信息组合而来,整句话的信息由组成这句话的几个部分组合而来;从结构上来说,递归神经网络(Recursive NN)无环。