Vision Transformer综述 part I Transformer简介及组成

news2024/11/24 3:04:11

Vision Transformer综述

  • 1. Transformer简介
  • 2. Transformer组成
    • 2.1 Self-Attention
      • Multi-Head Attention(多头注意力)
    • 2.2 Transformer的其他关键概念
      • 2.2.1 Feed-Forward Network 前馈网络
      • 2.2.2 Residual Connection 残差连接
      • 2.2.3 解码器中的最后一层

1. Transformer简介

Transformer首先应用于自然语言处理领域,是一种以自我注意机制为主的深度神经网络。由于其强大的表示能力,研究人员正在寻找将变压器应用于计算机视觉任务的方法。在各种视觉基准测试中,基于变压器的模型表现类似或优于其他类型的网络,如卷积和循环神经网络。由于其高性能和较少的视觉特异性感应偏倚需求,变压器正受到计算机视觉界越来越多的关注。在本文中,我们对这些视觉转换器模型进行了综述,并根据不同的任务对其进行了分类,分析了它们的优缺点。我们探讨的主要类别包括骨干网络、高/中级视觉、低级视觉和视频处理。我们还包括高效的变压器方法,用于将变压器推入基于实际设备的应用程序。此外,我们还简要介绍了计算机视觉中的自注意机制,因为它是变压器的基本组件。在本文的最后,我们讨论了视觉变压器所面临的挑战,并提出了进一步的研究方向。

在这里,我们回顾了与基于变压器的视觉模型相关的工作,以跟踪这一领域的进展。图1展示了视觉变压器的发展时间表——毫无疑问,未来会有更多的里程碑。

image-20230607104428932

图1,Transformer发展的关键里程碑。视觉Transformer型号用红色标注。

2. Transformer组成

Transformer首次被用于机器翻译任务的自然语言处理(NLP)领域。如图2,原始变压器的结构。它由一个编码器和一个解码器组成,其中包含几个具有相同架构的转换器块。

image-20230607110916425

编码器生成输入的编码,而解码器获取所有编码并使用它们合并的上下文信息来生成输出序列。每个变压器块由多头注意层、前馈神经网络、快捷连接和层归一化组成。下面,我们详细描述变压器的每个组成部分。

2.1 Self-Attention

在自注意层,首先将输入向量转换为三个不同的向量:

  1. 查询向量(query vector)q

  2. 键(key vector)向量k

  3. 值向量(value vector)v

三种向量的维数d(q、k、v)=d(model)=512,由不同输入导出的向量被打包成三个不同的矩阵,即Q、K和V。然后,计算出不同输入向量之间的注意函数,如下图3所示:

image-20230610124711208

Step 1:计算不同输入向量之间的得分image-20230610124936691

Step 2:对梯度的稳定性分数进行归一化image-20230610124954786

Step 3:使用softmax函数将得分转化为概率image-20230610125047090

Step 4:求加权值矩阵Z=V*P

该过程可以统一为一个单一函数(dk=模型维度=512)image-20230610125237930

公式(1)背后的逻辑很简单。

Step 1 计算每对不同向量之间的分数,这些分数决定了我们在编码当前位置的单词时给予其他单词的关注程度

Step 2 将分数归一化,以增强梯度稳定性,用于改进训练;

Step 3 将分数转化为概率。

最后,将每个值向量乘以概率的和。具有较大概率的向量将获得额外的注意。

解码器模块中的编码器-解码器注意层类似于编码器模块中的自注意层,但有以下例外:密钥矩阵K和值矩阵V由编码器模块导出,查询矩阵Q由上一层导出。

注意,前面的过程对每个单词的位置是不变的,这意味着自我注意层缺乏捕捉单词在句子中的位置信息的能力。然而,语言中句子的顺序性要求我们在编码中整合位置信息。为了解决这个问题并获得单词的最终输入向量,在原始的输入嵌入中添加了一个维度为dmodel的位置编码。具体地说,这个位置是用下面的公式编码的

image-20230610141412149

Pos表示单词在句子中的位置,i 表示位置编码的当前维度。通过这种方式,位置编码的每个元素都对应于一个正弦波,它允许变压器模型学习通过相对位置参与,并在推理过程中外推到更长的序列长度。

除了vanilla transformer中的固定位置编码外,各种模型中还使用了习得的位置编码和相对位置编码。

Multi-Head Attention(多头注意力)

多头注意是一种可以用来提高vanilla自我注意层性能的机制。

注意,对于一个给定的参考词,我们通常想要在整个句子中关注其他几个词。一个单一的自我注意层限制了我们专注于一个或多个特定位置的能力,而不会同时影响对其他同等重要位置的注意。这是通过给注意层不同的表示子空间来实现的。

具体来说,对于不同的头部使用不同的查询矩阵、键值矩阵,这些矩阵通过随机初始化,训练后可以将输入向量投射到不同的表示子空间中。

