attention机制_FlyAI小课堂:注意力机制(Attention)

f2ec10890ee6f1d7e38c5805e882413c.png

aa83e1114d6367ad247b13f23a24a6e1.png

一句话简介:九几年提出的概念,2014年在视觉领域火了以后,逐步引入NLP中,2017年的《Attention is all you need》引爆改结构,初步思想也很简单,就是提高某个区域的权重系数,有Local Attention Model、Global Attention Model和self-attention几种形式。支持并行化运算,尤其是self-attention 获取能力有RNN的精度和CNN的速度。

在开始学习之前推荐大家可以多在FlyAI竞赛服务平台多参加训练和竞赛,以此来提升自己的能力。FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台。每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。

目录

  1. Attention介绍
  2. Attention原理
  3. Attention的其他应用
  4. 代码尝试

一、Attention介绍

1.1 背景

Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是2014年google mind团队的这篇论文《Recurrent Models of Visual Attention》,他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是第一个将attention机制应用到NLP领域中。接着attention机制被广泛应用在基于RNN/CNN等神经网络模型的各种NLP任务中。2017年,google机器翻译团队发表的《Attention is all you need》中大量使用了自注意力(self-attention)机制来学习文本表示。自注意力机制也成为了大家近期的研究热点,并在各种NLP任务上进行探索。下图为attention研究进展的大概趋势。

44e6c17e1dd7a3f4c48ad85f077f9d0a.png

1.2 引入的原因

  1. 计算能力的限制:当要记住很多"信息",模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
  2. 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离以来问题,信息"记忆"能力并不高。

再举个例子来说,当我们观赏一幅画时,虽然我们可以看到整幅画的全貌,但是在我们深入仔细地观察时,其实眼睛聚焦的就只有很小的一块,这个时候人的大脑主要关注在这一小块图案上,也就是说这个时候人脑对整幅图的关注并不是均衡的,是有一定的权重区分的。这就是深度学习里的Attention Model的核心思想。

1.3 NLP中的应用

如下图所示,机器翻译主要使用的是Encoder-Decoder模型,在Encoder-Decoder模型的基础上引入了AM,取得了不错的效果:

9942e274c1950e84e2277b062cf6c954.png

二、Attention原理

斯坦福大学的一篇paper"Effective Approaches to Attention-based Neural Machine Translation"提出了一个混合Soft AM 和Hard AM的模型,论文中,他们提出了两种模型:Global Attention Model和Local Attention Model。Global Attention Model其实就是Soft Attention Model,Local Attention Model本质上是Soft AM和 Hard AM的一个混合。一般首先预估一个对齐位置Pt,然后在Pt左右大小为D的窗口范围来取类似于Soft AM的概率分布。

f3c248c6cb1e9a48f8ea52863f94c9f2.png

2.1 没有attention的模型

8171d7001a2a668f80ee05d74e339223.png

51dcdc39e112250e68c34c39062a0516.png

其中f是Decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,它们使用的输入句子Source的语义编码C都是一样的,没有任何区别。

而语义编码C是由句子Source的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子Source中任意单词对生成某个目标单词yi来说影响力都是相同的,这是为何说这个模型没有体现出注意力的缘由。这类似于人类看到眼前的画面,但是眼中却没有注意焦点一样。

如果拿机器翻译来解释这个分心模型的Encoder-Decoder框架更好理解,比如输入的是英文句子:Tom chase Jerry,Encoder-Decoder框架逐步生成中文单词:"汤姆","追逐","杰瑞"。

在翻译"杰瑞"这个中文单词的时候,分心模型里面的每个英文单词对于翻译目标单词"杰瑞"贡献是相同的,很明显这里不太合理,显然"Jerry"对于翻译成"杰瑞"更重要,但是分心模型是无法体现这一点的,这就是为何说它没有引入注意力的原因。

2.2 Soft Attention Model(Global attention):

2.2.1 引入Attention

1a692b44b672080342e5566a4fe92607.png

8a7027e7b827a71d18fe39e0821e2a6a.png

而每个Ci可能对应着不同的源语句子单词的注意力分配概率分布,比如对于上面的英汉翻译来说,其对应的信息可能如下:

0e4f1924c0062783840fdafb086c65fc.png

