对Neural Machine Translation by Jointly Learning to Align and Translate论文的详解

读论文 Neural Machine Translation by Jointly Learning to Align and Translate网络

这个论文是在NLP中第一个使用attention机制的论文。他们把attention机制用到了神经网络机器翻译(NMT)上。NMT其实就是一个典型的sequence to sequence模型,也就是一个encoder to decoder模型,传统的NMT使用两个RNN,一个RNN对源语言进行编码,将源语言编码到一个固定维度的中间向量,而后在使用一个RNN进行解码翻译到目标语言。函数

直接来看这个模型学习

$c_{i} = \sum_{j=1}^{T_{x}}\alpha_{i,j}h_{j}$编码

$\alpha_{i,j} = \frac{exp(e_{i,j})}{\sum_{k=1}^{T_{x}}exp(e_{i,k})}$.net

$e_{ij} = a(s_{i-1},h_{j})$翻译

咱们使用一个前馈神经网络来对对齐网络模型$a$进行参数化。(在这里有一个知识点须要取了解什么是前馈神经网络)。对于这个前馈神经网络模型,是总体模型的一部分,因此参数会随着总体模型的其余部分异同进行训练更新,而不是单独把这个模型拿出来训练。code

值得注意的是这个对齐模型并非一个隐变量(什么是隐变量在这里有一个解释。这个对齐模型是一个软对齐模型,容许损失函数的梯度进行反向传播并更新(这里我并无看懂,为啥软对齐模型能够达到这个效果)。换句话讲,这个对齐模型能够和整个翻译模型一块儿进行训练更新。blog

咱们把计算隐层状态权重和的过程能够理解为一个求指望隐层状态表达的过程。 咱们能够把$\alpha_{i,j}或者是说与它相关$当作是一个几率。这个几率的含义就是目标单词$y_{i}$和源单词$x_{j}$对齐的几率。或者说,目标单词$y_{i}$是从源单词$x_{j}$翻译过来的几率带下。而后对于目标单词$y_{i}$来讲的,它的环境向量$c_{i}$是一个指望中的表达,这个表达是基于annotations(这里指的是全部的隐层状态)和相对应的$\alpha_{ij}$的结合计算。get

$\alpha_{i,j}$或者$e_{i,j}$反应出的是$h_{j}$和上一层隐层状态$s_{i-1}$对于下一个隐层状态$s_{i}$和下一个单元输出$y_{i}$io

解码器应用这个attention机制,从而决定在原始句子中的哪一个部分须要花费更多的注意力。经过使用这个机制,编码器消除了一个负担,这个负担就是不得不把全部的原始句子信息通过神经网络由一个固定长度的向量表达。其实用了这个机制,长度也是固定的,只不过对于如今这个机制,这个向量会针对不一样的目标单词有着不一样的环境向量。

我本身有一个思考,在整个模型训练完成以后,咱们获得的应该是一个权重矩阵C。为何这么说呢,由于针对每一个目标单词,咱们都有一行的权重(其中这一行的每个权重值表明的是输入句子中的每一个单词的重要程度)。

对于这个权重矩阵$C_{i}$是权重矩阵的一行,表示对于目标单词$y_{i}$输入句子每一个单词对应的重要程度。

对于$\alpha_{i.j}$,它表示的是一个单词的重要程度,是$C_{i}$中的一个具体单词的重要程度。

如今我本身有一种感受,就是说,这个权重矩阵,学习的重要程度,从如今我直观感觉来讲,它是一种两种翻译语言的语法关系。是输入句子一个位置对输出句子中的一个位置的影响程度,这个并无体现出意思之间的对应的关系。

咱们使用的是只有一层的多层感知机来计算$a(s_{i-1},h_{j})=v_{a}^Ttanh(W_{a}s_{i-1}+U_{a}h_{j}$

(其实这里并无搞清楚为啥是一个多层感知机模式。多层感知机实际上是一个最简单的神经网络模型,若是看作是一个多层感知机,那么输入是$s_{i-1}$和$h_{j}$,怎么会有两个输入呢?)

在原始论文中,做者说$U_{a}h_{j}$并无依赖于$i$,那么咱们能够提早将这个东西算出来减小计算消耗。(那么这一步提早算出来是怎么实现的呢?)

相关文章
相关标签/搜索