24

NLP 中的 attention 机制

 4 years ago
source link: https://www.tuicool.com/articles/3mqu2iI
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

ame2uaM.jpg!web

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

1 注意力机制的由来

在深度学习领域,注意力机制模仿的是人类认知的过程。当人看到如下“美女伤心流泪”图时,细细想一下,人在做出图片中美女是在伤心流泪的过程,应该是先整体扫描该图片;然后将视觉注意力集中到美女的脸部;集中到脸部之后,再进一步将视觉注意力集中到眼睛部位。最后发现了眼泪,得出美女是在伤心流泪的结论。

YvYBFzu.jpg!web

人类在对信息进行处理的过程中,注意力不是平均分散的,而是有重点的分布。受此启发,做计算机视觉的朋友,开始在视觉处理过程中加入注意力机制 (Attention)。随后,做自然语言处理的朋友们,也开始引入这个机制。在 NLP 的很多任务中,加入注意力机制后,都取得了非常好的效果。

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

2 seq2seq 结构及其中的 Attention

YNRfEfm.jpg!web 如上图所示,是标准的编解码 (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》中首次将这种对齐机制引入到机器翻译中。我们来看看,这是怎样的一种对齐机制。

我们先回顾一下刚才的编解码结构,其语义编码向量和解码器状态,通过如下的公式得到:

FFriqyV.jpg!web

通常在解码时语义编码向量是固定的。若要实现对齐机制,在解码时语义编码向量应该随着输入动态的变化。鉴于此,《Neural Machine Translation By Jointly Learning To Align And Translate》提出来一种对齐机制,也就是 Attention 机制。

bqQfmay.png!web

如上图示,论文中采用双向 RNN 来进行语义的编码,这不是重点,我们先不关注。其对齐机制整体思想是:编码时,记下来每一个时刻的 RNN 编码输出 (h1,h2,h3,…hn);解码时,根据前一时刻的解码状态,即 yi-1,计算出来一组权重 (a1,a2,…an),这组权重决定了在当前的解码时刻,(h1,h2,h3,…hn) 分别对解码的贡献。这样就实现了,编解码的对齐。

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

首先,进行编码计算 (h1,h2,…hn),i 时刻的编码状态计算公式如下:

然后,开始解码,加入此时在解码的 i 时刻,则需要计算 i 时刻的编码向量 Ci,通过如下的公式计算:

vEZfmyy.jpg!web

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

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

Uziq2em.jpg!web

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

得到权重向量 ai 及语义编码向量 Ci 后,就可以计算当前时刻的解码状态了:

Uziq2em.jpg!web

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

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

3 Attention 机制的本质

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

如下图所示,

A3Ab6rQ.jpg!web

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

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

AjaAfej.jpg!web

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

总结

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

作者介绍

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

原文链接

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


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK