学习视觉CV Transformer (1)--Transformer介绍

news2025/1/15 3:15:09

先放Transformer的经典文章
Attention Is All You Need
论文代码:https://paperswithcode.com/paper/attention-is-all-you-need

Transformer结构是google在17年的Attention Is All You Need论文中提出,首先主要是在自然语言处理NLP方面应用,取得非常好的成果,当然现在最火的ChatGPT也要归功于Transformer。
最大特点是抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。由于其出色性能以及对下游任务的友好性或者说下游任务仅仅微调即可得到不错效果。
在计算机视觉CV领域不断有人尝试将transformer引入,2020年后也出现了一些效果不错的尝试,典型的如目标检测领域的DETR和可变形DETR,分类领域的vision transformer等等。

1 Transformer介绍

以机器翻译任务为例子讲解transformer,机器翻译任务是指将一种语言转换得到另一种语言,例如英语翻译为中文任务。最简单的模型如下图所示:
在这里插入图片描述

1.1 早期seq2seq(序列转序列)

机器翻译是一个历史悠久的问题,本质可以理解为序列转序列问题,也就是我们常说的seq2seq结构,也可以称为Encoder-Decoder(编码-解码)结构,如下图所示:

在这里插入图片描述
Encoder和Decoder在早期一般是RNN模块(因为其可以捕获时序信息),后来引入了LSTM或者GRU模块,不管内部组件是啥,其核心思想都是通过Encoder编码成一个表示向量,即上下文编码向量,然后交给Decoder来进行解码,翻译成目标语言。一个采用典型RNN进行编码码翻译的可视化图如下:

在这里插入图片描述
可以看出,其解码过程是顺序进行,每次仅解码出一个单词。
上述结构其实有缺陷,具体来说是:
1.不论输入和输出的语句长度是什么,中间的上下文向量长度都是固定的,一旦长度过长,仅仅靠一个固定长度的上下文向量明显不合理;
2.仅仅利用上下文向量解码,会有信息瓶颈,长度过长时候可能会丢失信息
3.RNN不能做到并行操作,需要不断交互,处理速度会变慢

通俗理解是编码器与解码器的连接点仅仅是编码单元输出的隐含向量,其包含的信息有限,对于一些复杂任务可能信息不够,如要翻译的句子较长时,一个上下文向量可能存不下那么多信息,就会造成翻译精度的下降。

1.2 基于attention的seq2seq

基于上述缺陷进而提出带有注意力机制Attention的seq2seq,同样可以应用于RNN、LSTM或者GRU模块中。
注意力机制Attention对人类来说非常好理解,假设给定一张图片,我们会自动聚焦到一些关键信息位置,而不需要逐行扫描全图。
此处的attention也是同一个意思,其本质是对输入的自适应加权,结合CV领域的SEnet中的SE模块就能好理解了

在这里插入图片描述
SE模块最终是学习出一个1x1xC的向量,然后逐通道乘以原始输入,从而对特征图的每个通道进行加权即通道注意力,对Attention进行抽象,不管啥领域其机制都可以归纳为下图:
在这里插入图片描述

将Query(通常是向量)和4个Key(和Q长度相同的向量)分别计算相似性,
然后经过softmax得到q和4个key相似性的概率权重分布,
接着对应权重乘以Value(和Q长度相同的向量),
最后相加即可得到包含注意力的Attention value值输出。

举个简单例子说明:

  • 假设世界上所有小吃都可以被标签化,例如微辣、特辣、变态辣、微甜、有嚼劲…,总共有1000个标签,现在我想要吃的小吃是[微辣、微甜、有嚼劲],这三个单词就是,我的Query
  • 来到南门老街一共100家小吃点,每个店铺卖的东西不一样,但是肯定可以被标签化,例如第一家小吃被标签化后是[微辣、微咸],第二家小吃被标签化后是[特辣、微臭、特咸],第二家小吃被标签化后是[特辣、微甜、特咸、有嚼劲],其余店铺都可以被标签化,每个店铺的标签就是Keys,但是每家店铺由于卖的东西不一样,单品种类也不一样,所以被标签化后每一家的标签List不一样长
  • Values就是每家店铺对应的单品,例如第一家小吃的Value1是[烤羊肉串、炒花生]
  • 将Query和所有的Keys进行一一比对,相当于计算相似性,此时就可以知道我想买的小吃和每一家店铺的匹配情况,最后有了匹配列表,就可以去店铺里面买东西了(Values和相似性加权求和)。最终的情况可能是,我在第一家店铺买了烤羊肉串,然后在第10家店铺买了个玉米,最后在第15家店铺买了个烤面筋

以上就是完整的注意力机制,采用我心中的标准Query去和被标签化的所有店铺Keys一 一比对,此时就可以得到我的Query在每个店铺中的匹配情况,最终去不同店铺买不同东西的过程就是权重和Values加权求和过程。
简要代码如下:

