Motivation
传统方法使用bi-LSTMs来做encoder,受限于RNN的时序关系,而使用CNN可以直接编码整个句子,能够大幅提升速度
RNN NMT
传统的基于RNN的解码器,使用前一个隐状态$s_{i}$,上一个输出词$y_{i}$的embedding$g_{i}$,以及位置上下文$c_{i}$来计算下一个隐状态$s_{i+1}$(通常是将$c_{i}$与$g_{i}$连接起来输入当前节点)
给出第i+1层的输出$h_{i+1}$,通过一个Linear层得到所有可能的输出词的概率分布如下
$c_{i}$使用attention计算如下
出于效率考虑一般使用点积attention函数
Non-recurrent Encoders
Pooling Encoder
源端句子编码$e_{j}$由词向量$w_{j}$和位置向量$l_{j}$决定
Convolutional Encoder
卷积层每层使用残差连接,然后经过非线性激活函数
使用两个CNN,左边的CNN-a用于生成z以计算attention weights,右边的CNN-c用于生成最后的c
Results
其中Deep Convolutional m/k表示核函数size为k的m层CNN