注意力机制Attention是个啥?

 码个嘚:注意力机制Attention是个啥?

关注我

“今天的晚饭加点啥呢?”

“要不加点注意力机制吧!”

虽然注意力机制很早就提出来了(大概是2014年),直到今天它依然很火,几乎是所有大模型中都会用到的!

Encoder-Decoder框架

要了解深度学习中的注意力模型,就不得不先谈 Encoder-Decoder 框架,因为目前大多数注意力模型都是附着在 Encoder-Decoder 框架下。

其实注意力机制可以看作一种通用的思想,本身并不依赖于特定框架,这点需要注意

Encoder-Decoder 框架可以看作是一种深度学习领域的研究模式,应用场景异常广泛。

下图是文本处理领域里常用的 Encoder-Decoder 框架最抽象的一种表示:

图片

Decoder的第0时刻的状态(即初始状态)是Encoder的最后一个时刻的输出状态(编码后的语义)

Encoder-Decoder框架流程:

我们训练的样本X是类似于QA对 的 “句子对”,形如:<Source,Target>

    在训练时,对于Encoder,输入值是Source,输出编码后的结果Contrext;对于Decoder,输入值是Contrext与 "<BOS>Target"(Target前加上起始标志) 同时输入,Decoder以Contrext为条件进行解码,得到预测值 y_hat,然后与真实标签"Target+<EOL>"计算loss后进行反向传播调整参数;

    在预测时同样是将样本X输入到Encoder中得到Contrext,然后将Contrext与开始标志、Decoder上一时刻的输出(因为预测时没有decoder_inputs, 所以只能依靠decoder上一时刻输出作为当前时刻的输入)传入Decoder中,进而得到预测结果;

Encoder可以是任何可以提取特征的网络,根据不同任务而定:

文本处理领域的 Encoder可以是basicRNN、LSTM、GRU、多层RNN等;

图像处理领域的Encoder可以是Resnet、VGG等;

文本处理领域的Encoder-Decoder框架:

可以把它看作适合处理由一个句子(或篇章)生成另外一个句子(或篇章)的通用处理模型

    对于句子对<Source,Target>,我们的目标是给定输入句子Source,期待通过 Encoder-Decoder 框架来生成目标句子Target。

    Source和Target可以是同一种语言,也可以是两种不同的语言(相当于是翻译),Source 和 Target 分别由各自的单词序列构成:

图片

    对于Encoder,其任务就是对输入句子Source进行编码,将输入句子通过非线性变换转化为中间语义表示C,即Context(即Source的特征向量):

图片

    对于解码器Decoder来说,其任务是根据句子Source 的中间语义表示C和之前已经生成的历史信息,即第1,2,...,i-1时刻已经预测出来的值:

图片

,来生成 i 时刻要生成的单词,即:

图片

每个 yi 都依次这么产生,那么看起来就是整个系统根据输入句子Source生成了目标句子Target:

    若Source是中文句子,Target是英文句子,那么这就是解决机器翻译问题的Encoder-Decoder框架;

    若Source是一篇文章,Target是概括性的几句描述语句,那么这是文本摘要的Encoder-Decoder框架;

    若Source是一个问句,Target是一句回答,那么这是问答系统或对话机器人的Encoder-Decoder框架。

由此可见,在文本处理领域,Encoder-Decoder 的应用领域相当广泛。

Encoder-Decoder框架不仅在文本领域广泛使用,在语音识别、图像处理等领域也经常使用。

    比如对于语音识别来说,上图所示的框架完全适用,区别无非是Encoder部分的输入是语音流,输出是对应的文本信息,如下图:

图片

    而对于 "图像描述" 任务来说,Encoder部分的输入是一副图片,Decoder的输出是能够描述图片语义内容的一句描述语(看图说话任务),如下图:

图片

图片

图片

    文本处理和语音识别的Encoder部分通常采用RNN模型,图像处理的Encoder一般采用CNN模型。

Encoder的作用就是用来提取特征的,根据不同任务可使用不同模型来提取特征。