其中,f2函数代表Encoder对输入英文单词的某种变换函数,比如若Encoder是用的RNN模型的话,这个f2函数的结果往往是某个时刻输入xi后隐层节点的状态值;g代表Encoder根据单词的中间表示合成整个句子中间语义表示的变换函数,一般的做法中,g函数就是对构成元素加权求和,即下列公式:

6e9e3e3dc10aaef6dd448cce59e27208.png

其中,Lx代表输入句子Source的长度,aij代表在Target输出第i个单词时Source输入句子中第j个单词的注意力分配系数,而hj则是Source输入句子中第j个单词的语义编码。假设下标i就是上面例子所说的" 汤姆" ,那么Lx就是3,h1=f("Tom"),h2=f("Chase"),h3=f("Jerry")分别是输入句子每个单词的语义编码,对应的注意力模型权值则分别是0.6,0.2,0.2。

2.2.2 Attention机制的本质思想

40f29c6b51720659d5d9d4be110fa4be.png

Attention机制:将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成,此时给定Target中的某个元素Query,通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:

78ee046875ca163cc140aa2f3a384924.png

其中,Lx=||Source||代表Source的长度,公式含义即如上所述。上文所举的机器翻译的例子里,因为在计算Attention的过程中,Source中的Key和Value合二为一,指向的是同一个东西,也即输入句子中每个单词对应的语义编码,所以可能不容易看出这种能够体现本质思想的结构。

当然,从概念上理解,把Attention仍然理解为从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息,这种思路仍然成立。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

aab9bfc692e840876aaa425aebf96b17.png

第一个阶段,可以引入不同的函数和计算机制,根据Query和某个,计算两者的相似性或者相关性,最常见的方法包括:求两者的向量点积、求两者的向量Cosine相似性或者通过再引入额外的神经网络来求值,即如下方式:

98f51fcf72e19f5252700bb5a54a9763.png

第二阶段引入类似SoftMax的计算方式对第一阶段的得分进行数值转换,一方面可以进行归一化,将原始计算分值整理成所有元素权重之和为1的概率分布;另一方面也可以通过SoftMax的内在机制更加突出重要元素的权重。即一般采用如下公式计算:

f97ecfa9f13f0ece2a49e2979ac646c6.png

第三阶段加权求和即可得到Attention数值

a8524441b40cb594e5bf74250526e3de.png

一个图来表示下三个的全过程,如下所示:

be5683c87d1eacb06cb06e6c2ccf8664.png

总的来说,使用矩阵形式,可以表示成如下:

0db958d245140ebe782e380e011871b3.png

事实上q,k,v分别是query,key,value的简写,K,V是一一对应的,它们就像是key-value的关系,那么上式的意思就是通过qt这个query,通过与各个ks内积的并softmax的方式,来得到qt与各个Vs的相似度,然后加权求和,得到一个dv维的向量。其中因子起到调节作用,使得内积不至于太大(点积计算得到的内积会太大,这样会导致softmax的结果非0即1)。

2.3 Local attention

​ 每一次生成目标单词(target word)都分析source sentence中所有单词的做法代价太高,也许也是没有必要的。为了缓解这个问题,[Luong et at.][2]论文中建议只集中关注一个固定大小2D+1窗口中的source sentence 的注释(annotation),即只关注最能帮助预测下一个词汇的source sentence中某个词汇前后step的隐藏状态(hidden state):

d7fca96600466b3b6b355ab1f5230055.png

其中,D由用户自定义

fdedd76656ec1ac5a8a086dbb376c593.png

权重也发生变化:

f32be948dccee8fc9a6526d37622a150.png

local attention可以看成是alignment权重与一个截断高斯分布相乘后的global attention(窗口外的annotation取值为0)。local attention的示意图如下所示:

2.4 self-attention

Self Attention也经常被称为intra Attention(内部Attention),最近一年也获得了比较广泛的使用,比如Google最新的机器翻译模型内部大量采用了Self Attention模型。

Self Attention顾名思义,指的不是Target和Source之间的Attention机制,而是Source内部元素之间或者Target内部元素之间发生的Attention机制,也可以理解为Target=Source这种特殊情况下的注意力计算机制。

2.4.1 计算流程

通过线性变换得到为查询向量序列,键向量序列和值向量序列:

af10633f55b383d8630727bd28c140c4.png

上面的公式可以看出,self-Attention中的Q是对自身(self)输入的变换,而在传统的Attention中,Q来自于外部。

df720546f9284a295482c51194e30ae9.png

2.4.2 作用

很明显,引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。另外其优点如下:

1) 可以并行化处理,在计算self-Attention是不依赖于其他结果的。

2)计算复杂度低,self-Attention的计算复杂度是,而RNN是,在这里n是指序列的长度,d是指词向量的维 3)self-Attention可以很好的捕获全局信息,无论词的位置在哪,词之间的距离都是1,因为计算词之间的关系时是不依赖于其他词的。在大量的文献中表明,self-Attention的长距离信息捕捉能力和RNN相当,远远超过CNN(CNN主要是捕捉局部信息,当然可以通过增加深度来增大感受野,但实验表明即使感受野能涵盖整个句子,也无法较好的捕捉长距离的信息)。

2.4.3 self attention的层次模型

下面图片展示了一个实际应用self attention的层次模型,其中self attention在两个层次起作用:单词层次和句子层次。这样做的理由有两个:如何自然语言的层次结构,词汇组成语句,语句组成文本;第二,这样使得模型可以学习到句子中需要重点关注的词和文本中需要重点关注的句子。由于各个sentence的attentonal coefficient不同,各个句子下的各单词的attentional coefficients可以是不同的,这使得一个句子中某个单词的十分重要,到了另一个句子中这个单词就变的不那么重要了。

d246dfd963c2a50eddd8b9037718cd61.png

三、Attention的其他应用

3.1 图片描述(Image-Caption)

图片描述(Image-Caption)是一种典型的图文结合的深度学习应用,输入一张图片,人工智能系统输出一句描述句子,语义等价地描述图片所示内容。很明显这种应用场景也可以使用Encoder-Decoder框架来解决任务目标,此时Encoder输入部分是一张图片,一般会用CNN来对图片进行特征抽取,Decoder部分使用RNN或者LSTM来输出自然语言句子。

此时如果加入Attention机制能够明显改善系统输出效果,Attention模型在这里起到了类似人类视觉选择性注意的机制,在输出某个实体单词的时候会将注意力焦点聚焦在图片中相应的区域上。图14给出了根据给定图片生成句子"A person is standing on a beach with a surfboard."过程时每个单词对应图片中的注意力聚焦区域。

7b4d37f7c6436270c56c739733332aef.png

3.2 语音文字识别

语音识别的任务目标是将语音流信号转换成文字,所以也是Encoder-Decoder的典型应用场景。Encoder部分的Source输入是语音流信号,Decoder部分输出语音对应的字符串流。

下图可视化地展示了在Encoder-Decoder框架中加入Attention机制后,当用户用语音说句子 how much would a woodchuck chuck 时,输入部分的声音特征信号和输出字符之间的注意力分配概率分布情况,颜色越深代表分配到的注意力概率越高。从图中可以看出,在这个场景下,Attention机制起到了将输出字符和输入语音信号进行对齐的功能。

4a6bddcf3d74d6c580fdf5713246b53b.png

参考文献

【1】Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. "Neural machine translation by jointly learning to align and translate." arXiv preprint arXiv:1409.0473 (2014).

【2】 Luong, Minh-Thang, Hieu Pham, and Christopher D. Manning. "Effective approaches to attention-based neural machine translation." arXiv preprint arXiv:1508.04025 (2015).

【3】注意力机制(Attention Mechanism)在自然语言处理中的应用 :

注意力机制(Attention Mechanism)在自然语言处理中的应用​www.cnblogs.com
42130dc73e95db1f1e15dce1b0050e5b.png

【4】目前主流的attention方法:

目前主流的attention方法都有哪些?​www.zhihu.com
fc54c473816b0019da452ed4f544637d.png

【5】nlp中的Attention注意力机制+Transformer详解:

JayLou娄杰:nlp中的Attention注意力机制+Transformer详解​zhuanlan.zhihu.com
bd82b294ea3caff340df9fa576fce2bc.png

更多精彩内容请访问FlyAI-AI竞赛服务平台;为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台;每周免费提供项目开源算法样例,支持算法能力变现以及快速的迭代算法模型。

挑战者,都在FlyAI!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值