当前位置:   article > 正文

注意力机制综述

注意力机制综述

目录

一.注意力机制介绍

1.1 历史

1.2 什么是注意力机制

1.3 分类

二. Encoder—Decoder模型

2.1 未添加注意力机制的LSTM结构

2.2 添加了注意力机制的LSTM结构

三.自注意力机制

3.1 什么是自注意力机制

3.2 引入自注意力机制的目的

3.3 self-attention结构

3.3.1 自注意力机制的简略结构

3.3.2 Dot-product方法

3.3.3 自注意力机制的详细结构

3.3.4 自注意力机制的矩阵形式

四.Transformer

4.1 Transformer整体结构图

4.2 Transformer的inputs 输入

4.3 Transformer的Encoder

4.3.1 Multi-Head Attention

4.3.2 Add&Normalize

4.3.3 Feed-Forward Networks

4.4 Transformer的Decoder

4.4.1 Masked Multi-Head Attention

4.4.2 Decoder 中的Multi-Head Attention

4.5 Transformer的输出


一.注意力机制介绍

1.1 历史

        注意力机制在上世纪九十年代就有研究,2014年Volodymyr在论文中将注意力机制应用到了视觉领域,2017年Transformer结构被提出,注意力机制在NLP,CV相关问题的网络设计上被广泛应用。

1.2 什么是注意力机制

        “注意力机制”实际上就是想将人的感知方式、注意力的行为应用在机器上,让机器学会去感知数据中的重要和不重要的部分。

        简单来说就是对于模型的每一个输入,可能是图片中的不同部分,或者是语句中的某个单词分配一个权重,这个权重的大小就代表了我们希望模型对该部分一个关注程度。这样一来,通过权重大小来模拟人在处理信息的注意力的侧重,有效的提高了模型的性能,并且一定程度上降低了计算量。

1.3 分类

        深度学习中的注意力机制通常可分为三类:软注意机制(全局注意)、硬注意机制(局部注意)和自注意机制(内注意)。NLP领域中的注意力机制一般是指自注意力机制1.Soft/Global Attention(软注意机制):对每个输入项的分配的权重为0-1之间,也就是某些部分关注的多一点,某些部分关注的少一点,因为对大部分信息都有考虑,但考虑程度不一样,所以相对来说计算量比较大。

2.Hard/Local Attention(硬注意机制):对每个输入项分配的权重非0即1,和软注意不同,硬注意机制只考虑那部分需要关注,哪部分不关注,也就是直接舍弃掉一些不相关项。优势在于可以减少一定的时间和计算成本,但有可能丢失掉一些本应该注意的信息。

3.Self/Intra Attention(自注意力机制):对每个输入项分配的权重取决于输入项之间的相互作用,即通过输入项内部的"表决"来决定应该关注哪些输入项。和前两种相比,在处理很长的输入时,具有并行计算的优势。

二. Encoder—Decoder模型

        Encoder—Decoder模型也称为seq2seq模型,这种模型由一个编码器和一个解码器组成前者负责将输入的文本序列压缩成指定长度的向量,这个向量可以看作输入序列的语义,这个过程称为编码, Decoder负责根据语义向量生成指定的序列即解决问题的序列,这个过程称为解码。

上图就是Encoder-Decoder框架在NLP领域中抽象后的最简单的结构图。
Encoder:编码器,对于输入的序列<x1,x2,x3…xn>进行编码,使其转化为一个语义编码C,这个C中就储存了序列<x1,x2,x3…xn>的信息。

       seq2seq模型的应用场景有机器翻译、聊天机器人、语音识别、阅读理解、图片描述自动生成等等。

         编码器跟解码器可以取RNN或RNN的变种LSTMGRU,不是固定不变的模型。下面以机器翻译为例介绍编码器和解码器都是LSTM的Encoder—Decoder模型,然后后边再在这个基础上加入注意力机制,以理解注意力机制。

2.1 未添加注意力机制的LSTM结构

        在原始结构中,解码器在翻译每个单词时,编码器的四个隐含层对当前隐层节点的影响是一样的,但事实上,我们不希望他们是一样的,为此,就需要引入注意力机制。

2.2 添加了注意力机制的LSTM结构

左上角这一整块就是注意力机制Attention,接下来逐一介绍上图中注意力机制的每一层的作用。

第一层,也就是紫色的这一部分是用来计算相似度的,图中是通过向量内积来计算相似度,但除了向量内积这种方法以外,还可以用一个小型神经网络拟合、余弦相似度等来计算相似度。

第二层是一个softmax函数,将相似度通过这个softmax函数,就可以得到编码器的四个隐含层对当前隐层节点的影响,也就是四个权重。

最后通过加权求和,就可以得到解码器的新的隐层节点的输出。

对解码器其它几个隐层节点h2’ , h3’ , h4’ , h5’同理可得下面的结构:

三.自注意力机制

3.1 什么是自注意力机制

        传统的Attention机制发生在Target的元素和Source中的所有元素之间。自注意力机制不是输入语句和输出语句之间的Attention机制,而是输入语句内部元素之间或者输出语句内部元素之间发生的Attention机制。

3.2 引入自注意力机制的目的

        神经网络接收的输入是很多大小不一的向量,并且不同向量向量之间有一定的关系,但是实际训练的时候无法充分发挥这些输入之间的关系而导致模型训练结果效果极差。