# 假设q是(1,N,512),N就是最大标签化后的list长度,k是(1,M,512),M可以等于N,也可以不相等
# (1,N,512) x (1,512,M)-->(1,N,M)
attn = torch.matmul(q, k.transpose(2, 3))  ## torch.matmul 矩阵相乘
# softmax转化为概率,输出(1,N,M),表示q中每个n和每个m的相关性
attn=F.softmax(attn, dim=-1)
# (1,N,M) x (1,M,512)-->(1,N,512),V和k的shape相同
output = torch.matmul(attn, v)

带有Attention的RNN模块组成的ser2seq,解码时候可视化如下:

在这里插入图片描述
在没有Attention时候,不同解码阶段都仅仅利用了同一个编码层的最后一个隐含输出,
加入Attention后,可以通过在每个解码时间步输入的都是不同的上下文向量,

以上图为例,解码阶段会将第一个开启解码标志(也就是Q)与编码器的每一个时间步的隐含状态(一系列Key和Value)进行点乘计算相似性得到每一时间步的相似性分数
然后通过softmax转化为概率分布
接着将概率分布和对应位置向量进行加权求和得到新的上下文向量
最后输入解码器中进行解码输出,
其详细解码可视化如下:
在这里插入图片描述
通过上述简单的attention引入,可以将机器翻译性能大幅提升,引入attention有以下几个好处:

  • 注意力显著提高了机器翻译性能
  • 注意力允许解码器以不同程度的权重利用到编码器的所有信息,可以绕过瓶颈
  • 通过检查注意力分布,可以看到解码器在关注什么,可解释性强

1.3 基于Transformer的seq2seq

基于Attention的seq2seq的结构虽然说解决了很多问题,但是其依然存在不足

  • 不管是采用RNN、LSTM还是GRU都不利于并行训练和推理,因为相关算法只能从左向右依次计算或者从右向左依次计算
  • 长依赖信息丢失问题,顺序计算过程中信息会丢失,虽然LSTM号称有缓解,但是无法彻底解决

最大问题应该是无法并行训练,不利于大规模快速训练和部署,也不利于整个算法领域发展,
故在Attention Is All You Need论文中抛弃了传统的CNN和RNN,将Attention机制发挥到底,整个网络结构完全是由Attention机制组成,这是一个比较大的进步。

Google所提基于Transformer的seq2seq整体结构如下所示:

在这里插入图片描述

其,包括6个结构完全相同的编码器,和6个结构完全相同的解码器,其中每个编码器和解码器设计思想完全相同,只不过由于任务不同而有些许区别,整体详细结构如下所示:
在这里插入图片描述
其中N=6,由于基于Tansformer的翻译任务已经转化为分类任务( 目标翻译句子有多长,那么就有多少个分类样本 ),故在解码器最后会引入FC+Softmax层进行概率输出,训练也比较简单,直接采用ce loss即可,对于采用大量数据训练好的预训练模型,下游任务仅仅需要训练FC层即可。
上述结构看起来有点复杂,一个稍微抽象点的图示如下:

在这里插入图片描述
看起来比基于RNN或者其余结构构建的seq2seq简单很多。

下面结合代码和原理进行深入分析
下一篇:学习视觉CV Transformer (2)

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

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

相关文章

万物“邮”爱,百余志愿者参与邮票艺术共创助力生物多样性

邮票作为生动形象的文化载体,传承着中华文化的历史和文明。自邮票问世以来,就以其精美的设计和图案,成为人们珍藏文化遗产和学习历史文化的窗口。野生动物保护一直是人们所关注的热门话题,相关部门也为宣传、拯救、保护珍贵濒危野…

[量化投资-学习笔记001]Python+TDengine从零开始搭建量化分析平台-数据存储

目录 0. 简介1. 获取交易数据2. 数据库搭建2.1. 数据库安装2.2. 创建数据库2.3. 创建超级表2.4. 创建子表 3.数据导入4. Grafana 安装4.1. 安装Grafana4.2. 安装TDengine插件 附件数据导入脚本历史交易数据-1分钟K线 0. 简介 Python:最常用的量化分析语言&#xff0…

【超参数研究02】使用随机搜索优化超参数

一、说明 在神经网络训练中,超参数也是需要优化的,然而在超参数较多(大于3个)后,如果用穷举的,或是通过经验约摸实现就显得费时费力,无论如何,这是需要研究、规范、整合的要点&#…

【自用】知识点梳理 自动控制第Z章 离散s

目录标题 离散XXXQ1 离散化的表达式和传递函数怎么匹配上? 离散系统的分析与校正Q ZOH有什么作用K ZOH的Z变换✨K Z变换表格模拟化矫正ZOH的等效Q 为什么离散化之后幅值会变化?Q 模拟化校正中ZOH环节为什么需要等效成惯性环节? 离散化的方法Q…

Android dumpsys介绍

文章目录 一、需求二、环境三、相关概念3.1 dumpsys3.2 Binder3.3 管道 四、dumpsys指令的使用4.1 dumpsys使用4.2 dumpsys指令语法 五、详细设计5.1 dumpsys流程图5.2 dumpsys查看电池信息5.2.1 dumpsys battery指令5.2.2 service->dump打印函数 5.3 dumpsys源码分析5.3.1 …

