入门Transformer不慌系列一

       最近很多在必索思学习的朋友(简称思友)时不时跟我吐槽说Transformer太难学,但是好火好爱。入门Ai不久,看得云里雾里的,思友问我咋整。没关系,咱们不慌,让我给你梳理下Transformer家族系列的重点部分,助你更好滴理解它。

Transformer 一开始是为自然语言处理任务设计的,但现在却已经被广泛用于视觉任务,而且衍生出非常多的变体,快速被应用到各路任务中,简单梳理下这几年的顶会:

目标检测:Transformer+Detection,引入视觉领域的首创DETR (ECCV2020),然后开始卷,Deformable DETR:可变形的Transformer (ICLR2021)

分类:Transformer+Classification:用于分类任务的Transformer Vit(ICLR2021)

视觉任务: Transformer+Image Processing:IPT:用于底层视觉任务的Transformer

语义分割:Transformer+Segmentation:SETR:基于Transformer 的语义分割

知识蒸馏:Transformer+Distillation:DeiT:高效图像Transformer

图像生成:Transformer+GAN:VQGAN:实现高分辨率的图像生成

超分:SwinIR: Image Restoration Using Swin Transformer

Transformer速度好慢,需要优化,研究人员开始尝试速度优化,于是

Swin Transformer: Hierarchical Vision Transformer using Shifted Windows

MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer

看文章的速度跟不上学术界大佬们发表的速度,呜呜呜,怎么办,先把Transformer第一篇文章《Attention is all you need》学懂了,后面的都好看,再根据你的研究方向看看对应的文章,旁观下其他方向的变体,充实下自己。

如图1,Transformer的结构图如下,包含Encoder以及Decoder两个大模块,然后N个Encoder以及Decoder堆叠起来形成整体结构。其中比较难懂的是Multi-Head Attention以及Masked Multi-Head Attention。Masked Multi-Head Attention是在Multi-Head Attention的基础上加了一个Mask去屏蔽信息的,所以思友们先来学懂Multi-Head Attention是怎么做的吧。

                                               

Multi-Head Attention的基本组成是self-attention, self-attention也可以认为是One-Head Attention。我们先来看看One-Head Attention的设计动机是什么。Transformer一开始是应用在NLP领域的,比如说翻译任务,常用的是RNN的结构。RNN难以并行,使得计算对历史状态有依赖,难以加速,如下图。如果要把a1,a2,a3,a4翻译成b1,b2,b3,b4时,按照RNN的结构,翻译b1时,需要先完成链路中其他历史状态的计算,这样就很难并行,于是作者想到用CNN来取代RNN,因为CNN更容易实现并行,下图三角形代表卷积操作,如果在CNN的高层,因为感受野变大的缘故,所以能够包含更多的输入,这样对于全部输入的全局语义,就可以获取到了。

             

            

接下来我们来看self-attention的计算公式(非常重要),里边提到了Q,K,V,代表什么意思呢。

          

                                                      

                                      

在Transformer架构中,Q、K和V是指Query、Key和Value,它们是用于计算注意力机制的三个变换矩阵。在自注意力机制中,输入序列x1,x2,x3,x4乘上一个矩阵W得到embedding,即上图的向量a1,a2,a3,a4, 然后开始进入self- attention层,每一个向量分别乘以3个不同的变换矩阵Wq,Wk,Wv,以a1为例,得到q1,k1,v1。而所有qkv分别组合成一个矩阵就是Q、K、V。

通过线性变换矩阵Q、K和V,以计算每个位置的注意力权重。这些权重用于聚合所有位置的值,以获得表示输入序列的上下文信息。

以下是对Q、K和V的更详细解释:

Query(Q):Query是用于计算注意力得分的向量。对于输入序列中的每个位置,都有一个对应的Query向量。Query向量表示当前位置的信息,并用于计算与其他位置之间的关系。

Key(K):Key是用于计算注意力得分的向量。与Query类似,对于输入序列中的每个位置,都有一个对应的Key向量。Key向量表示其他位置的信息,并用于计算与Query向量之间的关系。

Value(V):Value是与每个位置的输入向量相关联的向量。与Query和Key不同,Value向量用于计算最终的上下文表示。在注意力机制中,Value向量的权重由Query和Key的计算结果决定。

通过计算Query和Key之间的相似度(例如点积),然后对结果进行归一化,可以得到注意力得分。这些得分用于加权求和Value向量,以获得最终的上下文表示。

Q、K和V的转换矩阵是通过学习过程中的权重矩阵来确定的。在训练过程中,Transformer模型通过反向传播和梯度下降来优化这些权重,以使得模型能够自动学习到输入序列的关系和上下文信息。

通过使用Q、K和V,Transformer模型能够有效地捕捉输入序列中的长距离依赖关系和上下文信息,从而在各种自然语言处理任务中取得了很好的效果。

             

接下来如上图所示,拿每个q对每个k做点积运算,然后除以根号d。d是指q、k的维度, 为什么要进行需要scale呢。论文里的解释是这样的,假设Q,K是独立随机变量,均值为0,方差为1

  

               

假设Q跟K是上图这样的形式,根据均值为0,方差为1列出计算过程,QK点积的运算过程如上,当出现恒等q1=k1,q2=k2,q3=k3的时候,QK的点积结果就等于d了,因此d的值会成为一个特殊情况下的干扰,需要除以根号d进行缩放

              

所有的q,k两两相乘然后经过softmax进行归一化,接下来与v做点积

              

              

以上过程得到b1,b2,b3,b4,这就完成了self-attention。如果是Multi-Head Attention,应该怎么做呢,而且有什么好处?

             

如上图,只要把输入x1再乘以一个矩阵W就扩展出另一个头aj了,全部输入序列这样操作,然后重复self-attention的运算过程。多头的好处是:模型在对当前位置的信息进行编码时,会过度地将注意力集中在自身的位置,使用多头注意力机制能够给予注意力层的输出包含有不同子空间的编码表示信息,从而增强模型的表达能力。

               

第一个头得到bi,1, 第二个头得到bi,2,依次类推,n个头,得到bi,n,接下来把这些头concat在一起,然后用一个矩阵学习一下,有点像集成学习,每一个头得到一种维度的特征信息,用一个矩阵综合所有头的信息,得到最后的输出

           

看到这里,不知道你理解了吗,如果有什么不懂的地方,可以私戳BThoth(微信如下),交流探讨下

接下来还有Masked Multi-Head Attention,FFN,Positional Encoding, 他们又是怎么做的呢,欲知如何,请看下回分解,谢谢

BThoth介绍

BThoth必索思,我们团队是来自清华剑桥的优秀硕博、博士后,具备丰富的学术工程经验,如果你想提升自己的ai学术工程能力,那就关注我们吧。报名成功后可以发起老师meeting,验证学历背景、论文成果等,专业、真实、值得信赖。截至10月上榜老师战绩情况如下:

联系方式:

微信号BThoth                    微信公众号: BThoth必索思

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值