ViT:3 Compact Architecture

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

视觉转换器(ViT)架构已经广受欢迎,并广泛用于计算机视觉应用。然而,随着 ViT 模型规模的扩大,可训练参数直线上升,从而影响了部署和性能。因此如何进行有效的优化成为热点领域,各种的研究方向层出不穷。下图左一为基本的ViT块,左二到左五代表着紧凑架构优化法、剪枝优化法、知识蒸馏法和量化优化法。橙色虚线的部分代表每个领域重点优化的组件。

本文先来看看Compact Architecture的优化方向。Compact Architecture是指设计轻量级、高效或者紧凑的模型,同时需要在下游任务中保持高性能。它包含各种策略和方法,可在不影响性能的情况下减小模型大小、计算复杂性和内存占用。这种方法的研究集中在2021年-2022年,紧凑架构对于算力不那么充裕的终端的确是一个很好的改进。这个领域一般涉及到如下几种优化方法,要么创新整体架构,要么优化整体架构,要么进行架构搜索,要么优化注意力机制。

架构优化

2020年Reformer引入了两种技术提高Transformer的效率。利用局部敏感哈希的替换点积注意力,将其复杂度从 O(L) 更改为 O(L log L),其中 L 是序列的长度。其次使用可逆残差层而不是标准残差,允许在训练过程中只存储一次激活,而不是 N 次。


2022年EfficientFormer分析了基于ViT的模型架构和算子,没有集成MobileNet结构,是一个完全基于Transformer的模型。这个架构定义了两种元块(MetaBlock),MB4D是基于CNN,而MB3D是传统的ViT块。

它一共有4个阶段,并且在最后两个阶段仅启用MB3D。可以这么理解,一开始先用CNN,到了最后才是使用注意力。因为一方面由于MHSA的计算相对于Token长度呈二次增长,因此在早期阶段集成它会大大增加计算成本。另一方面网络的早期阶段利用CNN捕获了低级特征,而后期阶段则学习长期的依赖关系。

它其实还构建了一个超网,采用搜索算法包括找到最优的超参数Cj(每个阶段的宽度)、Nj(每个阶段的块数,即深度)和最后N个要应用MB3D的块。实验结果证明还是挺不错的,而且在iphone12运行记过还是低延时。

“小编任务这个表格可以琢磨一下,其中第二行的Type和第三行的参数规模!”


之后半年的EfficientFormerV2提出了一种低延迟、高参数效率的超网。

(a)为原来EfficientFormer1.0的模型,在2.0的版本中奖FFN(b)在所有的块中进行统一,同时将注意力机制块进行调整(c)。在高分辨率的场景利用下采样和上采样(插值)的办法,将整体延迟从3.5ms压缩到1.5ms,而没有任何性能的损失。

EfficientFormer2.0提出了一种新的超网络设计方法,该方法在维护较高的准确性的同时,可以在移动设备上运行。同时它提出了一种细粒度的联合搜索策略,该策略可以同时优化延迟和参数数量,从而找到高效的架构。

最后EfficientFormer2.0在ImageNet-1K 数据集上的准确性比MobileNetV2和MobileNetV2×1.4高出约 4%,同时具有相似的延迟和参数。

<Transformer居然还能比MobileNet快!,请细品下图>

架构搜索优化

架构搜索一般会采用特定的搜索算法来找寻最优的网络参数,进而构建超网框架。比如2022年的Vision Transformer Slimming来探索和发现针对特定任务或某些约束下量身定制的紧凑架构。

随着budget的收缩,每层头数目不断地被优化降低。下图为它和其他几种瘦身算法的对比。DeiT-S 上,ViT-Slim的搜索过程只需要约43个 GPU 小时,并且搜索的结构灵活,不同模块的维度多样。根据运行设备的accuracy-FLOPs权衡的要求采用预算阈值,并执行重新训练过程以获得最终模型。大量实验表明,ViT-Slim可以在各种视觉转换器上压缩高达 40% 的参数和 40% 的 FLOP,同时在 ImageNet 上将准确度提高约 0.6%。

早在2021年的Autoformer利用weight Entanglement训练超网,然后在预设置好的搜索空间进行采样到子网,紧接着更新子网的参数,冻结其余参数不使其更新,最终通过进化算法得到参数量最小且精度最高模型。

下图为AutoFormer 超网络的整体架构。请注意每个层和深度中的Transformer块都是动态的。实线部分表示它们是被选择的,而虚线部分则不是。下图右为AutoFormer中详细的Transformer块。在层中搜索最佳嵌入维度、头数、MLP比率、Q-K-V维度的最佳块。