所以我们引入自注意力机制就可以把这些关系表示出来。

3.3 self-attention结构

3.3.1 自注意力机制的简略结构

        对于每一个输入向量a,经过蓝色部分self-attention之后都输出一个向量b,这个向量b是考虑了所有的输入向量对a1产生的影响才得到的,这里有四个词向量a对应就会输出四个向量b

3.3.2 Dot-product方法

        Dot-product方法是将两个向量乘上不同的矩阵w,得到qk,做点积得到αtransformer中就用到了Dot-product

        绿色的部分就是输入向量a1a2,灰色的WqWk为权重矩阵,需要学习来更新,用a1去和Wq相乘,得到一个向量q,然后使用a2Wk相乘,得到一个数值k。最后使用qk做点积,得到αα也就是表示两个向量之间的相关联程度。

3.3.3 自注意力机制的详细结构

3.3.4 自注意力机制的矩阵形式

I就是输入序列组成的矩阵,O就是经过自注意力机制处理后的输出序列组成的矩阵

 计算出了Q、K、V之后,自注意力机制的计算公式就可以总结为下图中的公式

四.Transformer

Transformer是一个基于Encoder-Decoder框架的模型。

4.1 Transformer整体结构图

4.2 Transformerinputs 输入

        拿翻译举例,训练时,Encoder inputs可以是一段中文,Decoderinputs是这段中文对应的英文。

        经过inputs embedding变成词向量后,可以是任意形式的词向量,如word2vecGloVeone-hot编码。变成词向量后需要给每个词向量添加位置编码positional encodingTransformer 是完全基于self-Attention地,self-attention是不能获取词语位置信息地,不能获取词语位置所带来的后果很大,就比如说一句话“我欠他100万和他欠我100万”,这个100万的位置不同,意思也是千差万别的,所以在我们输入的时候需要给每一个词向量添加位置编码。

4.3 TransformerEncoder

TransformerEncoder是由6encoder堆叠而成。上图2中的灰框部分就是一个encoder的内部结构,从图中我们可以看出一个encoderMulti-Head Attention 全连接神经网络Feed Forward Network构成。

4.3.1 Multi-Head Attention

        Multi-Head Attention它的作用是把输入embedding矩阵转成一个新的embedding矩阵输出,这个输出embedding矩阵中的每一个词向量不仅包含本身的信息,还包含句子中其它词的信息。

        因为每个批次输入序列长度是不一样的。也就是说,我们要对输入序列进行对齐。具体来说,就是给在较短的序列后面填充 0。但是如果输入的序列太长,则是截取左边的内容,把多余的直接舍弃,这种方法叫做padding mask

        Multi-Head Attention 是在self-attention的基础之上进行了一些完善,对于输入的embedding矩阵,self-attention只使用了一组,来进行变换得到Query,KeysValues。而Multi-Head Attention使用多组得到多组QueryKeysValues,然后每组分别计算得到一个Z矩阵,将得到的多个Z矩阵进行拼接,最后将拼接后的矩阵再乘一个权重矩阵W,得到ZTransformer里面是使用了8组不同的

4.3.2 AddNormalize

1.残差连接

每个编码器的Self-Attention 层和 FFN 层都有一个残差连接(Z是残差)

目的是为了防止在深度神经网络训练中发生退化问题,退化的意思就是深度神经网络通过增加网络的层数,Loss逐渐减小,然后趋于稳定达到饱和,然后再继续增加网络层数,Loss反而增大。

2. Normalize

残差连接完成后要进行Normalize
在神经网络进行训练之前,都需要对于输入数据进行Normalize归一化,目的有二:

1.能够加快训练的速度。

2.提高训练的稳定性。

4.3.3 Feed-Forward Networks

全连接层公式如下:

这里的全连接层是一个两层的神经网络,先线性变换,然后ReLU非线性,再线性变换。
公式里的x就是我们Multi-Head Attention的输出Z

然后经过AddNormalize,输入下一个encoder中,经过6encoder后输入到decoder中,至此TransformerEncoder部分就全部结束了

4.4 Transformer的Decoder

4.4.1 Masked Multi-Head Attention

        与EncoderMulti-Head Attention计算原理一样,只是多加了一个mask码。mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask sequence maskpadding mask在前边已经介绍过了。

sequence mask

        sequence mask 是为了使得 decoder 不能看见未来的信息。对于一个序列,在 time_step t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。这在训练的时候有效,因为训练的时候每次我们是将target数据完整输入进decoder中地,预测时不需要,预测的时候我们只能得到前一时刻预测出的输出。

        那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。

4.4.2 Decoder 中的Multi-Head Attention

        Encoder中的Multi-Head Attention是基于Self-Attention地,Decoder中的第二个Multi-Head Attention就只是基于Attention

        它的输入Quer来自于Masked Multi-Head Attention的输出,KeysValues来自于Encoder中最后一层的输出。

        经过了第二个Multi-Head Attention之后的Feed Forward NetworkEncoder中一样,然后就是输出进入下一个decoder,如此经过6decoder之后到达最后的输出层。

4.5 Transformer的输出

        Output如图中所示,首先经过一次线性变换,然后Softmax得到输出的概率分布,然后通过词典,输出概率最大的对应的单词作为我们的预测输出。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/101381
推荐阅读