为了更详细地说明这一点,给定一个输入向量和注意头数量h,dmodel=模型维度

  1. 首先将输入向量转换为三组不同的向量:查询组(query group)、键组(key group)和值组(value group)

  2. 在每一个组中。有h个维度为dq=dk’=dv’=dmodel/h=64的向量

  3. 然后,从不同输入导出的向量被打包成三组不同的矩阵:image-20230610143155208

  4. 多头注意过程如下图所示:image-20230610143224497

其中,Q’(K’,V’同理)是{Qi}的串联,Wo是投影权值。

2.2 Transformer的其他关键概念

2.2.1 Feed-Forward Network 前馈网络

在每个编码器和解码器的自注意层之后采用前馈网络(FFN)。它由两个线性变换层和其中的一个非线性激活函数组成,可以表示为以下函数image-20230610144522413其中w1、w2为两个线性变换层的两个参数矩阵,s为非线性激活函数,如GELU。隐藏层的维度为dh=2048。

2.2.2 Residual Connection 残差连接

如图2中所示,在编码器和解码器的每个子层中增加一个剩余的连接(黑色箭头)。

image-20230610144839128

这加强了信息流,以实现更高的性能。在剩余连接之后,采用层归一化。这些操作的输出可以描述为image-20230610144956642

X作为自我注意层的输入,查询、键值矩阵Q、K和V都来自同一个输入矩阵X。

2.2.3 解码器中的最后一层

解码器中的最后一层用于将向量堆栈转换回一个单词。这是通过一个线性层和一个softmax层实现的。

image-20230610145202538

线性层将该向量投影为具有dword维数的logits向量,其中dword是词汇表中的单词数。然后使用softmax层将logit向量转换为概率。

当用于CV(计算机视觉)任务时,大多数变压器采用原变压器的编码器模块。这种变压器可以看作是一种新型的特征提取器。与只关注局部特征的CNN(卷积神经网络)相比,变压器可以捕获长距离的特征,这意味着它可以很容易地获得全局信息。

与必须顺序计算隐藏状态的RNN(循环神经网络)相比,变压器的效率更高,因为自注意层和全连接层的输出可以并行计算,且易于加速。由此,我们可以得出结论,进一步研究变压器在计算机视觉和自然语言处理中的应用将会产生有益的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

红蓝攻防基础-认识红蓝紫,初步学习网络安全属于那个队?

一、关于红队 红队,也叫蓝军是指网络实战攻防演练中的攻击一方,以发现系统薄弱环节、提升系统安全性为目标,一般会针对目标单位的从业人员以及目标系统所在网络内的软件、硬件设备执行多角度、全方位、对抗性的混合式模拟攻击,通过…

HTML中的 JavaScript 运行模式

导读: 在前面章节中,我们提到了,JavaScript在诞生初期,主要用途是代替Perl等服务器端语言处理输入验证,但如今 JavaScript,已经被广泛应用在了 WEB 开发领域,所以本章节就和大家聊聊,JavaScript&#xff0c…

HTML5-创建HTML文档

HTML5中的一个主要变化是:将元素的语义与元素对其内容呈现结果的影响分开。从原理上讲这合乎情理。HTML元素负责文档内容的结构和含义,内容的呈现则由应用于元素上的CSS样式控制。下面介绍最基础的HTML元素:文档元素和元数据元素。 一、构建…

leetcode 85. 最大矩形

