Attention机制

前言

  • 翻译自:https://jalammar.github.io/illustrated-transformer/(强推)
  • 同时参考:https://blog.csdn.net/shenziheng1/article/details/89323074
  • https://blog.csdn.net/hpulfc/article/details/80448570
  • https://www.youtube.com/watch?v=gciHGREJdJ4
  • 侵删

一、Attention机制的引入背景

传统seq2seq模型的缺点:
1)Recurrent神经网络的ht需要ht-1和t进行计算生成hidden,无法并行处理。
2)当句子长度较长时,会发生长程的梯度消失,造成长序列到定长向量转化而造成的信息损失的瓶颈,通常会忘记序列早期的部分。
3)传统seq2seq模型用于所有的编码器时间步长的固定上下文向量不同,attention机制计算每次注意力权重为每个时间步长计算单独的上下文向量。

二、传统seq2seq模型结构与添加了Attention机制的模型结构对比

  • 传统的seq2seq模型为典型的encode-decode方式

在这里插入图片描述
1)先利用encoder通过非线性变换生成输入句子的中间语义表示C:
在这里插入图片描述
2)再利用解码器Decoder利用Source句子的中间语义表示C与之前生成的历史信息来生成i时刻要生成的单词。
在这里插入图片描述
在这里插入图片描述

  • 加入了Attention机制的encode-decode模型
    在这里插入图片描述

1)目标Target句子的Hi-1(隐藏层状态节点,在注意力模型中为Q)与输入句子Source每个单词对应的隐藏层节点状态hj(k)及逆行对比(相似度计算)。通过函数F(hj,Hi-1)来获得目标单词与每个输入单词对应的对齐可能性(前馈神经网络)。F函数在不同论文中采用的方法不同(点积,拼接,感知机)。最后将F的输入利用某种转化(如softmax)得到注意力得分(V)。

2)中间语义C(就是V矩阵)对于不同位置的yi具有不同的值:
在这里插入图片描述
3)利用目标句子(Target)中对应位置的语义编码获得yi
在这里插入图片描述

三、Transformer模型整体架构

前言: 传统的Attention机制还是难以并行化,因此谷歌提出了Transformer模型,只使用注意力摆脱了所有的卷积和循环层。

Transformer模型包含两个重要的组成部分:1)encoders(编码组件); 2)decoders (解码组件)
在这里插入图片描述
编码组件和解码组件分别包含一堆编码器和解码器。
在这里插入图片描述
每个编码器和解码器的内部组成结构:
在这里插入图片描述
整体模型结构:
在这里插入图片描述
三、各个内部组成结构
总体:input->encode->decode->output
在encode层:
(1)在encoder最底端的encode层是对input进行embedding
(2)经过self-attention获得Z
(3)经过feed forward获得r1
在这里插入图片描述
self attention层介绍:
例如句子:”The animal didn’t cross the street because it was too tired”
其中的it与街道有关还是与动物有关(指代消歧),对于人类来说非常简单,但是对于算法来说不是一件简单的事情。
self attention :当模型处理每个单词(输入序列中的每个位置)时,self - attention允许它查看输入序列中的其他位置,以寻找有助于更好地编码这个单词的线索。
作用机制: 通过计算词与词之间的attention score,如果计算呢?分两步
第一步:通过矩阵WQ, WK, WV分别与embedding(第一层encode中为embedding)相乘,得到q,k,v
(假设embedding的维度为512,一般为最长的句子长度)
在这里插入图片描述

第二步:通过将当前词的q和相关词的k进行点乘,得到

在这里插入图片描述
第三步和第四步:将上述的点乘除以8(就是k矩阵的维度开方),文章说是为了能够获得更多稳定的梯度(不太懂)。
然后将所得的值进行softmax操作(归一化)
在这里插入图片描述
第五步是将softmax的值与v矩阵相乘,作用是为了想保持我们想要的词不变,通过设置为0.001这样的小数将不相关的词剔除。
第六步是将加权后的v矩阵相加(是将原v1与加权后的v1相加吗??)
在这里插入图片描述
最后将上述的结果送到feed-forward神经网络中。

上述的过程是以一个单词为例子,在实际的应用中为矩阵间的运算,如下图。

在这里插入图片描述
通过下述公式概括上述六个步骤:在这里插入图片描述
Muti-head attention机制
多头注意力机制,即有多个平行的上述步骤,得到多个z输出矩阵,再通过处理输出成单个矩阵到FFNN中,目的是为了获得更多层次的表示空间。
在这里插入图片描述
将得到的多个z进行:1)concat;2)乘于额外的权重矩阵W0
在这里插入图片描述
为了更清晰展示多头注意力机制,作者画了个图:
在这里插入图片描述
与单头注意力机制不同,多头attention出来的结果更丰富
在这里插入图片描述因为没有自回归结构获取上下文信息,所以将在embedding中加入位置信息(positional encoding),形成带time signal的embedding作为输入。
在这里插入图片描述以4维的embedding为例:(positional encoding是通过一个get_timing_signal_id( ) 函数产生的)
在这里插入图片描述
最后作者补充,在encoder里的每一个子层都具有一个add&normalize的层,如图所示。
在这里插入图片描述
具体的内部操作如图所示,:
在这里插入图片描述
在解码层:
在这里插入图片描述
将顶部编码器的输出转换成一组attention向量K和V。每个解码器在其“encoder-decoder attention”层中将使用这些信息,这有助于解码器将注意力集中在输入序列中的适当位置。在decoder中,self-attention 中会将未来的信息进行遮掩(MASK)。"encode-decode attention"层与多头注意力机制类似,但其会从上一层中创建Q矩阵,同时利用encoder生成的K,V矩阵。

在编码层之后
接linear层和softmax层,将输出的结果映射到输入的类型上,例如翻译成英文(假设共10,000个单词),得到的输出为10,000维。softmax层将得分转换为概率(归一化,均为正数,相加为1),最高的概率将被选择,作为最后的输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值