Sequence to sequence入门详解:从RNN, LSTM到Encoder-Decoder, Attention, transformer(一)

367 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 前馈神经网络的缺点

对于输入向量中个分量的位置信息不感知,也即无法利用序列型输入特征向量中的位置信息(将个分量调换顺序最后训练出的模型是等价的),但是在实际的任务中,各分量是有先后关系的。例如,我们在理解一段文本时,孤立地理解每个字或者词是不够的,还要将它们作为一个整体的序列来理解。

2. 循环神经网络RNN

2.1. RNN的基本结构与数学定义

RNN的输入数据,一般有三个维度:batch大小,时间长度,特征维数。TensorFlow中的RNN层API的输入数据shape为[batch, timesteps, feature]。因为本节的图片来自Andrew NG的Coursera公开课中的例子,因此这里的RNN输入数据形状将以Andrew NG的习惯为例,这不影响原理的讲解。输入层的维数是(nx,m,Tx)(n_x,m,T_x),其中nxn_x是每个训练样本的维数;mm是一个batch的大小;TxT_x是输入序列的长度。

输出层的维数是(ny,m,Ty)(n_y,m,T_y),其中nyn_y是输出预测向量的维数;mm是一个batch的大小;TyT_y是输出序列的长度。

我们先研究输入向量和输出向量相等,即nx=nyn_x=n_y的情况,结构图如下所示(图片来源www.coursera.org/learn/nlp-s… 在这里插入图片描述

图2.1 RNN基本结构

上下标说明举例:a5(2)[3]<4>a_5^{(2)[3]<4>}表示第2个训练样本,第3层,第4个时刻,激活函数输出向量的第5维。 每个RNN-Cell的内部结构见下图 在这里插入图片描述

图2.2 RNN的一个基本单元

注意,输出y^\hat y是状态向量aa经过线性变换再经过softmax变换得到的。

at=tanh(Waxxt+Waaat1+ba)y^t=softmax(Wyaat+by)(2-1)\begin{aligned} a^{\langle t\rangle}&=tanh\left(W_{ax}x^{\langle t\rangle}+W_{aa}a^{\langle t-1\rangle}+b_a\right)\\ \hat y^{\langle t\rangle}&=softmax\left(W_{ya}a^{\langle t\rangle}+b_y\right)\\ \tag{2-1} \end{aligned}

需要注意的是,在不同的RNN-Cell中,上述公式里面的参数W,bW,b都是共享的。

2.2. 输入输出长度的讨论

2.2.1. nx=ny=nn_x=n_y=n

第一种情况是输入输出长度相等的情况,如下图所示(图片来源www.jianshu.com/p/c5723c3bb…在这里插入图片描述

图2.3 RNN-输入输出长度相等

常用于序列标注模型,例如命名实体识别模型中。

2.2.2. nx=n,ny=1n_x=n,n_y=1

第二种情况是输入长度为N,输出长度为1(图片来源www.jianshu.com/p/c5723c3bb…在这里插入图片描述

图2.4 RNN-输出长度为1

模型只在最后一个时刻输出,常用于文本分类模型 利用RNN网络预测sin函数的代码例子:github.com/lankuohsing…

2.2.3. nx=1,ny=nn_x=1,n_y=n

第三种情况是输入长度为1,输出长度为N。uti实现时,可以将输入作为最开始时刻的输入,也可以作为所有时刻的输入(图片来源www.jianshu.com/p/c5723c3bb…在这里插入图片描述

图2.5 RNN-输入长度为1

在这里插入图片描述

图2.6 RNN-输入长度为1(输入特征在所有时刻重复使用)

常用于文字生成模型中。

2.2.4. nx=n,ny=mn_x=n,n_y=m,Encoder-Decoder模型

第四种情况是输入长度为N,输出长度为M的情况,也即Encoder-Decoder模型(图片来源www.jianshu.com/p/c5723c3bb…在这里插入图片描述

图2.7 Encoder-Decoder模型,输入输出长度为一般情况的RNN

常用于语音识别、机器翻译等场景。在后面的章节中我们会详细介绍Encoder-Decoder模型