Attention机制原理和应用(二)

Attention机制原理和应用(二)

本文是接Attention机制原理和应用(一)的第二篇,这一次我们主要叙述的是Self-attention机制和Multi-Head Attention机制。

一、上节回顾

在之前的文章中,我们介绍了Soft-attention机制,Global-Attention机制和Local-Attention机制。了解了attention在本质上是一种注意力的聚焦机制。通过Query和Key生成不同的权重aij,在将权重和对应的value相乘求和来确定最终的attention值。具体如下图所示:
在这里插入图片描述
在之前介绍的Attention机制中,Key=Value=Encoder中各个隐状态的向量,Attention-Value = 语义向量C。

二、Self-Attention机制

2.1 Self-Attention机制的引入

在之前的文章中,我们所利用到的Encoder-Decoder机制如下图所示:
在这里插入图片描述
在这种结构中,输入X经过Encoder的编码和Attention机制的计算生成不同的语义向量Ci。在这种Encoder和Decoder的机制中我们的输出Y和实际输入是不同,计算的是预测输出和实际输入的attention值。但是可以想象到的是,存在这样的一种情况,我们的目标输出Target和实际输入Source是相同的,那么新的问题出来了,这种形式的attention又代表着什么样的意义呢?这样的attention有什么作用呢?如何计算这种形式的attention呢?

2.2 Self-Attention机制原理

1、我们逐个对上面的问题进行回答,首先给出下图:
在这里插入图片描述
可以看到,上面和下面的句子是完全相同的两个句子,在上面的句子中,任意选出一个词来分别和下面的句子中每一个词计算attention的值,意味着句子中的每一个词和其他词的相关度。这样,对于第一个问题,我们可以知道的是,这种attention的意义在于确定句子中的每一个和其他词之间的相关度。
2、我们在来看第二个问题,给出下图:
在这里插入图片描述
上面的图是对一个句子计算attention值,并且计算出句子中每一个词的attention值得表示,在这个过程中,我们计算出来每一个词对于句子中其他词的attention权重,并且并且通过和其他词的value值进行相乘之后的累加运算来生成当前词的特征表示。这种特征表示中既包含了该词汇自己的特征,有包含了按照权重计算出来的关于其他词的特征。这种形式的思想就类似于我们之前提到过的RNN,LSTM,GRU等序列神经网络的思想。也就是说每一个节点中都包含了其他节点的特征信息。但是与传统的RNN,LSTM,GRU机制相比,这种包含其他特征的方式更加容易理解,毕竟,通过权重来计算贡献度是我们最常规的一种方法了。
3、最后一个问题:这种方式应该如何计算呢?其实,这种attention机制的计算方式和soft-attention的计算方式并没有太大的区别,二者主要的区别在于

  1. 取消了之前的预测生成Y,改为计算输入内部的attention,即Target=Source
  2. 逐个的从句子中选择每一个词xi,用来xi分别和句子中的其他词计算相似度分值。Score(xi,xj)
  3. 对计算出来的相似度的得分做softmax进行归一化 a i j = S o f t m a x ( S c o r e ( x i , x j ) ) a_{ij} = Softmax(Score(x_i,x_j)) aij=Softmax(Score(xi,xj))
  4. 利用计算出来的权重 a i j a_{ij} aij分别和其他词向量相乘并累加获取最终的attention值 ∑ j a l l a i j V a l u e j ∑_{j}^{all}a_{ij}Value_j jallaijValuej
    我们下面举一个具体的例子来计算Self-Attention值:
    在这里插入图片描述
    在这个例子中,句子序列中仅仅包含两个词[Thinking Machines],首先计算Thinking的attention值,在self-attention中target=source,也就是我我们使用的Query实际上也应该是词汇自身的一种映射。所以我们首先将Thing的词向量x1做线性映射,通过 w q w_q wq映射为q1,同时,我们也为ThinKing向量生成对应key和value,我们使用 w k w_k wk来为x1生成k1,使用 w v w_v wv为x1生成 v 1 v_1 v1。同理,我们也为Matchines生成q2,k2,v2。然后,我们通过q1,分别计算和k1和k2的相似度的分值score。为了避免矩阵相乘所导致的矩阵内的元素过大或者过小,(还用一种说法是计算出来的和其他词的score分值转化成一种正太分布,其中dk是key的维度)。将计算出来的和k1,k2等score值缩小之后,进行softmax的归一化,获得x1和x2对于x1的attention权重。
    在这里插入图片描述
    下面的主要就是一个求和的过程,通过计算出来的x1和x2对于x1的attention权重,分布和对应的value值相乘,累加,最后计算出来x1最后的特征表示z1。依照上面的计算过程,我们也可以计算出来x2的特征表示z2。
    同时,也可以根据句子向量[X1,X2]来直接训练权重矩阵,如下图所示:
    在这里插入图片描述

再对整个句子向量进行计算attention:
在这里插入图片描述

2.2 Multi-Head Attention机制

多头attention机制(Multi-Head attention),是由Attention all you need这篇论文所提出,多头的概念就是采用多个将原来的词向量或者句子向量映射到不同的空间中去,形成多个Query,多个Key,多个Value的形式,在计算完多个attention之后,将所计算出来的attention进行拼接或者求和的操作。如下图所示:
在这里插入图片描述
在这里,还需要说明的是,计算Multi-Head attention的方法一般有两种,一种是基于整个句子中词汇的所有属性,也就是设置多个头部,头部的维度是根据词汇属性的整体维度来确定的。还用一种是基于句子中词汇的部分属性来设置多个头部,也就是将词汇的n维属性分成n/k份,每一份训练一个头部。最终进行拼接来获取最后的attention向量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值