[support2022@cock.li].faust、[tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复

引言: 威胁网络安全的恶意软件不断涌现,而[support2022cock.li].faust勒索病毒则是其中的一员。这个网络黑暗角落的新星,以其数据绑架的方式,一度成为数据安全的威胁焦点。本文将探究[support2022cock.li].faust勒索病毒的运作方…

Cypress的安装与启动

目录 一:Cypress介绍 二:安装与使用 1、下载node.js 2、安装Cypress 3、启动Cypress 3、解决异常 三:总结 一:Cypress介绍 Cypress 是为现代网络而构建的下一代前端测试工具,用于解决开发者和 QA 工程师在测试现…

【Hydro】水文模型比较框架MARRMoT - 包含47个概念水文模型的Matlab代码

目录 说明源代码运行实例workflow_example_1.mworkflow_example_2.mworkflow_example_3.mworkflow_example_4.m 测试1、 结构体兼容性问题2、append的兼容性问题3、修改后的MARRMoT_model.m 说明 MARRMoT是一个新的水文模型比较框架,允许不同概念水文模型结构之间的…

BandZip 免费纯净快速的文件压缩/解压缩软件

BandZip 功能齐全、性能优异的免费文件压缩和解压缩工具。版本 7.x 及以上有广告,安装 7.x 以下版本即可。 功能以及特性 支持多种常见的压缩格式,包括 ZIP、RAR、7Z、TAR 等;高效的压缩算法,能够将文件压缩到较小的体积&#…

【网络安全 --- 任意文件下载漏洞(1)】任意文件下载漏洞

一,环境,工具准备 1-1 VMVare 16 虚拟机及下载安装(资源) 请参考以下博客安装(特详细):【网络安全 --- 工具安装】VMware 16.0 详细安装过程(提供资源)-CSDN博客【网络安…

vue2vue3--render函数(h)

目录 h函数 方法1. 在Options API中的使用 方法2. 在Composition API中的使用 Vue 2中的渲染函数 ​基础​ vue2 vue3 vue3--声明渲染函数 节点、树以及虚拟 DOM ​虚拟 DOM​ createElement 参数 深入数据对象 约束 vue2 vue3 使用 JavaScript 代替模板功能…

使用cpolar内网穿透实现远程Stackedit Markdown编辑器

文章目录 1. docker部署Stackedit2. 本地访问3. Linux 安装cpolar4. 配置Stackedit公网访问地址5. 公网远程访问Stackedit6. 固定Stackedit公网地址 StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保…

库克嘴上说着共赢,实际却是降低中国制造占比,外媒:真是老狐狸

近期库克再度访华,在成都的苹果线下零售店与消费者密切互动,参观立讯精密并表示与中国制造合作共赢,然而日本媒体拆解iPhone15却撕下了苹果的遮羞布,库克真的是老狐狸。 一直以来,苹果CEO库克都积极向中国消费者释放善…

《java核心卷Ⅰ》知识点总结(可作面试题)

🛫 JDK和JRE傻傻分不清?🛫 HelloWorld的输出都经历了啥?🛫 Java的三个版本都是啥?🛫 关于main方法你都知道啥?main方法被声明为private会怎样?🛫 强制and自动类型转换都…

使用whatweb和python批量获取指纹信息

该程序去除了whatweb输出的一些乱码 import sys import os from pathlib import Path if __name__ "__main__":type sys.stdout.encoding file1Path("out.txt")if file1.is_file():os.remove("out.txt")os.system("whatweb -i url.txt -…

Flutter页面滑动回调处理解决方法

文章目录 TabBarViewTabBarView简介TabBarView详细介绍 TabBarView滑动时如何处理事务例子 PageControllerPageController介绍PageController 的详细介绍 TabBarView TabBarView简介 TabBarView 是 Flutter 中的一个用于显示选项卡视图的小部件。它通常与 TabBar 一起使用&am…

Vue 实战项目(智慧商城项目): 完整的订单购物管理功能 内涵资源代码 基于Vant组件库 Vuex态管理 基于企业级项目开发规范

鹏鹏老师的实战开发项目 智慧商城项目 接口文档:安全问题(需要私信即可) 演示地址:跳转项目地址 01. 项目功能演示 1.明确功能模块 启动准备好的代码,演示移动端面经内容,明确功能模块 在这里插入图…

腾讯云SSH连接不上的一个解决办法

最近在购买完腾讯云服务器后Xshell登录时老是报出Connection failed问题,最后发现问题所在。 解决方法 本人购买的是校园套餐中的轻量应用服务器2核2G,购买完以后打开控制台 在轻量级云服务器中找到自己购买的云服务器后,重置密码&#xff0…

【JavaEE初阶】 CAS详解

文章目录 🌲什么是 CAS🚩CAS伪代码 🎋CAS 是怎么实现的🌳CAS的应用🚩实现原子类🚩实现自旋锁 🎄CAS 的 ABA 问题🚩什么是 ABA 问题🚩ABA 问题引来的 BUG🚩解决…

Spring Boot实战 | 如何整合高性能数据库连接池HikariCP

专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https:/…