题目链接:leetcode 85 1.题目 给定一个仅包含 0 和 1 、大小为 rows x cols 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。 2.示例 1)示例 1: 输入:matrix [[“1”,“0”,“1”,“0”,“…

window服务器环境将springboot项目 jar包安装成一个window服务自启动

目录 1.下载WinSW工具 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 1.下载WinSW工具 下载winswhttps://github.com/winsw/winsw/releases 2.新建一个Window Service信息的xml文件 <!--…

在组态软件中开发脚本功能的方法

一、概述 大多数的组态软件都具有脚本功能&#xff0c;脚本可能是VBS、Lua、C#等语言&#xff0c;也可能是厂家自定义的一种语言。通过脚本&#xff0c;组态软件可以实现非常灵活的功能。 脚本的功能&#xff0c;基本可以定义为&#xff1a;读入外部数据&#xff0c;改变可视…

Rocketmq面试(六)Rocketmq6种找不到Broker的情况

1.发送消息 Rocketmq Client在发送消息的时候&#xff0c;会根据topic首先从本地缓存获取Broker&#xff0c;获取Broker&#xff0c;如果获取不到&#xff0c;就会到Name Server集群中获取 2.消息偏移量 客户端获取消息偏移量&#xff08;Consume Offset&#xff09;的时候&…

2.2 利用MyBatis实现CRUD操作

一、准备工作 打开MyBatisDemo项目 二、查询表记录 1、在映射器配置文件里引入结果映射元素 在UserMapper.xml文件里创建结果映射元素 将UserMapper接口里抽象方法上的注解暂时注释掉 运行TestUserMapper测试类里的testFindAll()测试方法&#xff0c;查看结果 2、添加…

【图像处理】植物叶识别和分类

一、说明 这是国外某个学生团队尝试用机器学习方法对植物叶进行识别分类的实验。实验给出若干张植物叶图片&#xff0c;针对这些图片&#xff0c;对特征进行测量、提取、重组&#xff0c;最后用机器学习方法实现&#xff1b;该具备一定的参考价值。 现在是我们将图像处理学习应…

生成测试数据的4种方法、5种工具介绍

在软件测试中&#xff0c;测试数据是测试用例的基础&#xff0c;对测试结果的准确性和全面性有着至关重要的影响。 因此&#xff0c;在进行软件测试时&#xff0c;需要生成测试数据以满足测试场景和要求。本文将介绍什么情况下需要生成测试数据&#xff0c;如何生成测试数据&a…

100 行 C++ 代码,教你快速实现视频画面动态分割!

作者&#xff1a; 一去、二三里 个人微信号&#xff1a; iwaleon 微信公众号&#xff1a; 高效程序员 在进行视频或者图像处理时&#xff0c;经常会出现画面分割的场景。 当然了&#xff0c;这里说画面分割是对视频/图像画面的切割&#xff0c;即将同一视频/图像分割成不同的部…

javassist 入门以及dubbo中的使用案例

javassite 入门 概述原理 简单的demo记录方法执行的时间带参数和返回值javassite 占位符 dubbo中的使用代理工厂 JavassistProxyFactory代理类 org.apache.dubbo.common.bytecode.Proxyorg.apache.dubbo.rpc.proxy.InvokerInvocationHandler创建类的工具类 ClassGenerator 概述…

uniapp-ios打包安装测试

我们在做uniapp需要打ios包测试的时候&#xff0c;会有证书私钥密码、证书profile文件、私钥证书三项必填项&#xff0c;这是苹果三件套&#xff0c;必须要有的。就是下图所示 下面说一下如何获取&#xff1a; 一、申请账号 1. 申请Apple id 登录&#xff1a; https://app…

Vue3:组件高级(下)

Vue3&#xff1a;组件高级&#xff08;下&#xff09; Date: May 25, 2023 Sum: ref引用、动态组件、插槽、自定义指令 目标&#xff1a; ◆ 能够知道如何使用 ref 引用 DOM 和组件实例 ◆ 能够知道 $nextTick 的调用时机 ◆ 能够说出 keep-alive 元素的作用 ◆ 能够掌握插…

TiDB亿级数据亚秒响应查询扩缩容

目录 1 查看数据分布2 当前集群部署拓扑3 扩容TiKV节点3.1 编写扩容脚本3.2 执行扩容命令3.2.1 命令格式3.2.2 执行命令 3.3 验证扩容信息3.3.1 查看节点信息3.3.2 通过dashboard查看 4 缩容TiKV节点4.1 查看节点信息4.2 执行缩容操作4.2.1 缩容命令4.2.2 执行命令 4.3 验证缩容…

Redis集群(分布式缓存):详解持久化、主从同步原理、哨兵机制、Cluster分片集群,实现高并发高可用

0、引言 单机式Redis存在以下问题&#xff0c;因此需要Redis集群化来解决这些问题 1、持久化 1.1 RDB&#xff08;Redis Database Backup file &#xff09;持久化 Redis数据快照&#xff0c;简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c…

CSS 布局备忘录

CSS 布局 元素布局display:blockdisplay:inlinedisplay:inline-blockdisplay:inheritdisplay:none Position 布局Flex 布局父元素属性flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-content 子元素属性orderflex-growflex-shrinkflex-basisfelxalign-self …

电商--抢购总结

文章目录 业务流程业务难点技术难点技术方案技术方向具体落地客户端流控网关流控容器流控后端接口流控数据库流控 流控总结优化读取加速异步化流程处理系统扩容 压测监控 总结参考文献 业务流程 客户端抢购流程中会涉及到商品数据的读取用于商品展示&#xff0c;运营活动数据的…

MM32F3273G8P火龙果开发板MindSDK开发教程8 - MutilButton的移植

MM32F3273G8P火龙果开发板MindSDK开发教程8 - MutilButton的移植 1、MutilButton简介 MultiButton 是一个小巧简单易用的事件驱动型按键驱动模块&#xff0c;可无限量扩展按键&#xff0c;按键事件的回调异步处理方式可以简化你的程序结构&#xff0c;去除冗余的按键处理硬编…

NodeJS SessionToken验证⑧

文章目录 ✨文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持&#x1f618;前言登录鉴权Cookie&Session ExpressSession中间件 MVC演示登录鉴权JSON Web Token (JWT) Jsonwebtoken参数sign 方法verify 方法 封装JsonWebToke…