Attention注意力机制

    注意力模型最近几年在深度学习各个领域被广泛使用,无论是图像处理、语音识别还是自然语言处理的各种不同类型的任务中,都很容易遇到注意力模型的身影。所以,了解注意力机制的工作原理对于关注深度学习技术发展的技术人员来说有很大的必要。

    从注意力模型的命名方式看,很明显其借鉴了人类的注意力机制,因此,我们首先简单介绍人类视觉的选择性注意力机制,视觉注意力机制是人类视觉所特有的大脑信号处理机制,人类视觉通过快速扫描全局图像,获得需要重点关注的目标区域,也就是一般所说的注意力焦点,而后对这一区域投入更多注意力资源,以获取更多所需要关注目标的细节信息,而抑制其他无用信息。

    这是人类利用有限的注意力资源从大量信息中快速筛选出高价值信息的手段,是人类在长期进化中形成的一种生存机制,人类视觉注意力机制极大地提高了视觉信息处理的效率与准确性。

图片

    上图形象化展示了人类在看到一副图像时是如何高效分配有限的注意力资源的,其中红色区域表明视觉系统更关注的目标,很明显对于图中所示的场景,人们会把注意力更多投入到人的脸部,文本的标题以及文章首句等位置。

深度学习中的注意力机制从本质上讲和人类的选择性视觉注意力机制类似,核心目标也是从众多信息中选择出对当前任务目标更关键的信息。

    例如我们在思考将句子“我是一个学生”翻译成英文的时候,脑子中首先想到的就是“我”⟷ "I"的这样一种映射(而不是先想到其它部分),这就是注意力机制在人脑中的表现。

即当我们翻译到某个部分时,我们的大脑就只会联想到(将注意力集中到)最与其相关(相似)的英文映射。因此,我们同样可以将这一思维过程运行到神经网络中来,让计算机更加关注有价值的信息。

下面通过讲解Attention机制在机器翻译任务中的应用方式,来了解Attention机制的使用:

图片

    上图是一个典型的Seq2Seq模型,英文句子"I am a student"被输入到一个两个的LSTM编码网络(蓝色,即Encoder),经过编码后输入到另外一个两层的LSTM解码网络(棕色,即Decoder)。

    当网络在按时刻进行翻译(解码)的时候,第1个时刻输出的就是图中的h_t,h_t是第一个解码时刻的隐含状态,同时以上帝视角来看,最与h_t相关的部分应该是"I"对应的编码状态

图片

    因此,只要网络在解码第一个时刻时,将注意力主要集中于

图片

,也就算达成目的了。

但我们怎么才能让解码部分的网络也能知道这一事实呢?

    好在此时的h_t与编码部分的隐含状态都处于同一个Embedding space,所以我们可以通过相似度对比来告诉解码网络:哪个编码时刻的隐含状态与当前解码时刻的隐含状态最为相似。

    这样,在解码当前时刻时,网络就能将"注意力"尽可能多地集中于对应编码时刻的隐含状态。

    图中的attention weights 就是相似度系数:

图片

    其中score是计算相似度分值的函数(即用h_t分别与编码器的每个时刻的输出来计算出来一个分值作为相似度)。

计算分值score的方式通常有下面几种方法:

    1_计算余弦距离(h_t与

图片

的形状是相同的,直接进行矩阵点乘即可);

    2_设计1个小型的网络来训练学习其中的参数,

图片

  ,

图片

是编码网络(即Encoder)的输出(常用该种方法);

attention weights计算出来后,会经过softmax层进行归一化处理(处理后权重之和为1),当网络分别得到当前解码时刻与所有编码时刻对应的相似度系数之(图中的attention weights),再以加权求和的形式将所有的编码状态累加起来得到context vector。

然后将context vector与h_t进行concat拼接,作为attention layer的输入(attention层中也是有权重参数的,Wa),attention layer的输出(会经过tanh处理)就是attention vector。

然后attention vector会经过全连接层(full connection),得到t时刻的输出 output vector。

t+1时刻,会将t时刻的输出(output vector)与t+1时刻的词向量(word vector)先进行拼接,然后在作为解码器的输入,经过解码器处理得到t+1时刻的隐含状态 h_t+1,然后就是与前面相同的步骤,计算attention weights,得到context vector,然后拼接作为attention layer的输入,得到t+1时刻的ttention vector ......

注意力机制也同样有一些其它形式的变体,例如多头注意力机制,自注意力机制等

end~~~

关注我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值