本文使用TensorFlow构建循环神经网络,使用机器学习中常用的MNIST手写数字的数据集。该数据集包含60,000个图片作为训练数据和10,000个作为测试数据。这些图片已经过标准化处理,并且图像的大小都是(28x28pixels),为简单起见,每个图像都被展平并转换为784个特征的1D numpy数组(28 * 28) 。
1.引言
在传统的神经网络模型中,是从输入层->隐藏层->输出层,层与层之间是全连接的 ,每层之间的节点是无连接的。但是这种普通的神经网络对于实际中很多数据却无能无力。
例如:
自然语言处理问题,要预测一个句子的下一个单词是什么,需要用到前面的单词;
语音处理。此时,输入数据都是每帧的声音信号。
实际上,序列化的数据就不太好用原始的神经网络处理了,所以才有了循环神经网络来解决这类问题。
RNN也是接受输入向量X,然后计算后输出向量Y。但是,关键的是,这个输出向量Y的内容不仅会受到当前输入X的影响,还会跟你过去输入的整个历史数据有关。
2.什么是RNN
RNN(Recurrent Neural Networks)为循环神经网路 ,为了建模序列问题,RNN引入了隐状态h(hidden state)的概念,h可以对序列形的数据提取特征,接着再转换为输出。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,隐藏层之间的节点之间是有连接的,并且隐藏层的输入不仅包括当前输入层的输出还包括上一时刻隐藏层的输出 。
RNN的一般结构
我们先从h1的计算开始看:
h2的计算和h1也是类似的,要注意的是,在计算时,每一步使用的参数U、W、b都是一样的,也就是说每个步骤的参数都是共享的,这是RNN的重要特点之一。
依次计算剩下来的(使用相同的参数U、W、b):
目前的RNN还没有输出,得到输出值的方法就是直接通过h进行计算:
剩下的输出类似进行(使用和y1同样的参数V和c):
这就是最经典的RNN结构,我们像搭积木一样把它搭好了。它的输入是x1, x2, .....xn,输出为y1, y2, ...yn,也就是说,输入和输出序列必须要是等长的。
由于这个限制的存在,经典RNN的适用范围比较小,后面会介绍RNN的变体,还有“多对一”、“一对多 ”、“多对多”的结构。
3.RNN 能做什么?
RNNs已经被证明对NLP是非常有效的,如词向量表达 、语句合法性检查 、词性标注等,RNN 理论上能够对任何长度的序列数据进行处理。下面对RNNs在NLP中的应用进行简单的介绍:
语言模型与文本生成(Language Modeling and Generating Text)
给你一个单词序列,我们需要根据前面的单词预测每一个单词的可能性。语言模型能够一个语句正确的可能性,这是机器翻译的一部分,往往可能性越大,语句越正确。另一种应用便是使用生成模型预测下一个单词的概率,从而生成新的文本根据输出概率的采样。
机器翻译(Machine Translation)
语音识别(Speech Recognition)
图像描述生成 (Generating Image Descriptions)
4.LSTM网络
LSTM(Long Short Term Memory)与GRU类似,目前非常流行,是一种改进的RNN 网络。它与一般的RNNs结构本质上并没有什么不同,只是使用了不同的函数去计算隐藏层的状态。
在 LSTM 中 ,i 结构被称为 cells ,可以把 cells 看作是黑盒用以保存当前输入xt之前的保存的状态ht−1,这些 cells 更加一定的条件决定哪些 cell 抑制哪些 cell 兴奋 ,它们结合前面的状态 、当前的记忆与当前的输入。已经证明 该网络结构在对长序列依赖问题中非常有效 。
领取专属 10元无门槛券
私享最新 技术干货