流浪的RNN-使用CNN完成机器翻译

作者: l1n3x | 来源:发表于2019-03-21 16:01 被阅读41次

Attention Is All You Need-谷歌的"自注意力"中提到了为什么不在NLP中的原因。今天再分析一下由facebook提出采用卷积完成的seq2seq模型。这篇论文早于google的attention模型,其证明了CNN在NLP领域也能有较好的效果。

基本卷积结构

由于是对自然语言进行处理,因此模型的卷积与普通的图像卷积模型有一点点不同。从形式上看,更像是一维卷积,即卷积核只在句子的方向移动。这种卷积形式最早应该是[1]中提出。卷积的过程如图:

文本卷积

这里假设词向量为d_{model},则卷积的核大小为[k, d_{model}]即卷积核的宽度始终等于词向量的维度,k为卷积窗口一次覆盖的词语个数。设卷积核个数为d_{out},输入X \in R^{m \times n}。则卷积操作:
Conv(X).shape = [m, d\_{out}]
此外,论文中还使用了一种新的非线性单元GLU(gated linear units)[2],其方法是
v(X) = Conv_1(X) \cdot sigmoid(Conv_2(X))
\cdot表示逐个元素相乘。将输入进行两次不共享参数的卷积,其中一个输出通过sigmoid函数作为另一个输入的gate,这里类似于LSTMgate机制,因此叫做gated linear units。在[2]中已经证明了这种非线性机制在NLP任务中要优于其他的激活函数。

总体结构

conv seq2seq

总体结构还是sequence to sequence。source 和 target都会先被编码,然后做attention。Attention输出再加上decoder输出用来做预测,不过这里编码的模型从RNN变为了CNN。但是从细节上来看,这里仍然有一些不同于传统RNN语言模型的东西:

残差连接

文中提到为了使得模型能够堆叠的更深使用了残差连接。对于decoder来说也就是:
h_{i}^{l}=v\left(W^{l}\left[h_{i-k / 2}^{l-1}, \ldots, h_{i+k / 2}^{l-1}\right]+b_{w}^{l}\right)+h_{i}^{l-1}
其中h^l为decoder第l层的输出。
p\left(y_{i+1} | y_{1}, \dots, y_{i}, \mathbf{x}\right)=\operatorname{softmax}\left(W_{o} h_{i}^{L}+b_{o}\right) \in \mathbb{R}^{T}

Multi-step Attention

这也论文对attention机制的一个改变,RNN中只会对decoder与encoder做一次attention。这里可以分解为3个步骤:

  1. 首先并不直接使用encoder state与decoder state计算attention,而是先对decoder state做一个变换再加上target的embeding:
    d_{i}^{l}=W_{d}^{l} h_{i}^{l}+b_{d}^{l}+g_{i}
    这里的g_i也就是target的embeding。前面做变换是为了使得卷积输出维度变换与embedding一致。
  2. 然后进行attention:
    a_{i j}^{l}=\frac{\exp \left(d_{i}^{l} \cdot z_{j}^{u}\right)}{\sum_{t=1}^{m} \exp \left(d_{i}^{l} \cdot z_{t}^{u}\right)}
    这里做了一个点乘attention,u是encoder堆叠的层数。z_{u}也就是encoder最后一层的输出。
  3. 计算出attention权重后,基于z^{u}计算attention输出:
    c_{i}^{l}=\sum_{j=1}^{m} a_{i j}^{l}\left(z_{j}^{u}+e_{j}\right)
    这里计算attention输出的时候也并不是直接基于z^u还加上了source的embedding e_j。这和传统的attention有一点差别。论文中给出的解释是:

Encoder outputs z_j^u represent potentially large input contexts and e_j provides point information about a specific input element that is useful when making a prediction

当计算出c^l后,会直接与h^l相加,作为下一层的输入。这也就是Multi-step Attention。

  1. 最终的预测方式为:
    p\left(y_{i+1} | y_{1}, \ldots, y_{i}, \mathbf{x}\right)=\operatorname{softmax}\left(W_{o} h_{i}^{L}+b_{o}\right) \in \mathbb{R}^{T}

一点分析

论文中提到通过不断堆叠CNN层的方式同样可以capture long-range dependencies compared to the chain structure modeled by recurrent networks。而在Attention Is All You Need中的解决办法更为直接,既然要capture long-range dependencies,直接进行attention就对了。这样根本就不存在long-range dependencies,每个单词之间的依赖都变得shorter。

参考

[1] Convolutional Neural Networks for Sentence Classification
[2] Language modeling with gated linear units

相关文章

网友评论

    本文标题:流浪的RNN-使用CNN完成机器翻译

    本文链接:https://www.haomeiwen.com/subject/dafxvqtx.html