CV攻城狮入门VIT(visiontransformer)之旅——近年超火的Transformer你再不了解就晚了!

近年来,VIT模型真是屠戮各项榜单啊,就像是15年的resnet,不管是物体分类,目标检测还是语义分割的榜单前几名基本都是用VIT实现的!!!朋友,相信你点进来了也是了解了VIT的强大,想一睹VIT的风采。正如我的标题所说,作为一名CV程序员,没有接触过NLP(自然语言处理)的内容,这给理解VIT带来了一定的难度,但是为了紧跟时代潮流,我们还是得硬着头皮往transformer的浪潮里冲一冲。那么这里我准备做一个VIT的入门系列,打算一共分为三篇来讲述,计划如下:

那么下面我们就要开始了,给大家详细的唠唠transformer!!!准备发车

在介绍transformer的整体框架之前,我先来简单说说我们为什么采用transformer结构,即transformer结构有什么优势呢?在NLP中,在transformer出现之前,主流的框架是RNN和LSTM,但这些框架都有一个共同的缺陷,就是程序难以并行化。举个例子,我们期望用RNN来进行语言的翻译任务,即输入ILoveChina,输出我爱中国。对于RNN来说,要是现在我们要输出中国,就必须先输出我和爱,这个过程是难以并行的,即我们必须先得到一些东西才能进行下一步。【注:这里不知大家能否听懂哈,但只要知道传统架构有难以并行化的缺陷即可】

这样的话,就可以顺理成章的提出transformer了,其最主要就是解决了类似RNN框架难以并行的特点。后文我也会详细介绍transformer是如何进行并行处理数据的。

现在就让我们来看看transformer的整体框架,如下图所示:【注:下图图片公式皆为论文中所截,这里整理到了一起】

看了上图,不用想太多,你就是不理解,我想任谁第一眼看到这堆玩意都是懵逼的,但是没关系,后面我会慢慢的解析这个图。

在写这部分之前呢,我觉得有必要提醒一下大家,对于我下面讲述的内容你可能会很难理解selfAttention为什么会这么做,我给的意见是大家先不用过多的在意,而是先了解selfAttention的过程,这个过程理解后,你可能就会对selfAttention产生自己独特的认识,当然这部分介绍完后我也会给出自己的理解供大家参考。此外,这部分我会先给出selfAttention的执行步骤,然后会结合代码帮大家更深入的理解这个过程,大家务必耐心看完!!!

在每给出一个执行步骤后,我都会列出这部分执行的图解公式,其实这些都是一些矩阵运算,如下图所示:

这里在给出此步骤的图解公式:

这部分的图解公式如下:

step2:

step3:

step4:

这部分会根据上述的理论过程结合代码加深各位的理解。此外,这部分我也会分步骤介绍,但会细化理论部分的步骤,这样大家理解起来会更舒服,但整体的步骤是没有变的。

我们定义的输入有三个,它们的维度都是1×4的,将它们放在一起构成一个3×4的输入张量,代码如下:

