attention机制_干货|全面了解attention机制

点击上方“AI遇见机器学习”,选择“星标”公众号

原创干货,第一时间送达

4746cda0e5376d2ac25871dbbabe3d3e.png

一、什么是Attention机制?

最近两年,注意力模型(Attention Model)被广泛使用在自然语言处理、图像识别及语音识别等各种不同类型的深度学习任务中,是深度学习技术中最值得关注与深入了解的核心技术之一。

当我们人在看一样东西的时候,我们当前时刻关注的一定是我们当前正在看的这样东西的某一地方,换句话说,当我们目光移到别处时,注意力随着目光的移动也在转移,这意味着,当人们注意到某个目标或某个场景时,该目标内部以及该场景内每一处空间位置上的注意力分布是不一样的。---------(思考:对于图片,会有些特别显眼的场景会率先吸引住注意力,那是因为脑袋中对这类东西很敏感。对于文本,我们大都是带目的性的去读,顺序查找,顺序读,但是在理解的过程中,我们是根据我们自带的目的去理解,去关注的。注意力模型应该与具体的目的(或者任务)相结合。)

从Attention的作用角度出发,我们就可以从两个角度来分类Attention种类:Spatial Attention 空间注意力(图片)和Temporal Attention 时间注意力(序列)。更具实际的应用,也可以将Attention分为Soft Attention和Hard Attention。Soft Attention是所有的数据都会注意,都会计算出相应的注意力权值,不会设置筛选条件。Hard Attention会在生成注意力权重后筛选掉一部分不符合条件的注意力,让它的注意力权值为0,即可以理解为不再注意这些不符合条件的部分。

二、Encoder-Decoder框架

encoder-decoder模型的想法很简单:对于RNN语言模型,在我们计算输出序列E的概率时,先另一个RNN处理源序列F,来计算语言模型的初始状态。encoder-decoder的含义是:通过第一个神经网络来“编码”F的信息到一个隐层状态,在使用第二个神经网络来预测E“解码”该隐层到输出序列。

模型结构如图

8673d47dfa63841c1834b5e579a930e9.png

ncoder层的处理单元是RNN(f),decoder层是RNN(e),对decoder层的输出采用softmax来获得时刻t输出该隐层的概率

三、Attention Model

Attention 思想

传统的Encoder-Decoder缺点是,无论之前的context有多长,包含多少信息量,最终都要被压缩成一个几百维的vector。这意味着context越大,最终的state vector会丢失越多的信息。

事实上,因为context在输入时已知,一个模型完全可以在decode的过程中利用context的全部信息,或者部分信息而不仅仅是最后一个state。

而Attention的思想,即在得到Encoder向量后,在进行Decoder的时候模型不仅会用到向量还会用到每个词对应的RNN隐层向量。这里多插入一句,Attention其实是一种思想,它可以有多种实现方式。

attention思想知识一种思想,有多种实现方式,有很多类别,比如soft和hard的区分(这两者的区分主要在于sotf得到attention的上下文Ci是通过加权和得到的,其中的比重最大可以看成是对齐的!而hard的attention的上下文C是固定的一个或者几个的encoder隐状态构成的,用分类表示是否选取莫个隐状态)。

Attention研究进展

e6d2e7d7fb8073965647c8dd861a3bb1.png

Attention机制最早是在视觉图像领域提出来的,应该是在九几年思想就提出来了,但是真正火起来应该算是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模型扩展开始应用到各种NLP任务中。最近,如何在CNN中使用attention机制也成为了大家的研究热点。下图表示了attention研究进展的大概趋势。

以上介绍的Encoder-Decoder模型是没有体现出“注意力模型”的,所以可以把它看作是注意力不集中的分心模型。为什么说它注意力不集中呢?请观察下目标句子Y中每个单词的生成过程如下:

e08bddf3d63920845370e1bcf0f4b28d.png

