我没看过,平坦山丘,怎么触摸,开花沼泽。
在进入RNN之前,我们默认已经掌握了深度学习基础,word2vec等NLP入门知识。RNN的全称是Recurrent Neural Network,也就是循环神经网络。
在RNN诞生之前,普遍的神经网络都是前馈的,也就是仅沿着一条方向传播:输入经过第一层,得到数据再传给下一层,直到到达最后的输出层。这样的网络结构简单,但存在一个重大缺点,就是无法学习时间序列数据中的时间特征。时间序列数据广义上可以理解为相邻的数据存在一定关系的序列,因此NLP中的句子也被视为时序数据(相邻的单词是有语义相关的)。换言之,传统的前馈型网络只能处理序列中数据彼此不相关的情况,而RNN可以解决这样的问题。
RNN的网络结构
我们在网上常见的RNN结构是这样的:
对于初次接触循环神经网络的新手来说,这样的结构并不好理解,我们不妨将该网络展开成常见的前馈型网络:
上图中,是一组序列数据,我们可以看到,首先被输入进RNN层,产生对应的输出,同时的值被复制,和一起进入下一层的RNN并产生,依次类推,直至产生全部的输出。我们可以看到,网络中的RNN是有两个输入的:和(第一个RNN虽然图上只输入了x,但实际上我们可以认为也输入了h,只是值为全0),因此RNN层也就对应有两个对应的参数:和。形式上说,每个h的计算公式如下:
W为对应的参数,b为偏置,tanh为变换函数(双曲正切函数)。
另外需要注意的是,我们上面的图中虽然展开成了多层前馈网络,但实际上是只有一层RNN循环计算的(或者说图中的多个RNN中参数是完全一致的),多层只是为了便于理解。