不同子网的梯度在ViT中与超网的梯度冲突比CNN更严重,这导致训练过早饱和,收敛性较差。为了缓解这个问题,2022年的NASViT提出了一系列技术,包括梯度投影算法、可切换层缩放设计以及简化的数据增强和正则化训练配方。所提出的技术显著改善了所有子网的收敛性和性能。

上图为NASViT的整体架构,下图为NASViT的搜索空间。

另外NASViT的注意力机制块如下:

此外,还有TF-TAS研究了免训练架构搜索方法。UniNet引入了上下文感知下采样模块,改善了Transformer和MLP的适配能力。

注意力机制优化

这个领域的优化专注于通过引入自适应注意力、学习稀疏注意力模式和动态调整注意力机制来降低计算复杂性。Fayyaz等通过对重要标记进行评分和自适应采样来实现自适应注意力。PatchMerger提取区域Token之间的全局信息,并通过自注意力与区域Token之间的信息交换局部自注意力。


如上图所示DynamicViT提出的预测模块(中间部分)插入到Transformer 块之间,以根据前一层产生的特征选择性地修剪掉信息量较少的Token。

上图通过可视化展示了修剪过程,从直观上还是比较好理解。通过这样的算法,后续层中处理的Token会大幅减少。


此外还有一种高效的视觉Transformer骨干网络SepViT,它借鉴深度可分离卷积的思想,通过深度可分离自我注意力实现局部-全局信息交互。

SepViT利用窗口令牌嵌入和分组自注意力,以较低的计算成本实现窗口间的注意力关系,提升远程视觉交互。实验表明,SepViT在性能与延迟之间实现了出色的权衡,相较于同类模型,在ImageNet分类上提升了精度并降低了延迟,同时在语义分割、目标检测和实例分割等任务中也表现优异。

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

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

相关文章

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-27含并行连结的网络GoogLeNet

27含并行连结的网络GoogLeNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as pltclass Inception(nn.Module):# c1--c4是每条路径的输出通道数def __init__(self, in_channels, c1, c2, c3, …

【kaggle数据集无法下载解决办法】

kaggle数据集无法下载的解决办法 当我们在做机器学习相关问题的时候&#xff0c;需要到kaggle网站上下载数据集&#xff0c;但是很多时候速度很慢或者连接超时等问题&#xff0c;此时解决办法如下&#xff1a; 在本地安装Kaggle API包 打开终端输入如下指令&#xff1a; pip i…

vscode使用内置插件断点调试vue2项目

