Attention机制原理总结和应用(一)

1、attention机制的概述和常用attention类型

注意力机制(attention)是借鉴于人类的视觉选择性的一种机制。这种机制通过对于全局的扫描,将人类的注意力着重分配在重点的区域。在计算机科学中,这种机制通过权重分配的方式进行实现。对于attention机制,常见的类型包括以下几种


1. soft-attention机制 3. global-attention机制 4.local-attention机制 2. hard-attention机制 5.self-attetion机制 6.multi-head attention机制

1、Soft-attention机制概述

1.1 传统的Encoder-Decoder的机器翻译模型

soft-attention是最早被提出和应用在NLP中的attention机制。最开始被应用于机器翻译的任务中。在机器翻译任务中,主要是把源语言翻译成目标语言。如下图所示:

图片来源:

Archive 计算机 attention计算机_Archive 计算机


图上所展示的是一个传统的机器翻译模型,其中{x1,x2,x3,x4}表示输入源语言句子S中的各个单词。{y1,y2,y3}是目标语言句子的各个单词。源语言S的句子通过编码器(Encoder)的编码操作,将{x1,x2,x3,x4}编码成一个上下文的语义信息(context vector)。将这个语义信息输入到decoder中,decoder在对语义信息进行解码,获取要预测的句子。假设Encodeer和Decoder中采用的是RNN,GRU,LSTM等序列网络结构。其计算的流程为:

  1. 首先对输入每一个词汇,获取其隐状态的信息:
    Archive 计算机 attention计算机_Soft_02 Archive 计算机 attention计算机_目标语言_03表示输入词汇,Archive 计算机 attention计算机_机器翻译_04表示上一隐状态,f是一个非线性函数(激活)。
  2. 获取到所有隐状态向量之后,将所有的隐状态向量组装成上下文语义向量:
    Archive 计算机 attention计算机_目标语言_05,其中q是非线性函数(激活)
  3. 将向量输入到Decoder之后,由于Decoder也是一个序列式的网络,所以对于Decoder的每一个输入而言,其和前一个状态相关,并且我们将前一个状态的输出作为当前状态的输入。用公式表达就是:
    Archive 计算机 attention计算机_Archive 计算机_06,其中Archive 计算机 attention计算机_机器翻译_07表示Decoder中第t-1个隐藏状态。Archive 计算机 attention计算机_目标语言_08表示前一个时间的输出,C表示输入的上下文向量。
    Archive 计算机 attention计算机_目标语言_09
1.2 Soft-attention引入

传统的机器翻译方式主要是通过编码器将输入序列编码成一个固定长度的向量,在通过解码器的解码过程对目标语言进行预测。在编码器中,每一个输入的词汇对于整个上下文向量(context vector)的贡献程度是相同的。类似于一种直接求和的思想。但是,对于目标语言来说,这种方式不一定是合理的。例如:假设我们要将"we are Chinese"翻译成中文"我们是中国人",如下图所示:

Archive 计算机 attention计算机_Archive 计算机_10


在这个翻译的过程中,当对“中国人”进行预测的时候,可以知道“我们”这个词汇是根据“we”,“是”是根据词汇“are”,“中国人”这个词汇是根据“Chinese”这个词汇来的,但是我们在预测的时候,使用的是相同的上下文向量C,没有任何区别。这样就没有显示出我们在翻译不同词汇时的不同侧重点。

2、Soft-attention的基本原理

根据上面的例子可以知道,常规的Encoder-Decoder结构没有体现出对于不同输入的侧重。下面我们就采用一种soft-attention机制来将这种侧重点机制体现出来。
继续我们上面的例子,由于我们需要体现出不同输出对于输入的不同侧重点,那么我们肯定是需要对C进行变换。比如对于上面的翻译结果,不同输出对应的侧重如下:
Archive 计算机 attention计算机_Archive 计算机_11
Archive 计算机 attention计算机_Archive 计算机_12
Archive 计算机 attention计算机_Archive 计算机_13
则可以推导出:


Archive 计算机 attention计算机_Soft_14


其中

Archive 计算机 attention计算机_机器翻译_15表示当前输出对于不同输入分配的权重,

Archive 计算机 attention计算机_Archive 计算机_16表示输入的隐藏层向量。outputs表示输出的个数。变换后的图示为:

Archive 计算机 attention计算机_Soft_17

