Attention机制的通用定义
如下图所示,Attention从数学角度来形容是一个变量Query到一系列Key-Value对的映射,从公式上描述是根据Query和Key计算Values的加权求和的机制。
attention解释
attention计算主要分为三步:
第一步,是将Query和每个Key进行相似度计算得到权重,常用的相似度函数有点积,拼接,感知机等;
第二步,一般是使用一个softmax函数对这些权重进行归一化;
最后,将权重和相应的键值Value进行加权求和得到最后的attention。
目前在NLP研究中,key和value常常都是同一个,即key=value。单纯的文字描述很难理解attention,以下从实际算法角度来理解。
Seq2Seq简要介绍
接下来,我们以Seq2Seq中的attention作为例子,讲述attention在seq2seq的计算流程。
(1)什么是Seq2seq模型(常用语翻译的RNN模型)
Seq2Seq又叫Encoder-Decoder模型,常见于机器翻译。下图是它的基本结构,以一个RNN作为编码器,获得句子的语义向量,以另外一个RNN作为解码器,进行翻译。如图中所展示,我们要翻译“知识就是力量。”这句话。Encoder是一个RNN,将要翻译的话转换成向量特征,输入到Decoder中。
RNN翻译的基础结构
(2)语义向量C
这是Encoder,一个RNN,C是RNN从输入中提取的向量,或者说对 进行一个编码,得到C(上下文向量)。得到C有多种方式,最简单的方法就是把Encoder的最后一个隐状态赋值给C[如图中(1)所示],还可以对最后的隐状态做一个变换得到C[如图中(2)所示],也可以对所有的隐状态做变换得到C[如图中(3)所示]。
语义向量C的输入方式:作为解码器第一层的输入
语义向量C的输入方式:作为解码器每一层的输入
获得C以后,就使用另一个RNN,Decoder解码器,来对编码C进行解码,或者说根据向量C来学习获得正确的输出。上面两图中是两种输入方式,将C当做之前的初始状态h0输入到Decoder中和将C当做每一步的输入。
attention在seq2seq中的应用
首先,先进行数学符号的描述。
(1)在Encoder编码器中,保留每一个RNN单元的隐藏状态(hidden state)
(2)在Decoder解码器中,每个一个RNN单元的隐藏状态是由输入和上一步的隐藏状态决定的,假设第t步的隐藏状态记为(下图中的START)
i)计算attention的第一步:点乘,获得Attention Scores
dot点积得到图中的Attention Scores那么如图所示,在每个第t步利用和(i=1 to N)进行dot点积得到图中的Attention Scores,记为(i=1 to N)。从Attention的通用定义来说,此时就是Query,(i=1 to N)就是一系列Values。
ii)计算attention的第二步:归一化,求attention distribution
获得每一个key的权重将(i=1 to N)通过Softmax函数来计算每个Encoder的RNN单元所对应Decoder第t步的权重
iii)计算attention的第三步:获得上下文向量
上下文向量利用来对Encoder的hidden states (i=1 to N)加权求和得到对应Decoder第t步的attention向量
到这里其实attention的计算就结束了,得到的这个就已经是decoder的第t时刻的注意力向量了(在后面的文章中,这也称作是上下文向量,context vector,符号表示也可能是用来表示的)
iiii)计算attention的第四步:后续计算
image.png最后将注意力向量,以及decoder的t时刻的hidden state ,并联起来,然后做后续的步骤(比如,加个dense全连接层做标签预测之类的)
Attention的常见结构
(1)Soft-attention结构
Soft-attention
Soft attention也就是上面Seq2Seq讲过的那种最常见的attention,是在求注意力分配概率分布的时候,对于输入句子X中任意一个单词都给出个概率,是个概率分布,把attention变量(context vecor)用表示,attention得分在经过了softmax过后的权值用表示.
简单来说
(1)计算attention scores 通过
(2)获得attention distribution 通过
(3)计算对应的上下文向量
Self-attention
了解了模型大致原理,我们可以详细的看一下究竟Self-Attention结构是怎样的。其基本结构如下
对于self-attention来讲,Q(Query), K(Key), V(Value)三个矩阵均来自同一输入。
(1)首先我们要计算Q与K之间的点乘,得到
(2)然后,为了防止其结果过大,会除以一个尺度标度。
(3)再利用Softmax操作将其结果归一化为概率分布。
(4)然后再乘以矩阵V就得到权重求和的表示。
该操作可以表示为:
参考文献
1、NLP实践九:Attention原理与文本分类代码实践
2、Attention机制详解(二)——Self-Attention与Transformer
网友评论