本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 前馈神经网络的缺点
对于输入向量中个分量的位置信息不感知,也即无法利用序列型输入特征向量中的位置信息(将个分量调换顺序最后训练出的模型是等价的),但是在实际的任务中,各分量是有先后关系的。例如,我们在理解一段文本时,孤立地理解每个字或者词是不够的,还要将它们作为一个整体的序列来理解。
2. 循环神经网络RNN
2.1. RNN的基本结构与数学定义
RNN的输入数据,一般有三个维度:batch大小,时间长度,特征维数。TensorFlow中的RNN层API的输入数据shape为[batch, timesteps, feature]。因为本节的图片来自Andrew NG的Coursera公开课中的例子,因此这里的RNN输入数据形状将以Andrew NG的习惯为例,这不影响原理的讲解。输入层的维数是,其中是每个训练样本的维数;是一个batch的大小;是输入序列的长度。
输出层的维数是,其中是输出预测向量的维数;是一个batch的大小;是输出序列的长度。
我们先研究输入向量和输出向量相等,即的情况,结构图如下所示(图片来源www.coursera.org/learn/nlp-s…
上下标说明举例:表示第2个训练样本,第3层,第4个时刻,激活函数输出向量的第5维。
每个RNN-Cell的内部结构见下图
注意,输出是状态向量经过线性变换再经过softmax变换得到的。
需要注意的是,在不同的RNN-Cell中,上述公式里面的参数都是共享的。
2.2. 输入输出长度的讨论
2.2.1.
第一种情况是输入输出长度相等的情况,如下图所示(图片来源www.jianshu.com/p/c5723c3bb…)
常用于序列标注模型,例如命名实体识别模型中。
2.2.2.
第二种情况是输入长度为N,输出长度为1(图片来源www.jianshu.com/p/c5723c3bb…)
模型只在最后一个时刻输出,常用于文本分类模型 利用RNN网络预测sin函数的代码例子:github.com/lankuohsing…
2.2.3.
第三种情况是输入长度为1,输出长度为N。uti实现时,可以将输入作为最开始时刻的输入,也可以作为所有时刻的输入(图片来源www.jianshu.com/p/c5723c3bb…)
常用于文字生成模型中。
2.2.4. ,Encoder-Decoder模型
第四种情况是输入长度为N,输出长度为M的情况,也即Encoder-Decoder模型(图片来源www.jianshu.com/p/c5723c3bb…)
常用于语音识别、机器翻译等场景。在后面的章节中我们会详细介绍Encoder-Decoder模型