[论文分享]Skip-Attention: Improving Vision Transformers by Paying Less Attention

news2024/9/23 23:28:28

Skip-Attention: Improving Vision Transformers by Paying Less Attention

这项工作旨在提高视觉transformer(ViT)的效率。

在这里插入图片描述

虽然 ViT 在每一层都使用计算昂贵的自我注意操作,但我们发现这些操作在各层之间高度相关——这是导致不必要的计算的关键冗余。基于这一观察结果,我们提出了SKIPAT,一种重用前一层的自我注意力计算来近似一个或多个后续层注意力的方法。

为了确保跨层重用自注意力块不会降低性能,我们引入了一个简单的参数函数,它的性能优于基线transformer的性能,同时计算速度更快。

我们展示了我们的方法在ImageNet-1K上的图像分类和自监督学习,ADE20K上的语义分割,SIDD上的图像去噪和DAVIS上的视频去噪方面的有效性。我们在所有这些任务中以相同或更高的精度水平实现了更高的吞吐量。

主要贡献

  1. 我们提出了一种新颖的插件模块,可以在任何ViT架构中安装,以减少昂贵的O(n2)自我注意力计算
  2. 我们在ImageNet,Pascal-VOC2012,SIDD,DAVIS和ADE20K的吞吐量方面实现了最先进的性能,精度相同或更好(在后者中,我们获得了40%的加速)
  3. 我们通过减少26%的自监督预训练时间(无下游精度损失)和展示卓越的设备上延迟(进一步证明了我们方法的通用性。
  4. 最后,我们分析了性能提升的来源,并广泛消融了我们的方法,以提供一个可用于权衡准确性和吞吐量的模型系列

方法

在这里插入图片描述
3.2. 动机:层相关性分析
注意力图关联(Attention-map correlation)。ViT 中的 MSA 块将每个补丁与其他每个补丁的相似性编码为 n × n 个注意力矩阵。该运算符的计算成本很高,复杂度为 O(n2)。随着 ViT 的扩展,即随着 n 的增加,复杂性呈二次增长,并且此操作成为瓶颈。最近的NLP工作[51,52]表明,SoTA语言模型中相邻层之间的自我注意表现出非常高的相关性。这就提出了一个问题——是否值得在视觉transformer的每一层计算自我注意力?

为了解决这个问题,我们分析了ViT不同层之间自我注意图的相关性。如图 2 所示,来自类标记 A[CLS] 的自注意力映射表现出高度相关性,尤其是在中间层中。 和 之间的余弦相似度可以高达 0. 97。如图2中每个注意力图的底部所示。从其他token embeddings(嵌入)中也观察到类似的行为,我们在补充材料中对其进行了分析。我们通过计算每个 i,j ∈ L 之间的中心核对齐 (CKA) [12, 27] 来定量分析 ImageNet-1K 验证集所有样本的这种相关性 。CKA 测量从网络的中间层获得的表示之间的相似性,其中 CKA 的高值表示表示之间的高度相关性。从图 3(a)中,我们观察到ViT-T在A[CLS]之间具有很高的相关性,尤其是从第3层到第10层。

特征关联(Feature correlation)。在ViT中,高相关性不仅限于A[CLS],而且MSA块ZMSA的表示在整个模型中也显示出高相关性[42]。为了分析这些表示之间的相似性,我们计算了每个i,j∈L的Z iMSA和ZjMSA之间的CKA。我们从图3(b)中观察到,ZMSA在模型的相邻层之间也具有很高的相似性,特别是在早期层中,即从第2层到第8层。

3.3. 通过跳过注意力来提高效率

基于我们对transformer的MSA块之间高表示相似性的观察(小节3.2),我们建议利用注意力矩阵和MSA块表示之间的相关性来提高视觉transformer的效率。我们不是在每一层独立计算MSA操作(3),而是探索一种简单有效的策略来利用这些层的特征之间的依赖关系。

特别是,我们建议通过重用其相邻层的表示来跳过transformer的一个或多个层中的MSA计算。我们将此操作称为“跳过注意”或“SKIPAT”。由于跳过整个 MSA 块的计算和内存优势大于仅跳过自注意操作 (O(n2d+nd2) 与O(n2d)),在本文中,我们专注于前者。然而,我们不是直接重用特征,即将特征从源 MSA 块复制到一个或多个相邻的 MSA block,而是引入了参数函数。参数函数确保直接重用特征不会影响这些 MSA 块中的平移不变性和等方差,并充当强大的正则化器来改进模型泛化。

在这里插入图片描述
在这里插入图片描述

实验结果

图像分类

在这里插入图片描述
从表1中,我们观察到,与ViT不同变体上的所有SoTA方法相比,S KIPAT实现了最佳的准确性与效率权衡。值得注意的是,我们的性能分别比基线ViT-T、ViT-S和ViT-B高0.1%、 0.4%和0.4%,而SoTA方法的准确度较低或与基线相差无几。由于 SKIPAT 使用参数函数来跳过计算 MSA 块,因此我们在参数数量和 FLOP 方面的减少与 SoTA 相当。在通量方面,S KIPA T 分别比基线 ViT-T、ViT-S 和 ViT-B 快 19%、21% 和 25%。 德加尼等. [13] 强调使用吞吐量作为衡量模型效率的指标的重要性:因为 FLOP 的减少并不一定对应于延迟的改善,因为它没有考虑并行度或其他硬件细节。根据这一论点,我们观察到,虽然 ATS [17] 和 SPViT [26] 等 SoTA 方法实现了 FLOP 的大幅减少,但与 S KIP A T 相比,它们实际上具有较低的吞吐量。此外,HVT [40] 虽然在通量和 FLOP 方面都实现了更高的增益,但 top1 精度较差( ViT-T 下降 2.6%,ViT-S 下降 1.8%)。 因此,SKIPAT 展示了与 SoTA 方法相比同时提高准确性和通量的能力。

自监督学习

接下来,我们使用DINO [5]展示了SKIPA T作为其在自监督表示学习(SSL)骨干中的用途的通用性。由于SSL方法在预训练阶段的计算和训练时间方面非常昂贵,因此我们说明了SKIPAT实现了与使用ViT相当的性能,但训练时间更短。按照DINO [5]的实验设置,我们使用ViT-S/16 [15]作为我们的学生和教师网络,具有SKIPAT参数函数。我们使用DINO预训练基线和我们的100个epoch。我们观察到 SKIPAT 实现了与完全训练的 DINO 几乎相同的性能,训练时间减少了约 26%(96 GPU 小时为 73.3%,131 GPU 小时为 73.6%)。当在100个epoch上训练时,我们观察到SKIPAT比DINO高出0.5%(74.1%对73.6%)。我们在补充材料中展示了 S KIPAT 对下游任务的性能。
在这里插入图片描述

语义分割

我们超越了分类,展示了 S KIPAT 对语义分割等密集预测任务的性能。我们遵循[31,32]中的实验设置,并使用MMSegmentation [11]在ADE20K[70]上评估SKIPAT 。我们从表4中观察到, SKIPAT 的性能始终优于所有 VIT 系列,FLOP 减少 15%,吞吐量提高 25%。 有趣的是,S KIP A T-S(ViT-S + SKIPA T)的mIoU高出8%, 同时比ViT-T快。此外,SKIPA T S 的 mIoU 与 Swin-T [31] 相当,同时 FLOP 少 3× 个,为 1。7×更快。与完全基于卷积的架构相比,S KIP A T-T(ViT-T + SKIPA T)在mIoU中与ResNet-18相当,同时有4个。 7× 更少的 FLOP 和 1.快 8×。
在这里插入图片描述

图像去噪

SKIPA T 还可以推广到低级任务,例如 SIDD [1] 上的图像去噪,它由具有真实世界噪声的图像组成。我们还证明了SKIPAT可以推广到其他transformer架构。特别是,我们在SoTA图像去噪模型Uformer [57]上应用了它。Uformer 是一个 U 形分层网络,以 Swin transformer块作为编码器和解码器,并跳过它们之间的连接。在 S KIP A T 中,我们通过 S KIPA T 参数函数重用相应编码器块的注意力,跳过每个解码器块中的窗口自注意 (WSA) 块。具体实施见补充材料。按照[57]中的实验设置,我们在表5中观察到,SKIPAT优于基线Uformer 变体,平均通量高出25%。此外,我们观察到S KIP A T-B(Uformer-B + SKIPAT)在PSNR和SSIM方面实现了与Restormer相当的性能[67],这是SoTA图像去噪方法,同时具有2×更少的FLOP。因此,我们展示了 SKIPAT 泛化到不同任务以及跨架构的能力。

在这里插入图片描述

视频去噪

我们进一步将我们的模型应用于视频去噪的时间任务。作为编码器和解码器骨干,我们使用UniFormer [28],这是一种具有3D卷积和时空全局自注意力块的U形混合编码器-解码器架构 。补充材料中提供了详细的词条。与图像去噪类似,我们在解码器中跳过 MSA 块,但是,只需采用朴素的 SKIP A T,其中我们使用 Identity fu nction 重用相应编码器块的窗口自注意矩阵 A。我们凭经验观察到,重用注意力在这个任务中效果更好,并显示了我们的方法应用于不同场景的能力。我们遵循 [47] 中的实验设置,并在 DAVIS [41] 数据集上训练 SKIPAT。我们使用 Charbonnier 损失 [6] 在 7 × 128 × 128 的补丁上使用多输入多输出 (MIMO) 范式(即模型从 7 个输入帧输出 7 个重建帧)进行训练,噪声水平 σ = 30。从表6中,我们观察到SKIPAT的性能与基线均匀器相当,同时FLOP减少了17%。这表明 SKIPAT 可以泛化到时态任务。

在这里插入图片描述

结论

我们提出了SKIPAT,一个可以放置在任何ViT架构中的插件模块,以减少昂贵的自我注意力计算。SKIPAT 利用跨 MSA 块的依赖关系,并通过重用先前 MSA 块的注意力来绕过 att ention 计算。为了确保隐喻共享是关怀的,我们引入了一个简单而轻的参数函数,它不会影响MSA中编码的感应偏置。SKIPAT 函数能够处理跨令牌关系,并优于基线,同时在吞吐量和 FLOP 方面计算速度更快。我们将 SKIPAT 插入不同的transformer架构中,并展示了其在 7 个不同任务上的有效性。

reference

[1] VENKATARAMANAN S, GHODRATI A, ASANO Y M, 等. Skip-Attention: Improving Vision Transformers by Paying Less Attention[M/OL]. arXiv, 2023[2023-07-31]. http://arxiv.org/abs/2301.02240. DOI:10.48550/arXiv.2301.02240.

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

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

相关文章

计算机网络-笔记-第二章-计算机网络概述

目录 二、第二章——物理层 1、物理层的基本概念 2、物理层下面的传输媒体 (1)光纤、同轴电缆、双绞线、电力线【导引型】 (2)无线电波、微波、红外线、可见光【非导引型】 (3)无线电【频谱的使用】 …

linux问题定位

1.CPU工作原理 2.Linux内存分配 3.栈 1).存储局部变量 函数参数 函数返回值的地方 2).每个线程的栈空间连续且相互独立 3).使用 x /100a $esp 可以看到栈内存中的原始数据 3.函数调用过程 函数调用过程在栈中如何组织数据的 4.堆 三级堆管理…