1、首先项目中要开启source-map 在vue.config.js 文件中 module.exports {configureWebpack: {devtool: process.env.NODE_ENV ! "production" ? "source-map" : ,} }2、项目根目录新建.vscode/launch.js文件 {"configurations": [{"ty…

解析JavaScript中逻辑运算符和||的返回值机制

本文主要内容&#xff1a;了解逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值。 在JavaScript中&#xff0c;逻辑运算符 &&&#xff08;逻辑与&#xff09;和 ||&#xff08;逻辑或&#xff09;的返回值可能并不总…

浏览器提升编译速度小技巧(一)- 防病毒排除

1.引言 在Chrome开发过程中&#xff0c;编译速度是影响开发效率的关键因素之一。编译一个大型项目如Chrome&#xff0c;往往需要处理大量的代码文件和依赖库&#xff0c;这个过程既复杂又耗时。因此&#xff0c;任何能够提升编译速度的技巧&#xff0c;都能显著提高开发效率&a…

Dubbo本地调试解决方案

有三种方式:原文链接 本文尝试使用了原作者推荐的第二种方式&#xff0c;在启动本地的服务时加入全局版本号的参数 -Ddubbo.service.versiontest同时需要修改消费者侧API的版本号。 DubboReference(version "test")private IContentPortraitService contentPortra…

Python-题库篇-基础

文章目录 Python-题库篇-基础题目001: 在Python中如何实现单例模式。题目002&#xff1a;不使用中间变量&#xff0c;交换两个变量a和b的值。题目003&#xff1a;写一个删除列表中重复元素的函数&#xff0c;要求去重后元素相对位置保持不变。题目004&#xff1a;假设你使用的是…

CentOS7.6安装RabbitMQ

前言&#xff1a;因为RabbitMQ是ERlang语言编写所以要先安装ERlang再安装RabbitMQ 安装ERlang 借鉴前辈原文地址&#xff1a;https://www.cnblogs.com/fengyumeng/p/11133924.html 第一步&#xff1a;安装依赖 yum -y install gcc glibc-devel make ncurses-devel open…

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot&#xff1a;基础使用详解 文章目录 快速上手 Spring Boot&#xff1a;基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置&#xff1a;以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…

使用Ghostscript将PostScript(.ps)文件转换为PDF文件格式

如何使用Ghostscript将PostScript文件转换为PDF文件格式: /* Example of using GS DLL as a ps2pdf converter. */#if defined(_WIN32) && !defined(_Windows) # define _Windows #endif #ifdef _Windows /* add this source to a project with gsdll32.dll, or comp…

顶尖项目经理都在用的SOP

接受任务SOP 了解任务背景了解任务目标&#xff08;包含deadline&#xff09;拆解任务&#xff0c;确认负责人执行方案审批确认跟进执行并定期汇报验收结果&#xff0c;进行反馈相关文档存档&#xff0c;形成闭环 推进任务SOP - PDCA循环 制定计划 Plan。依据目标&#xff0c…

MacBook Pro 忘记root用户密码,重置密码步骤

一、以普通用户名登录系统&#xff0c;并打开terminal终端&#xff0c; 输入&#xff1a;sudo bash sudo bash Password:*****&#xff08;输入当前用户的密码&#xff09; 成功后进入bash-3.2#的命令模式 二、在bash-3.2#命令模式下 输入&#xff1a;sudo passwd root sud…

生信算法8 - HGVS转换与氨基酸字母表

HGVS 概念 HGVS 人类基因组变异协会(Human Genome Variation Society)提出的转录本编号&#xff0c;cDNA 参考序列(以前缀“c.”表示)、氨基酸参考序列(以前缀“p.”表示)。cDNA 中一种碱基被另一种碱基取代&#xff0c;以“>”进行表示&#xff0c;如&#xff1a;c.2186A&…

python数据分析——数据预处理

数据预处理 前言一、查看数据数据表的基本信息查看info&#xff08;&#xff09;示例 查看数据表的大小shape&#xff08;&#xff09;示例 数据格式的查看type()dtype&#xff08;&#xff09;dtypes&#xff08;&#xff09;示例一示例二 查看具体的数据分布describe()示例 二…

算法常见手写代码

1.NMS def py_cpu_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 dets[:, 0]y1 dets[:, 1]x2 dets[:, 2]y2 dets[:, 3]scores dets[:, 4]#每一个检测框的面积areas (x2 - x1 1) * (y2 - y1 1)#按…

Windows环境如何ssh远程连接本地局域网内的Archcraft系统

文章目录 前言1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接小结 5. 固定SSH公网地址6. SSH固定地址连接 前言 本文主要介绍如何在Archcraft系统中安装Cpolar内网穿透工具,并以实现Windows环境ssh远程连接本地局域网Archcraft系统来说明使用…

相位和展开相位

相位 (Phase) 相位是一个周期信号在一个周期内的位置&#xff0c;通常以角度&#xff08;度或弧度&#xff09;表示。在许多应用中&#xff0c;相位被限制在一个周期内。例如&#xff0c;相位通常被限定在 −180∘到 180∘ 或 0∘ 到 360∘ 之间。 示例 −90∘ 表示信号在周…

从基础到高级:视频直播美颜SDK的开发教学

本篇文章&#xff0c;小编将从基础到高级&#xff0c;详细讲解视频直播美颜SDK的开发过程&#xff0c;帮助开发者更好地掌握这一技术。 一、基础知识 什么是视频直播美颜SDK&#xff1f; 视频直播美颜SDK包含了一系列用于视频处理的功能模块&#xff0c;特别是美颜效果的实现…

Linux高并发服务器开发(一)GCC和Make

文章目录 1 工作流程2 静态库和动态库连接2.1 静态连接2.2 动态链接 3 静态库制作和使用4 动态库的制作和使用5 GDB 调试器6 Makefile 1 工作流程 第一步预处理&#xff0c;生成.i 第二部生成汇编文件.s 第三部生成目标代码.o 第四部生成可执行文件 2 静态库和动态库连接 2.1…

使用Mixamo极简绑骨,导入unity中使用

如果你只想专注于角色建模&#xff0c;对于动画设计没有过多精力&#xff1b;如果你想白嫖别人的角色动画&#xff0c;用到自己的模型上&#xff1b;那么&#xff0c;这个网站很适合你&#xff1a;https://www.mixamo.com/ 操作步骤&#xff1a; 首先将自己的模型上传到这个网…