importtorchx=[[1,0,1,0],#Input1[0,2,0,2],#Input2[1,1,1,1]#Input3]x=torch.tensor(x,dtype=torch.float32)我们来看看输入x的结果:

attn_scores=querys@keys.T计算得到的attn_scores结果如下:

将上步得到的attn_scores输入softmax层,代码如下:

fromtorch.nn.functionalimportsoftmaxattn_scores_softmax=softmax(attn_scores,dim=-1)我们可以来看看attn_scores_softmax的结果:

tensor([[6.3379e-02,4.6831e-01,4.6831e-01],[6.0337e-06,9.8201e-01,1.7986e-02],[2.9539e-04,8.8054e-01,1.1917e-01]])上面的结果有效数字太多了,后文不好教学展示,因此我们对attn_scores_softmax的结果取小数点后一位,即attn_scores_softmax变成下列形式:

attn_scores_softmax=[[0.0,0.5,0.5],[0.0,1.0,0.0],[0.0,0.9,0.1]]##转换为tensor格式attn_scores_softmax=torch.tensor(attn_scores_softmax)##输出attn_scores_softmax结果#tensor([[0.0000,0.5000,0.5000],#[0.0000,1.0000,0.0000],#[0.0000,0.9000,0.1000]])step6:将attn_scores_softmax与矩阵V相乘这部分代码如下:

outputs=attn_scores_softmax@values这里可以看一下这部分的输出:

讲到这里,我相信大家已经知道问题就出在输入输出的维度上的,那么后文我们就会默认经过Attention模块后输入输出的维度保持不变。

最后我们来对照整体框架的第一张图来看看selfAttention的过程,如下图:

到这里,selfAttention的内容就介绍完了。我自认为讲解得算是比较清楚的了,希望能对大家有所帮助。

Multi-HeadAttention称为多头注意力机制,其实你理解了上文的自注意力机制(selfAttention),再来看这部分其实就很简单了,下面就跟着我一起来学学吧!!!

我们可以将上述结果分成两个head进行处理,如下图所示:

你会发现head1和head2就是我们前面所说的selfAttention里面的元素,这样会从head1和head2得到对应输出,如下图所示:

这一步我们会将上一步不同head输出的结果进行Concat拼接,如下图所示:

同样的,这里我们也来对照整体框架中的图片来看看Multi-HeadAttenton的过程,如下图所示:

你会发现这副图画的比较抽象,用虚影表示出多个head的情景,我想大家是能够理解的。需要注意的一点是上图中的Linear操作其实就是指我们对原数据乘一个矩阵进行变换。

那么到这里,Multi-HeadAttention的内容就介绍完了,希望能对大家有所帮助。

encoder模块结构如下图黄色虚线框内所示:

首先我们要先介绍一下输入,即上图InputEmbedding+PositionalEncoding部分,因为这部分我认为内容还是挺多的,因此放在了附录部分,大家可先点击查看。

这部分操作的表达式如下:

是不是发现这种表达式一下子就把上图的结构都展现出来了呢,所以数学真的很奇妙!!!

这部分是不是发现还蛮简单滴,同样,希望大家都有所收获!!!

decoder的结构如下图黄色虚线框内所示:

我觉得这部分最难理解的就是训练和测试是不同的,下面我将分为训练阶段和测试阶段来为大家讲解这个decoder模块。

接着我们来看看decoder的输入和输出是什么:

对于这个输入输出你现在可能还不是很理解,接下来我会慢慢分析。

傻瓜!!!这当然是我们训练的结果啦!!!不然这傻瓜机器怎么会这么智能。我简单的画个图为大家解释解释。

到这里,我相信大家对decoder整体的训练已经有了一个较清晰的认识。下面我就来结合decoder的结构图来看看decoder里到底都有些什么。

得到输入矩阵和Mask矩阵,两者维度一致。图中显示遮挡位置的值为0。可以发现单词0只能使用单词0的信息,单词1可以使用单词0和单词1的信息。

上述过程只展示的是一个Head的情况,输出了Z,最后应该把所有Head的结果拼接,使最终的Z和输入X的维度一致。

最后会进入Linear+Softmax层,最终输出预测的单词,因为Mask的存在,使得单词0的输出Z(0,)只包含单词0的信息,如下:

Softmax根据输出矩阵的每一行预测下一个单词,如下图所示:

那么很明显测试阶段我们是无法做并行化处理的!!!

另外,作为CV程序员的我们,往往对CNN网络是更加熟悉的。那么CNN和Transformer中的self-Attention是否有什么联系呢?大家可以去网上找找资料,其实CNN可以看作是一种简化版的self-Attention,或者说self-Attention是一种复杂化的CNN,它们的大致关系如下:

我们知道越复杂的模型,往往就需要更多的参数来训练,因此在训练Transformer时就需要更多的数据,关于这一点在后面讲述的VIT模型中会有体现,敬请期待吧!!!

这部分来谈谈encoder的输入部分,其结构示意图如下:

上图主要包含两个概念,一个是InputEmbedding,一个是PositionalEncoding。下面就来逐一的进行介绍。

可以看出,上图可以用一串数字表示出“秃头小苏”这四个汉字,如用1000表示“秃”,用0100表示“头”......

但是这种表示方法是否存在缺陷呢?大家都可以思考思考,我给出两点如下:

那么我们采用什么方法来缓解这种问题呢?答案就是Embedding!!!那么何为Embedding呢,我的理解就是改变原来输入input的维度,。比如我们现在分别先用“1”,“2”,“3”,“4”分别代表“秃”,“头”,“小”,“苏”这四个字,然后将“1”,“2”,“3”,“4”送入embedding层,代码如下:

importtorchimporttorch.nnasnnembedding=nn.Embedding(5,3)input=torch.IntTensor([[1,2,3,4]])上文代码(5,3)中的3就代表我们输出每个单词的维度,可以看一下输出结果,如下图所示:

输出矩阵的每一行都代表了一个词,如第一行[0.2095-0.63380.5679]代表1,即代表“秃”。

我们可以修改一下Embedding的参数,将(5,3)换成(5,4),如下:

importtorchimporttorch.nnasnnembedding=nn.Embedding(5,4)input=torch.IntTensor([[1,2,3,4]])这时我们在来看看输出结果,此时每个词就是一个4维向量:

最后我们来大致看看通过Embedding后会达到怎样的效果:

参考一下。

通过上文的介绍,我们知道没有位置编码会导致不管我们的输入顺序如何变换,对于最后的结果是没有影响的,这肯定不是我们期望看到的。那我们就给它整个位置编码呗!可是我们应该采用什么方式的位置编码呢?我想大家可以很自然的想到一个,那就是一个词标一个数字就得了呗,如下表所示:

这种编码操作简单,但是编码长度是不可控的,即词的个数越多,后面编码词越大,这样的方式其实不是理想的。

那我们还可以使用什么编码方式呢?既然上述所述编码规则是编码长度不可控,那么就可以通过除以词的长度将其控制在0-1的范围内呀,如下表所示:

你或许觉得这种编码方式还是蛮不错的,但是呢这种方式会导致结果的尺寸会随着词的长度变换而不断变换,即上例中我们每个词编码结果的间距是0.25,但是要是我们有100个词,有100个词时,这个间距又会变成多少呢?这种尺度的不统一,对模型的训练是不友好的。

“你一会介绍这个方法,这个方法不行;一会介绍那个方法,那个方法不行。那到底行不行!!!”,~~呜呜,大佬们别喷啊,我这是想让大家看看有哪些思路,况且论文中所给的编码方式也不一定是最好的,大家都可以多想想嘛。那么下面就给各位老大爷带来论文中关于此部分的位置编码方式,公式如下:

再来看看“头”的编码,如下:

我相信通过上面的例子你应该已经对这种方式的位置编码有所了解了,即你知道了如何用这种方式来对某个词进行编码。但是你可能会问,为什么用这个方式来进行位置编码呢?即这种位置编码的优势在哪里呢?这里我为大家呈现3点:

第3点说明:

通过上图可以看出,对于pos+k位置的位置编码可以表示位pos位置和k位置的线性组合。这样的线性组合意味着某个位置向量蕴含了其它位置向量的信息。

最后,我们再来看看这张图:

大家觉得这个解释怎么样呢?我当时看到就觉得这实在是太妙了。那么这部分就为大家呈现这么多了,同样希望大家都收获满满喔!!!

THE END
1.《Visio绘制流程》课件.pptVisio绘制流程Visio是一个强大的流程图绘制工具,它可以帮助您快速高效地创建各种图表,例如流程图、网络图、组织结构图等。Visio简介Visio是微软公司开发的一款图表和绘图软件,它可以帮助用户创建专业级别的流程图、组织结构图、网络图、平面图和其他图表。Visio具有简单易用的界面,丰富的形状库,以及强大的绘图功能,可以...https://www.renrendoc.com/paper/363972073.html
2.各种格式的文件如何打开ROM 基于盒式磁带的家庭游戏仿真器文件(来自Atari 2600、Colecovision、Sega、Nintendo等盒式磁带里的ROM完全拷贝,在两个仿真器之间不可互修改) ROV Rescue Rover数据文件 RPM RedHat包管理器包(用于Linux) RPT Microsoft Visual Basic Crystal报表文件 RRS Ace game Road Rash保存的文件 ...http://www.360doc.com/content/11/1106/17/2582236_162273413.shtml
3.在线画图软件免费,rpa,机器人,自动化VisionOn在线做图|在线白板|在线画图_VisionOn_新一代轻量 网页VisionOn是一个轻量在线图形工具,实现了Visio的大部分功能,满足流程图、电路图、平面制图、软件设计、工程管理、思维导图、结构化分析等各种图形绘制。. VisionOn同时也是在线的信息白板,方便可视化组织信息, 更多内容请查看https://pub.visionon.cn/ ...https://www.wdlinux.cn/html/ruanjian/20240926/940.html
4.CAD操作技巧用AutoCAD画图的人最烦的就是从别处拷来的图在本机找不到相应的字体,从而出现各式各样的乱码,造成找不到字体的原因是别人使用的字体存放位置和自己机器中的位置不一样,一般的解决办法是重新定义,但有时这种办法并不总是有效,并且在此过程中还可能造成意外错误而使AutoCAD崩溃,更可能造成图形文件被毁。本人在一次偶...https://www.360doc.cn/article/778511_138000447.html
1.在Visio中绘制形状可以使用 Visio 中的“绘制形状”工具将形状绘制为所需的确切大小。 可以在 Visio 中使用矩形、椭圆形、弧形、任意多边形和铅笔形状来创建自己的自定义形状。 This is a modal window. No compatible source was found for this media. 如果希望能够将填充颜色应用于新形...https://support.office.com/zh-cn/article/%E4%BD%BF%E7%94%A8-%E9%93%85%E7%AC%94-%E3%80%81-%E6%8A%98%E7%BA%BF%E5%9B%BE-%E3%80%81-%E5%BC%A7%E5%BD%A2-%E6%88%96-%E4%BB%BB%E6%84%8F%E5%A4%9A%E8%BE%B9%E5%BD%A2-%E5%B7%A5%E5%85%B7%E7%BB%98%E5%88%B6%E5%BD%A2%E7%8A%B6-259ed0da-4444-4bf3-9093-33a0a79629e8?ocmsassetID=HP010378145&rs=zh-CN
2.使用Visio绘制功能模块图的详细步骤(用visio怎么画功能模块图...在软件设计和系统分析中,功能模块图是一种重要的工具,它可以帮助我们清晰地表示系统的不同部分及其相互作用。下面我将介绍如何使用Microsoft Visio来绘制一个功能模块图。 准备工作 在开始之前,确保你已经安装了Microsoft Visio。打开Visio程序,选择一个适合的模板,这里我们选择“基本流程图”。 http://visio.zaixianjisuan.com/jiqiao/shi-yong-visiohui-zhi-gong-neng-mo-kuai-tu-de-xiang-xi-bu-zhou.html
3.visio流程图随着信息化时代的来临,图形化表达已经成为工作和沟通的重要方式。MicrosoftVisio作为一款专业的绘图工具,以其强大的功能和直观的操作界面,在流程图制作方面尤为出色。本文将详细介绍如何使用Visio制作流程图,帮助读者提升工作效率,更好地进行项目管理和团队协作。 https://www.yimaowenku.com/9005.html
4.vision画图相关vision画图本文介绍了如何在Visio2013中调整加法器符号的位置,去除页面空白、调整页边距、使用设计工具适应绘图,以及导出高清晰度PNG或JPG图片的步骤。 摘要由CSDN通过智能技术生成 1. 加法器符号visio2013的加法器(一个圆圈内一个加号)所在位置在流程图->混合流程图形状中...https://blog.csdn.net/chumingqian/article/details/136307393
5.哪些在线画图工具能够标尺寸?Vision On 是很多人都在使用的一款在线画图工具,适合画各种的流程图、思维导图和电路图等等多种图,少不了的就是标尺寸的功能,毕竟工程管理的图可是非常注重标尺寸的,身为专业的在线画图工具,并且能够画工程管理的图,标尺寸属于必备功能了,所以,有需要的小伙伴也可以使用这一款在线画图工具来进行标尺寸。 https://js.design/special/article/online-drawing-dimensioning.html
6.透视软件TEOVISIONTeowinArchiExpo建筑设计网上展览会为您提供透视软件产品详细信息。规格型号:TEOVISION,公司品牌:Teowin。直接联系品牌厂商,查询价格和经销网络。寻找更多国外精选透视软件产品和供应商采购信息,尽在ArchiExpo。https://www.archiexpo.cn/prod/teowin/product-167860-2485352.html
7.艾媒商舆情监测百度文小言升级首日,画图功能调用量激增200%;中秋...百度文小言升级首日,画图功能调用量激增200%;中秋假期临近文旅市场升温,周边游预订量显著增加;淘宝Vision体验将快速迭代到3.0版本;雷军:小米希望与非洲强化新能源汽车等新兴领域合作;腾讯深耕零售六年,与600+商家共生进化;海南自由贸易港药品、医疗器械“零关税”https://www.iimedia.cn/c1088/102119.html
8.流程图制作工具和绘图软件MicrosoftVisio我在尝试安装 32 位版本的 Visio,但我运行的是 64 位版本的 Office。我应该如何解决这个问题? 我有一个最新版本的 Office,但想保留我的旧版 Visio。我该怎么办? 如何将现有 Visio 副本转移到新计算机上? Visio Web 版计划附带的用于工作或学校存储的 OneDrive 是否会覆盖我现有的用于工作或学校订阅的 OneDrive...https://www.microsoft.com/zh-cn/microsoft-365/visio/flowchart-software
9.vision怎么做镜像51CTO博客已为您找到关于vision怎么做镜像的相关内容,包含IT学习相关文档代码介绍、相关教程视频课程,以及vision怎么做镜像问答内容。更多vision怎么做镜像相关解答可以来51CTO博客参与分享和学习,帮助广大IT技术人实现成长和进步。https://blog.51cto.com/topic/617bd30d73ebba1.html
10.vision软件是什么?vision画图软件 https://ask.zol.com.cn/x/1250808.html
11.如何指导学生画图看图——教好“长方体和正方体的表面积”之我...Computer Vision and Pattern Recognition This work presents a residual learning framework to ease the training of networks that are substantially deeper than those used previously, and provides comprehensive empirical evidence showing that t...https://www.semanticscholar.org/paper/%E5%A6%82%E4%BD%95%E6%8C%87%E5%AF%BC%E5%AD%A6%E7%94%9F%E7%94%BB%E5%9B%BE%E3%80%81%E7%9C%8B%E5%9B%BE%E2%80%94%E2%80%94%E6%95%99%E5%A5%BD%E2%80%9C%E9%95%BF%E6%96%B9%E4%BD%93%E5%92%8C%E6%AD%A3%E6%96%B9%E4%BD%93%E7%9A%84%E8%A1%A8%E9%9D%A2%E7%A7%AF%E2%80%9D%E4%B9%8B%E6%88%91%E8%A7%81-%E7%8E%8B%E5%B7%9D%E5%B3%A1/580fc728bf1e72e16fd7ae578bf354b6351a0646
12.紧箍咒怎么用PS画3、设置好画笔之后,在页面就可以画图了。 kiss mayue邀请你来回答 赞 回复 (2) 怎么用Photoshop画QQ企鹅? 共2条回答 > 姐姐: 首先新建一个层(以便后面修改)用椭圆工具画一个圆并且填充成黑色 Wengxiu邀请你来回答 赞 回复 (2) 怎么用Photoshop画铜钱呢? 共3条回答 > vision(教父): 一:新建...https://www.3d66.com/answers_relation/relation_2824513_15.html
13.国内AI绘画哪家强?十大免费工具横评,BAT参战,但不是最强第一道题为了契合即将到来的春节,让AI绘画工具生成了“一张春节氛围浓重的图片,需要包含灯笼、春联、福字”,除了美图MiracleVision外,其余图片都体现了热闹的春节氛围。 ▲第一排左起:百度文心一言、百度文心一格、360智绘、阿里云通义万相、智谱AI智谱清言;第二排左起:抖音豆包、讯飞星火、讯飞星火绘画助手、腾讯...https://www.thepaper.cn/newsDetail_forward_26181842
14.ningma.com/mfwk以最初的「大礼拜」来说,首观皈依境,拜下时念「皈依」,起身时念「发菩提心」,在动中修止修定,亦包含了六度,这已结合大小乘的修行,而了知「妄心皈依真性,三轮体空、拜弥陀者是弥陀、自性礼自性佛、见诸相非相则见如来」,这又结合密宗特重的「净见(pure vision)」, 并且已暗合大势至菩萨「念佛圆通,都...http://ningma.com/mfwk_allread.php?cid=90