研磨设计模式day13组合模式

目录 场景 不用模式实现 代码实现 有何问题 解决方案 代码改造 组合模式优缺点 思考 何时选用 场景 不用模式实现 代码实现 叶子对象 package day14组合模式;/*** 叶子对象*/ public class Leaf {/*** 叶子对象的名字*/private String name "";/**…

KVM虚拟化平台安装及创建虚拟机

文章目录 一、KVM 简介二、安装KVM虚拟化平台1、方式一:安装操作系统时,添加虚拟化功能2、方式二:基于现有系统,安装虚拟化功能3、验证KVM安装是否无误 三、创建虚拟机1、创建虚拟机前环境准备工作2、创建CentOS7.5系统虚拟机 一、…

网工必备知识之——防火墙篇

目录 一、背景 二、类型 2.1.过滤防火墙 2.2.应用网关防火墙 2.3.服务防火墙 2.4.监控防火墙 三、功能 3.1.网络安全屏障 3.2.网络安全策略 3.3.进行监控审计 3.4.防止内部信息的外泄 四、五个安全域 五、三种工作模式 5.1交换模式(二层模式): 5.2路由模式(三层…

恶意软件分析和取证:深入研究各类恶意软件,讨论分析技术和数字取证方法,了解攻击者的行为和动机

章节一:引言 在当今数字化的世界中,恶意软件的威胁不断演化,给个人、企业 ja 尤其是政府带来了巨大的安全风险。恶意软件如病毒、木马、蠕虫等形式多样,攻击手段不断升级,导致了信息泄露、财产损失 ja 甚至国家安全的…

【深度学习】实验02 鸢尾花数据集分析

文章目录 鸢尾花数据集分析决策树K-means 鸢尾花数据集分析 决策树 # 导入机器学习相关库 from sklearn import datasets from sklearn import treeimport matplotlib.pyplot as plt import numpy as np# Iris数据集是常用的分类实验数据集, # 由Fisher, 1936收集…

CFC编程入门_【10分钟学会】

什么是CFC: 【差不多10分钟全学会】 CFC是图形化编程, 跟单片机的连线一样, 唯一的区别:功能块右侧是【只能输出】引脚。 只有左侧引脚可以输入输出。 有哪些控件: 指针:用于拖动功能块。 控制点&#xf…

C#将text文本中的单双行分开单独保存

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文本的分割1.设定text文件的名称为02.文本导出 文本的分割 1.设定text文件的名称为0 代码如下: using System; using System.Collections.Generic; us…

【Seata】01 - Seata XA 模式 Demo 调用流程分析

文章目录 前言参考目录版本说明前置知识1、关于事务的理论知识2、关于 Seata3、Seata 领域模型 测试 Demo1、模块说明2、调用逻辑说明3、分析流程说明4、注意事项 Seata XA 模式 Commit 调用流程分析1、调用流程图2、XA 模式流程以及操作命令3、业务模块:流程入口3.…

掌握Six Sigma:逐步解锁业务流程优化的秘密之匙

一、Six Sigma方法简介 1. Six Sigma的起源和概念 Six Sigma起源于1980年代的摩托罗拉公司。当时的摩托罗拉在面临激烈的全球竞争和持续的质量问题时,发明了这种系统的管理方法,并通过实施,获得了显著的成绩。 所谓的“Six Sigma”&#x…

Tensorflow2.0搭建网络八股

目录 引言:keras与Tensorflow2.0结合 一、六步法 1.导入头文件:import 2.收集处理训练集和测试集:train, test: 3.描述各层网model tf.keras.models.Sequential: 4.描述使用什么优化反向传播:model.c…

Python中使用print()时如何实现不换行

平时刷题的时候大家可能会发现打印字符的时候需要你不换行才能得到正确答案,那么如何实现的。下面直接看例子。 使用print()函数时其实还有个默认的参数end,来看看具体怎么回事 list [a,b,c] for i in list:print(i)打印结果:在这里插入代…

【C/C++】父类指针指向子类对象 | 隐藏

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

CleanMyMac最新版4.14Mac清理软件下载安装使用教程

苹果电脑是很多人喜欢使用的一种电脑&#xff0c;它有着优美的外观&#xff0c;流畅的操作系统&#xff0c;丰富的应用程序和高效的性能。但是&#xff0c;随着时间的推移&#xff0c;苹果电脑也会产生一些不必要的文件和数据&#xff0c;这些文件和数据就是我们常说的垃圾。那…

docker服务如何正确关停

说明&#xff1a;停止 docker 服务之前&#xff0c;先把所有的容器都停掉&#xff0c;如果没停掉&#xff0c;再重启 docker 服务之后&#xff0c;所有的容器就会成为 Exited 状态。如果你只是想停止 docker 服务&#xff0c;docker 中的容器还继续提供服务&#xff0c;需要在d…

NVIDIA DLI 深度学习基础 答案 领取证书

最后一节作业是水果分类的任务&#xff0c;一共6类&#xff0c;使用之前学习的知识在代码段上进行填空。 加载ImageNet预训练的基础模型 from tensorflow import kerasbase_model keras.applications.VGG16(weights"imagenet",input_shape(224, 224, 3),include_t…

首页搜索框传递参数,并在搜索页面中的搜索框中进行显示,搜索框绑定回车键进行搜索

实现搜索条件和搜索内容固定&#xff0c;以及回车键搜索跳转 1.写出搜索条件和搜索框 <form class"parent"><select id"searchSelect" style"border: 1px solid #325da7;border-right: none;" value"resource"><opt…

Mysql B+数索引结构

一、B树和B树区别 二、 B 树形成过程 三、页分裂过程 3.1 页分裂过程实例 3.1.1 原有数据1、3、5形成如下数据页 3.1.2 先新插入数据4&#xff0c;因为 页10 最多只能放3条记录所以我们不得不再分配一个新页&#xff1a; 新分配的数据页编号可能并不是连续的&#xff0c;也…

threejs特殊几何体(一:文字几何体对象)

threejs中文字几何体通过newTextGeometry&#xff08;&#xff09;生成&#xff0c;它被单独作为一个类存在于threejs中const txtGeo new TextGeometry("threejs", { ...opts, font: font }); 我们先看效果&#xff1a; <template><div></div> &…