Effective Approaches to Attention-based Neural Machine Translation(Global和Local attention)

这篇论文主要是提出了Global attention 和 Local attention

这个论文有一个译文,不过我没细看
Effective Approaches to Attention-based Neural Machine Translation 中英文对照翻译 - 一译的文章 - 知乎
https://zhuanlan.zhihu.com/p/38205832

看这个论文的时候我主要是从第三小节开始看起的,也就是 attention-based models

我们基于attention机制的模型大致上可以分为广泛的两类:一类就是全局attention,一类就是局部attention。这两类的区分点在于attention是基于原始句子的全部位置,还是原始句子中一部分位置。
在这篇论文中的attention,获得解码器在t时刻真正的隐层输出的过程是这样的:

\(\vec{h_{t}}=tanh(W_{c}[c_{t};h_{t}])\)

对于这个公式,需要注意的一点就是说\(\vec{h_{t}}\)对应的是解码器在t时刻真正的隐层的输出,也是下一个时刻t+1时刻的隐层输入之一;

\(h_{t}\)对应的则是t时刻的初始隐层输出。

这里有一个初始隐层输出\(h_{t}\),我们使用这个变量和编码器的所有时刻的隐层输出进行权重和的操作得到环境向量\(c_{t}\).

之前那个论文的操作是对解码器t-1时刻的隐层输出和编码器所有的隐层输出进行操作得到权重和,这个作为环境向量。(写到这里我产生了一个疑问,就是说对于解码器,它的输入对应的究竟有什么)

在这个论文中,解码器的输入包含上一层真正的隐层输出\(\vec{h_{t}}\)和上个单词

在之前那篇论文中,我现在的理解就是应该是有这上一个单词,上一层隐层,和上一层产生的环境向量,可以看一下相关的图片理解一下这个问题。

得到t时刻真正的隐层输出之后,我们想要得到预测出来的单词怎么做呢?

这篇论文中是这么操作的,对真正的隐层输出(这个隐层输出已经使用到了环境向量)加上一个softmax层,公式大概是这样的:
\(p(y_{t}|y_{<t},x)=softmax(W_{s}\vec{h_{t})}\)

接下来,会详细介绍一个全局attention和局部attention是如何产生环境向量\(c_{t}\)

对于全局attention,它是考虑所有的输入单词的,公式大概是这样的:
\(a_{t}(s) = align(h_{t},\vec{h_{s})}=\frac{exp(score(h_{t},\vec{h_{s}}))}{\sum_{s^{'}}exp(score(h_{t},\vec{h_{s}}))}\)

讲到这里,我们就知道现在最重要的就是,我们如何获得\(score(h_{t},\vec{h_{s}})\).

一般来说,我们有三种方式可以计算这个分式。
第一种 dot:
\(score(h_{t},\vec{h_{s}})=h_{t}^{T}\vec{h_{s}}\)

这个公式怎么理解呢?
\(\vec{h_{s}}\)表示为其中编码器的一个隐层状态,size应该是\([n_h,1],n_h\)代表的是隐层神经元的个数。然后\(h_{t}^{T}\)\(h_{t}\)在t时刻的解码器隐层的输出,注意这里是直接的隐层输出,而是我们上面说的真正的隐层输出。size是\([n_h,1]\)。两者dot,得到一个值。

第二种方式 general:
\(score(h_{t},\vec{h_{s}})=h_{t}^{T}W_{a}\vec{h_{s}}\)
对于这种,增加了一个参数\(W_{a}\)

第三种方式 concat:
\(score(h_{t},\vec{h_{s}})=v_{a}^{T}tanh(W_{a}[h_{t};\vec{h_{s}}])\)

这种方法就简单来讲就是单层的多层感知机

还有一种方式我们称之为 location-based:
\(a_{t} = softmax(W_{a}h_{t})\)。这个直接得到所有的权重了。注意这里是\(a_{t}\)不是\(a_{t}(s)\)

局部attention

作者在论文中说,自己提出来全局attention和局部attention是来源于soft和hard attention,soft和hard attention是从图片领域扩展过来的概念。

局部attention原理是把注意力放在一个小窗口内的句子内容,而不是全部内容。这个局部内容是这样获取的。首先模型为每一个目标时刻单词产生一个对齐位置\(p_{t}\),然后我们找到一个窗口区间[p_{t}-D,p_{t}+D];D靠经验获得,在这个区间内容的内容产生我们的环境向量。
在局部attention下,我们有两种模式。
第一种就是Monotonic(中文叫做无变化的)的对齐模型,local-m,我们简简单单的就令\(p_{t}=t\),这个公式的意思就是我们认为目标单词和我们的元单词是一一对应的。

另一种就是Predictive对齐模型(local-p),我们使用下面的公式预测\(p_{t}\):

\(p_{t}=S*sigmoid(v_{p}^{T}tanh(W_{p}h_{t}))\)

\(W_{p}\)\(v_{p}\)属于模型参数,是会在训练过程中被学习更新的。\(S\)代表的是原始句子长度。sigmoid之后,\(p_{t}\)的范围是\([0,S]\)

为了让我们的对齐点更加的接近\(p_{t}\),我们以\(p_{t}\)为中心点,加上了一个高斯分布,标准差\(\sigma=\frac{D}{2}\):

\(a_t(s)=align(h_{t},\vec{h_{s}})exp(-\frac{(s-p_{t}^2)}{2\sigma^2})\)

要注意\(p_{t}\)是一个真实的值,\(s\)是处于窗口空间的整数

参考1 写的不错

posted @ 2019-03-14 21:22  DUDUDA  阅读(1461)  评论(3编辑  收藏  举报