其中f是decoder的非线性变换函数。从这里可以看出,在生成目标句子的单词时,不论生成哪个单词,是y1,y2也好,还是y3也好,他们使用的句子X的语义编码C都是一样的,没有任何区别。而语义编码C是由句子X的每个单词经过Encoder 编码产生的,这意味着不论是生成哪个单词,y1,y2还是y3,其实句子X中任意单词对生成某个目标单词yi来说影响力都是相同的,没有任何区别(其实如果Encoder是RNN的话,理论上越是后输入的单词影响越大,并非等权的,估计这也是为何Google提出Sequence to Sequence模型时发现把输入句子逆序输入做翻译效果会更好的小Trick的原因)。这就是为何说这个模型没有体现出注意力的缘由。

引入AM模型,以翻译一个英语句子举例:输入X:Tom chase Jerry。理想输出:汤姆追逐杰瑞。

应该在翻译“杰瑞”的时候,体现出英文单词对于翻译当前中文单词不同的影响程度,比如给出类似下面一个概率分布值(权重):

(Tom,0.3)(Chase,0.2)(Jerry,0.5)

每个英文单词的概率代表了翻译当前单词“杰瑞”时,注意力分配模型分配给不同英文单词的注意力大小(即原始单词X对当前词的翻译的权重大小)。这对于正确翻译目标语单词肯定是有帮助的,因为引入了新的信息。同理,目标句子中的每个单词都应该学会其对应的源语句子中单词的注意力分配概率信息。这意味着在生成每个单词Yi的时候,原先都是相同的中间语义表示C会替换成根据当前生成单词而不断变化的Ci。理解AM模型的关键就是这里,即由固定的中间语义表示C换成了根据当前输出单词来调整成加入注意力模型的变化的Ci。

600b3e6be33d3fb234c3db061a793f62.png

即生成目标句子单词的过程成了下面的形式:

b91f7b513637aff88ee3fbae3be2db4e.png

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

cea561755d272c8940d7b9c1b6770639.png

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

8c83b6a1-4e2c-eb11-8da9-e4434bdf6706.svg

9083b6a1-4e2c-eb11-8da9-e4434bdf6706.svg

9483b6a1-4e2c-eb11-8da9-e4434bdf6706.svg

9783b6a1-4e2c-eb11-8da9-e4434bdf6706.svg 是一个softmax模型输出,概率值的和为1。9d83b6a1-4e2c-eb11-8da9-e4434bdf6706.svg 表示一个对齐模型,用于衡量encoder端的位置j个词,对于decoder端的位置i个词的对齐程度(影响程度),换句话说:decoder端生成位置i的词时,有多少程度受encoder端的位置j的词影响。对齐模型 9d83b6a1-4e2c-eb11-8da9-e4434bdf6706.svg 的计算方式有很多种,不同的计算方式,代表不同的Attention模型,最简单且最常用的的对齐模型是dot product乘积矩阵,即把target端的输出隐状态ht与source端的输出隐状态进行矩阵乘。常见的对齐计算方式如下:

a883b6a1-4e2c-eb11-8da9-e4434bdf6706.svg

其中, aa83b6a1-4e2c-eb11-8da9-e4434bdf6706.svg 表示源端与目标单单词对齐程度。可见,常见的对齐关系计算方式有,点乘(Dot product),权值网络映射(General)和concat映射几种方式。

85f4ee82c14ba0510986fe0d89897a0f.png

假设Ci中那个i就是上面的“汤姆”,那么Tx就是3,代表输入句子的长度,h1=f(“Tom”),h2=f(“Chase”),h3=f(“Jerry”),对应的注意力模型权值分别是0.6,0.2,0.2,所以g函数就是个加权求和函数。如果形象表示的话,翻译中文单词“汤姆”的时候,数学公式对应的中间语义表示Ci的形成过程类似下图:

b22ecea41842723bd2913b3f2e484bfa.png
图3 Ci的形成过程

这里还有一个问题:生成目标句子某个单词,比如“汤姆”的时候,你怎么知道AM模型所需要的输入句子单词注意力分配概率分布值呢?就是说“汤姆”对应的概率分布:

划重点(注意力权重获取的过程)(Tom,0.3)(Chase,0.2)(Jerry,0.5)是如何得到的呢?

