NLP 中的 attention 机制

阅读数:866 2019 年 9 月 26 日 18:50

NLP中的attention机制

NLP中的attention机制

本篇介绍在 NLP 中各项任务及模型中引入相当广泛的 Attention 机制。在 Transformer 中,最重要的特点也是 Attention。首先详细介绍其由来,然后具体介绍了其编解码结构的引入和原理,最后总结了 Attention 机制的本质。

1 注意力机制的由来

在深度学习领域,注意力机制模仿的是人类认知的过程。当人看到如下“美女伤心流泪”图时,细细想一下,人在做出图片中美女是在伤心流泪的过程,应该是先整体扫描该图片;然后将视觉注意力集中到美女的脸部;集中到脸部之后,再进一步将视觉注意力集中到眼睛部位。最后发现了眼泪,得出美女是在伤心流泪的结论。
NLP中的attention机制
人类在对信息进行处理的过程中,注意力不是平均分散的,而是有重点的分布。受此启发,做计算机视觉的朋友,开始在视觉处理过程中加入注意力机制 (Attention)。随后,做自然语言处理的朋友们,也开始引入这个机制。在 NLP 的很多任务中,加入注意力机制后,都取得了非常好的效果。

那么,在 NLP 中,Attention 机制是什么呢?从直觉上来说,与人类的注意力分配过程类似,就是在信息处理过程中,对不同的内容分配不同的注意力权重。下面我们详细看看,在自然语言处理中,注意力机制是怎么实现的。

2 seq2seq 结构及其中的 Attention

NLP中的attention机制
如上图所示,是标准的编解码 (seq2seq) 机制的结构图,在机器翻译、生成式聊天机器人、文本摘要等任务中均有应用。其处理流程是通过编码器对输入序列进行编码,生成一个中间的语义编码向量 C,然后在解码器中,对语义编码向量 C 进行解码,得到想要的输出。例如,在中英文翻译的任务中,编码器的输入是中文序列,解码器的输出就是翻译出来的英文序列。

可以看出,这个结构很 " 干净 ",对于解码器来说,在解码出 y1,y2,y3 时,语义编码向量均是固定的。我们来分析下这样是否合理。

假设输入的是 " 小明 / 喜欢 / 小红 ",则翻译结果应该是 "XiaoMing likes XiaoHong"。根据上述架构,在解码得到 "XiaoMing",“likes”," XiaoHong" 时,引入的语义编码向量是相同的,也就是 " 小明 ",“喜欢”,“小红 " 在翻译时对得到 "XiaoMing”,“likes”," XiaoHong" 的作用是相同的。这显然不合理,在解码得到 "XiaoMing" 时," 小明 " 的作用应该最大才对。

鉴于此,机智的 NLP 研究者们,认为应该在编解码器之间加入一种对齐机制,也就是在解码 "XiaoMing" 时应该对齐到 " 小明 "。在《Neural Machine Translation By Jointly Learning To Align And Translate》中首次将这种对齐机制引入到机器翻译中。我们来看看,这是怎样的一种对齐机制。

我们先回顾一下刚才的编解码结构,其语义编码向量和解码器状态,通过如下的公式得到:
NLP中的attention机制
通常在解码时语义编码向量是固定的。若要实现对齐机制,在解码时语义编码向量应该随着输入动态的变化。鉴于此,《Neural Machine Translation By Jointly Learning To Align And Translate》提出来一种对齐机制,也就是 Attention 机制。
NLP中的attention机制
如上图示,论文中采用双向 RNN 来进行语义的编码,这不是重点,我们先不关注。其对齐机制整体思想是:编码时,记下来每一个时刻的 RNN 编码输出 (h1,h2,h3,…hn);解码时,根据前一时刻的解码状态,即 yi-1,计算出来一组权重 (a1,a2,…an),这组权重决定了在当前的解码时刻,(h1,h2,h3,…hn) 分别对解码的贡献。这样就实现了,编解码的对齐。

下面我们用数学语言描述一下上面的过程。

首先,进行编码计算 (h1,h2,…hn),i 时刻的编码状态计算公式如下:
NLP中的attention机制
然后,开始解码,加入此时在解码的 i 时刻,则需要计算 i 时刻的编码向量 Ci,通过如下的公式计算:

NLP中的attention机制

aij 是对不同时刻的编码状态取的权重值。由此可见,i 时刻的语义编码向量由不同时刻的编码状态加权求和得到。

下面看看,如何取得权重向量 a:

NLP中的attention机制

权重向量 ai 通过加入解码器前一个时刻的状态进行计算得到。eij 表示,在计算 Ci 时,hj 的绝对权重。通过对其使用 softmax 函数,得到 aij。aij 就是在计算 Ci 时,hj 编码状态的权重值。

得到权重向量 ai 及语义编码向量 Ci 后,就可以计算当前时刻的解码状态了:
NLP中的attention机制
这就是编解码机制中注意力机制的基本内容了,本质上就是为了实现编解码之间的对齐,在解码时根据前一时刻的解码状态,获取不同时刻编码状态的权重值并加权求和,进而获得该时刻语义编码向量。

那么,抽离编解码机制,Attention 机制的本质是什么呢?我们下面来看看。

3 Attention 机制的本质

我们回想一下,引入 Attention 机制的本意,是为了在信息处理的时候,恰当的分配好”注意力“资源。那么,要分配好注意力资源,就需要给每个资源以不同的权重,Attention 机制就是计算权重的过程。

如下图所示,
NLP中的attention机制
如上图所示,我们由资源 Value,需要根据当前系统的其他状态 Key 和 Querry 来计算权重用以分配资源 Value。

也就是,可以用如下的数学公式来描述 Attention 机制:
NLP中的attention机制

F 函数可以有很多,在 transformer 中用的是点积。

总结

Transformer 中最重要的特点就是引入了 Attention,其对于 Transformer 性能的重要性我们下一篇介绍。总的来说,Adttention 机制是一种对齐机制,它通过对系统当前的某些状态进行评估,来对系统资源进行权重分配,实现对齐,具体可以看机器翻译的例子。

作者介绍

小 Dream 哥,公众号“有三 AI”作者。该公号聚焦于让大家能够系统性地完成 AI 各个领域所需的专业知识的学习。

原文链接

https://mp.weixin.qq.com/s/kn4zYDCCkzBfnL1AP6g8RA

评论

发布
用户头像
Attention应该全文统译为注意力,第一次出现的地方用括号标注attention就好了,多处不统一,不好哦。
2019 年 09 月 28 日 02:46
回复
没有更多了