RNN循环神经网络
demi 在 周二, 01/07/2020 - 14:04 提交
CNN(卷积神经网络)我们会发现,他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响,比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果。但是,对于一些与时间先后有关的,比如视频的下一时刻的预测,文档前后文内容的预测等,这些算法的表现就不尽如人意了。因此,RNN就应运而生了......
CNN(卷积神经网络)我们会发现,他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响,比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果。但是,对于一些与时间先后有关的,比如视频的下一时刻的预测,文档前后文内容的预测等,这些算法的表现就不尽如人意了。因此,RNN就应运而生了......
RNN前向计算:对于如下结构,x是输入,s为隐层,o为输出,U,W,V为不同层的权值,同一类型的权连接权值相同
RNN又名循环神经网络,是一类处理序列数据的神经网络,这个序列数据不只包括时间序列,还有文字序列等,即序列数据中后面的数据与前面的数据有关系。
由于0-1范围内的导数累乘,会发现累乘会导致激活函数导数的累乘,如果取tanh或sigmoid函数作为激活函数的话,那么必然是一堆小数在做乘法,结果就是越乘越小。随着时间序列的不断深入,小数的累乘就会导致梯度越来越小直到接近于0,这就是“梯度消失“现象。
由于RNN也有梯度消失的问题,因此很难处理长序列的数据,大牛们对RNN做了改进,得到了RNN的特例LSTM(Long Short-Term Memory),它可以避免常规RNN的梯度消失,因此在工业界得到了广泛的应用。
神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。早期感知机的推动者是Rosenblatt。
本文我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Recurrent Neural Networks ,以下简称RNN),它广泛的用于自然语言处理中的语音识别,手写书别以及机器翻译等领域。
CNN和RNN几乎占据着深度学习的半壁江山,所以本文将着重讲解CNN+RNN的对比,以及各种组合方式。
时间序列数据是在不同时间点上统计同一指标,并按照时间先后排列成的一个集合。时间序列的主要作用是了解一个指标的长期趋势和预测未来。循环神经网络(Recurrent Neural Network或RNN )就是一类用于处理序列数据的神经网络。RNN的状态,不仅受输入影响,还受前一时刻状态的影响。
典型 RNN 模型
下图是典型的 RNN 模型,X 是输入,对文本经过嵌入层嵌入处理,再进入 RNN,RNN 的后面是全连接层,输出各个类别的概率。
下面来描述一次数据从输入到输出的完整过程:
在自然语言处理中,不管是中文还是英文,首先第一步的任务是如何将文本数据数值化。对于中文,可以先建立词汇表,给词汇表中的没歌词建立唯一的 id 标识(数字),这样每段文本都可以用一串数字 id 来表示,然后就能进行词嵌入操作,英文的处理方法也类似。
对文本预处理时,由于每条文本的长度不一,需要给输入统一规定长度(seq_length),超过的截断,不足的填充。假设有 N 段文本(text),统一长度后就变成了 [N, 1, seq_length]大小的矩阵,矩阵的每一行代表一段文本,大小为[1, seq_length]。