为了便于说明,我们假设对图1的非AM模型的Encoder-Decoder框架进行细化,Encoder采用RNN模型,Decoder也采用RNN模型,这是比较常见的一种模型配置,则图1的图转换为下图:

fce82e79f8a1ffb7a5a89c6f02965978.png
图4 RNN作为具体模型的Encoder-Decoder框架

注意力分配概率分布值的通用计算过程:

33433ec199deded7f0677c7c4609ccf9.png
图5 AM注意力分配概率计算

对于采用RNN的Decoder来说,如果要生成 yi 单词,在时刻 i ,我们是可以知道在生成 Yi 之前的隐层节点i时刻的输出值 Hi 的,而我们的目的是要计算生成 Yi 时的输入句子单词“Tom”、“Chase”、“Jerry”对 Yi 来说的注意力分配概率分布,那么可以用i时刻的隐层节点状态 Hi 去一一和输入句子中每个单词对应的RNN隐层节点状态 hj 进行对比,即通过函数 F(hj,Hi) 来获得目标单词 Yi 和每个输入单词对应的对齐可能性,这个F函数在不同论文里可能会采取不同的方法,然后函数F的输出经过Softmax进行归一化就得到了符合概率分布取值区间的注意力分配概率分布数值(这就得到了注意力权重)。图5显示的是当输出单词为“汤姆”时刻对应的输入句子单词的对齐概率。绝大多数AM模型都是采取上述的计算框架来计算注意力分配概率分布信息,区别只是在F的定义上可能有所不同。

上述内容就是论文里面常常提到的Soft Attention Model(任何数据都会给一个权值,没有筛选条件)的基本思想,你能在文献里面看到的大多数AM模型基本就是这个模型,区别很可能只是把这个模型用来解决不同的应用问题。那么怎么理解AM模型的物理含义呢?一般文献里会把AM模型看作是单词对齐模型,这是非常有道理的。目标句子生成的每个单词对应输入句子单词的概率分布可以理解为输入句子单词和这个目标生成单词的对齐概率,这在机器翻译语境下是非常直观的:传统的统计机器翻译一般在做的过程中会专门有一个短语对齐的步骤,而注意力模型其实起的是相同的作用。在其他应用里面把AM模型理解成输入句子和目标句子单词之间的对齐概率也是很顺畅的想法。

75c7c898c99d2948d8e26ef9f1741080.png
图6 Google 神经网络机器翻译系统结构图

图6所示即为Google于2016年部署到线上的基于神经网络的机器翻译系统,相对传统模型翻译效果有大幅提升,翻译错误率降低了60%,其架构就是上文所述的加上Attention机制的Encoder-Decoder框架,主要区别无非是其Encoder和Decoder使用了8层叠加的LSTM模型。

当然,从概念上理解的话,把AM模型理解成影响力模型也是合理的,就是说生成目标单词的时候,输入句子每个单词对于生成这个单词有多大的影响程度。这种想法也是比较好理解AM模型物理意义的一种思维方式。

Rush用AM模型来做生成式摘要给出的一个AM的一个非常直观的例子。

ebc2045cd66b25085ca1d37158ea1f2a.png
图7 句子生成式摘要例子

这个例子中,Encoder-Decoder框架的输入句子X是:“russian defense minister ivanov called sunday for the creation of a joint front for combating global terrorism”。对应图中纵坐标的句子。系统生成的摘要句子Y是:“russia calls for joint front against terrorism”,对应图中横坐标的句子。可以看出模型已经把句子主体部分正确地抽出来了。矩阵中每一列代表生成的目标单词对应输入句子每个单词的AM分配概率,颜色越深代表分配到的概率越大。这个例子对于直观理解AM是很有帮助作用。

来源:知乎,浪大大链接:https://zhuanlan.zhihu.com/p/61816483

推荐阅读

干货|学术论文怎么写

资源|NLP书籍及课程推荐(附资料下载)

干货|全面理解N-Gram语言模型

资源|《Machine Learning for OpenCV》书籍推荐

e0e44e3512d35e46c2fa44f7eddc6394.png

欢迎关注我们,看通俗干货

58770736acfb3651efa2d4f8ec3518f9.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值