2.1 soft-attention的形成

下面对于我们所推导出来的公式进行分析,首先我们可以知道Archive 计算机 attention计算机_Soft_18是通过编码器来实现的,那么应该如何生成对应的Archive 计算机 attention计算机_目标语言_19呢?也就是Archive 计算机 attention计算机_Archive 计算机_11中0.1,0.8,0.1是如何计算出来的呢?

Archive 计算机 attention计算机_Soft_21

上图说明了这种注意力权重的计算过程,在这个计算过程中,当我们要预测y3的时候。此时,我们使用的是s2(当前隐藏状态的前一个状态,PS:此时还没有S3状态)去和Encoder中的每一个输入隐藏层节点hj进行贡献度g的计算,在计算完所有的贡献度g之后,进行归一化吗,获取各个权重值,最终根据各个权重计算出新的上下文向量Archive 计算机 attention计算机_Soft_22即如下公式
Archive 计算机 attention计算机_Soft_23
Archive 计算机 attention计算机_Soft_24
Archive 计算机 attention计算机_Archive 计算机_25
至此,attention计算完成,具有侧重点的上下文向量c3计算完成。之后计算过程就是上文所提到的解码的过程,最后计算出当前的隐藏状态s3,计算出预测字符y3。

2.2 attention的本质

Archive 计算机 attention计算机_Archive 计算机_26


attention的本质是一种查询机制,我们给定一个Query,计算出不同key所占的比例Archive 计算机 attention计算机_Soft_27,在将Archive 计算机 attention计算机_Soft_27分别和对应的value相乘,最后累加得到了对应的attention值。在我们上述和下面的例子中,key和value是相同的,也就是在计算Archive 计算机 attention计算机_Soft_27的时候,直接用query和value计算出权重Archive 计算机 attention计算机_Soft_27

2、Global Attention 和 Local Attention

本节,我们讲一讲Soft-Attention的变形Global Attention 和Local Attention。从字面意思就不难理解,这两种变形主要是在注意力机制的范围上进行了分类和改变。

2.1 、Global Attention

Archive 计算机 attention计算机_目标语言_31


Global Attention:上图是global Attention的计算方式,由上图我们可以看出,Global Attention的计算方式和我们之前所描述的soft-attenton的计算方式相同,通过一个解码器中一个隐藏层节点作为Query,计算出该Query和所有Encoder中隐藏层节点之间的权重。最终进行汇总,得到对应的上下文向量C。其计算公式如下:

Archive 计算机 attention计算机_机器翻译_32

2.2、Local Attention

根据上面的计算方式,所有的Encoder的隐藏节点都需要和Query做相似度的运算。首先,当Encoder的隐层节点数量特别多的时候,计算量会很大。其次,某些情况下,语义的相关性也具有一定的局部性,也就是对于语义的判断可能仅仅依赖于输入的一部分就可以了。所以,我们采用一定的方式来减少attention的计算范围,重点关注于能够用来对当前输出有语义贡献的输入。

Archive 计算机 attention计算机_Soft_33


如上图所示,我们不在关注于全部的输入的隐层节点。其计算的过程主要包括以下几个步骤:

  1. 定义attention计算的范围:2D+1,也就是attention的计算仅仅在2D+1这个窗口内。其中D是由用户自己进行定义。
  2. 计算出窗口中心pt,也就是attention的计算窗口为[pt-D,pt+D]。pt的计算公式为:
    Archive 计算机 attention计算机_目标语言_34
    其中Archive 计算机 attention计算机_目标语言_35表示Encoder中隐层节点的数量,σ表示sigmoid函数,Archive 计算机 attention计算机_Archive 计算机_36表示的是Decoder当前的向量,Vp和Wp是可以学习的参数矩阵。这样计算出来之后,Archive 计算机 attention计算机_Soft_37
    3.在计算完窗口和中心位置之后,就可以根据中心位置和窗口大小计算权重Archive 计算机 attention计算机_Archive 计算机_38,计算公式为:

    计算分为两个部分,第一个部分是类似于之前介绍的计算attention权重的计算,第二部分是一个高斯分布的计算,这里D是我们之前设置窗口大小时候的D。高斯分布的作用是使得与靠近中心点pt,贡献度得分越高。

3.Hard-attention

Archive 计算机 attention计算机_Archive 计算机_39