无需训练,自动扩展的视觉Transformer来了

2023-11-14

来自德克萨斯大学奥斯汀分校、悉尼科技大学和谷歌的研究者提出了一个无需训练就能自动扩展框架 As-ViT,其能以高效和有原则的方式自动发现和扩展 ViT。

当前 Vision Transformers (ViT)领域有两个主要的痛点:1、缺少对 ViT 进行设计和扩展的有效方法;2、训练 ViT 的计算成本比卷积网络要大得多。

【注】技术交流、资料获取,文末查看

为了解决这两个问题,来自得克萨斯大学奥斯汀分校、悉尼科技大学和谷歌的研究者提出了 As-ViT(Auto-scaling Vision Transformers),这是一个无需训练的 ViT 自动扩展框架,它能以高效且有原则的方式自动设计和扩展 ViT。

图片

论文链接:https://arxiv.org/abs/2202.11921

具体来说,研究人员首先利用无训练搜索过程设计了 ViT 拓扑的「种子」,这种极快的搜索是通过对 ViT 网络复杂性的全面研究来实现的,从而产生了与真实准确度的强 Kendall-tau 相关性。其次,从「种子」拓扑开始,通过将宽度 / 深度增加到不同的 ViT 层来自动化 ViT 的扩展规则,实现了在一次运行中具有不同数量参数的一系列架构。最后,基于 ViT 在早期训练阶段可以容忍粗粒度 tokenization 的经验,该研究提出了一种渐进式 tokenization 策略来更快、更节约地训练 ViT。

作为统一的框架,As-ViT 在分类(ImageNet-1k 上 83.5% 的 top1)和检测(COCO 上 52.7% 的 mAP)任务上实现了强大的性能,无需任何手动调整或扩展 ViT 架构,端到端模型设计和扩展过程在一块 V100 GPU 上只需 12 小时。

具有网络复杂度的 ViT 自动设计和扩展

为加快 ViT 设计并避免繁琐的手动工作,该研究希望以高效、自动化和有原则的 ViT 搜索和扩展为目标。具体来说有两个问题需要解决:1)在训练成本最小甚至为零的情况下,如何高效地找到最优的 ViT 架构拓扑?2)如何扩大 ViT 拓扑的深度和宽度以满足模型尺寸的不同需求?

扩展 ViT 的拓扑空间

在设计和扩展之前,首先是为 As-ViT 扩展的拓扑搜索空间:首先将输入图像嵌入到 1/4 尺度分辨率的块中,并采用逐级空间缩减和通道加倍策略。这是为了方便密集预测任务,例如需要多尺度特征的检测。

图片

通过流形传播评估初始化时的 ViT 复杂性

ViT 训练速度很慢,因此,通过评估训练模型的准确率来进行架构搜索的成本将高得让人难以承受。最近学界出现很多用基于 ReLU 的 CNN 的免训练神经架构搜索方法,利用局部线性图 (Mellor et al., 2020)、梯度敏感性 (Abdelfattah et al., 2021)、线性区域数量 (Chen et al., 2021e;f) 或网络拓扑(Bhardwaj et al., 2021)等方式。

然而 ViT 配备了更复杂的非线性函数如 self-attention、softmax 和 GeLU。因此需要以更一般的方式衡量其学习能力。在新研究中,研究者考虑通过 ViT 测量流形传播的复杂性,以估计复杂函数可以如何被 ViT 逼近。直观地说,一个复杂的网络可以在其输出层将一个简单的输入传播到一个复杂的流形中,因此可能具有很强的学习能力。在 UT Austin 的工作中,他们通过 ViT 映射简单圆输入的多种复杂性:h(θ) = √ N [u^0 cos(θ) + u^1 sin(θ)]。这里,N 是 ViT 输入的维度(例如,对于 ImageNet 图像,N = 3 × 224 × 224),u^0 和 u^1 形成了圆所在的 R^N 的二维子空间的标准正交基。

搜索 ViT 拓扑奖励

研究者提出了基于 L^E 的免训练搜索(算法 1),大多数 NAS(神经架构搜索)方法将单路径或超级网络的准确率或损失值评估为代理推理。当应用于 ViT 时,这种基于训练的搜索将需要更多的计算成本。对于采样的每个架构,这里不是训练 ViT,而是计算 L^E 并将其视为指导搜索过程的奖励。

除了 L^E,还包括 NTK 条件数 κΘ = λ_max/λ_min ,以指示 ViT 的可训练性(Chen et al., 2021e; Xiao et al., 2019; Yang, 2020; Hron et al., 2020)。λ_max 和 λ_min 是 NTK 矩阵 Θ 的最大和最小特征值。

图片

搜索使用强化学习方法,策略被定为联合分类分布,并通过策略梯度进行更新,该研究将策略更新为 500 step,观察到足以使策略收敛(熵从 15.3 下降到 5.7)。搜索过程非常快:在 ImageNet-1k 数据集上只有七个 GPU 小时 (V100),这要归功于绕过 ViT 训练的 L^E 的简单计算。为了解决 L^E 和 κΘ 的不同大小,该研究通过它们的相对值范围对它们进行归一化(算法 1 中的第 5 行)。

表 3 总结了新搜索方法的 ViT 拓扑统计数据。我们可以看到 L^E 和 κΘ 高度偏好:(1)具有重叠的 token (K_1∼K_4 都大于 stride ),以及(2)在更深层中更大的 FFN 扩展率(E_1 < E_2 < E_3 < E_4)。在注意力分裂和正面数量上没有发现 L^E 和 κΘ 的明显偏好。

图片

ViT 自主的原则型扩展

得到最优拓扑后,接下来要解决的一个问题是:如何平衡网络的深度和宽度?

目前,对于 ViT 扩展没有这样的经验法则。最近的工作试图扩大或增长不同大小的卷积网络以满足各种资源限制(Liu et al., 2019a; Tan & Le, 2019)。然而,为了自动找到一个有原则的扩展规则,训练 ViT 将花费巨大的计算成本。也可以搜索不同的 ViT 变体(如第 3.3 节中所述),但这需要多次运行。相反,「向上扩展,scaling-up」是在一个实验中生成多个模型变体的更自然的方式。因此,该研究试图以一种免训练且有原则的有效方法将搜索到的基本「种子」ViT 扩展到更大的模型。算法 2 中描述了这种自动扩展方法:

图片

初始架构的每个阶段都有一个注意力块,初始隐藏维度 C = 32。每次迭代找出最佳深度和宽度,以进行进一步向上扩展。对于深度,该研究尝试找出要加深哪个阶段(即,在哪个阶段添加一个注意力块);对于宽度,该研究尝试发现最佳扩展比(即,将通道数扩大到什么程度)。

图片

扩展轨迹如下图 3 所示。比较自主扩展和随机扩展,研究者发现扩展原则更喜欢舍弃深度来换取更多宽度,使用更浅但更宽的网络。这种扩展更类似于 Zhai et al. (2021) 开发的规则。相比之下,ResNet 和 Swin Transformer (Liu et al., 2021) 选择更窄更深。

图片

通过渐进灵活的 re-tokenization 进行高效的 ViT 训练

该研究通过提出渐进灵活的 re-tokenization 训练策略来提供肯定的答案。为了在训练期间更新 token 的数量而不影响线性投影中权重的形状,该研究在第一个线性投影层中采用不同的采样粒度。以第一个投影核 K_1 = 4 且 stride = 4 为例:训练时研究者逐渐将第一个投影核的 (stride, dilation) 对逐渐变为 (16, 5), (8, 2) 和 (4 , 1),保持权重的形状和架构不变。

这种 re-tokenization 的策略激发了 ViT 的课程学习(curriculum learning):训练开始时引入粗采样以显着减少 token 的数量。换句话说,As-ViT 在早期训练阶段以极低的计算成本(仅全分辨率训练的 13.2% FLOPs)快速从图像中学习粗略信息。在训练的后期阶段,该研究逐渐切换到细粒度采样,恢复完整的 token 分辨率,并保持有竞争力的准确率。如图 4 所示,当在早期训练阶段使用粗采样训练 ViT 时,它仍然可以获得很高的准确率,同时需要极低的计算成本。不同采样粒度之间的转换引入了性能的跳跃,最终网络恢复了具有竞争力的最终性能。

图片

如图 4 所示,当 ViT 在早期训练阶段使用粗采样训练 ViT 时,它仍然可以获得很高的准确率,同时需要极低的计算成本。不同采样粒度之间的转换引入了性能的跳跃,最终网络恢复了具有竞争力的最终性能。

实验

AS-VIT:自动扩展 VIT

该研究在表 4 中展示了搜索到的 As-ViT 拓扑。这种架构在第一个投影(tokenization)step 和三个重新嵌入 step 中,促进了 token 之间的强烈重叠。FFN 扩展比首先变窄,然后在更深的层变宽。利用少量注意力拆分来更好地聚合全局信息。

图片

图像分类

下表 5 展示了 As-ViT 与其他模型的比较。与之前基于 Transformer 和基于 CNN 的架构相比,As-ViT 以相当数量的参数和 FLOP 实现了 SOTA 性能。

图片

图片

图片

高效训练

研究者调整了表 6 中为每个 token 减少阶段的时期,并将结果显示在表 6 中。标准训练需要 42.8 TPU 天,而高效训练可节省高达 56.2% 的训练 FLOP 和 41.1% 的训练 TPU 天,仍然达到很高的准确率。

图片

拓扑和扩展的贡献

为了更好地验证搜索型拓扑和扩展规则的贡献,该研究进行了更多的消融研究(表 7)。首先,在扩展之前直接训练搜索到的拓扑。该研究搜索的种子拓扑优于图 2 中 87 个随机拓扑中的最佳拓扑。

图片

第二,该研究将基于复杂度的规则与「随机扩展 + As-ViT 拓扑」进行比较。在不同的扩展下,该研究的自动扩展也优于随机扩展。

图片

COCO 数据集上的目标检测

该研究将 As-ViT 与标准 CNN 和之前的 Transformer 网络进行了比较。比较是通过仅更改主干而其他设置未更改来进行的。从下表 8 的结果可以看出,As-ViT 也可以捕获多尺度特征并实现最先进的检测性能,尽管它是在 ImageNet 上设计的,并且它的复杂性是为分类而测量的。

图片

技术交流

目前已开通了技术交流群,群友已超过2000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

  • 方式①、发送如下图片至微信,长按识别,后台回复:加群
  • 方式②、微信搜索公众号:机器学习社区,后台回复:加群
  • 方式③、可以直接加微信号:mlc2060。加的时候备注一下:研究方向 +学校/公司+CSDN,即可。然后就可以拉你进群了。
    在这里插入图片描述

研究方向包括:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch、TensorFlow和Transformer等。

一定要备注:研究方向+学校/公司+昵称(如Transformer或者目标检测+上交+卡卡),根据格式备注,可更快被通过且邀请进群。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需训练,自动扩展的视觉Transformer来了 的相关文章

  • 如何将base64字符串直接解码为二进制音频格式

    音频文件通过 API 发送给我们 该文件是 Base64 编码的 PCM 格式 我需要将其转换为 PCM 然后再转换为 WAV 进行处理 我能够使用以下代码解码 gt 保存到 pcm gt 从 pcm 读取 gt 保存为 wav decod
  • PyQt:如何通过匿名代理使用网页

    这真让我抓狂 我想在 QWebPage 中显示一个 url 但我想通过匿名代理来实现 Code setting up the proxy proxy QNetworkProxy proxy setHostName 189 75 98 199
  • 即使页面未完全加载,我们也可以使用 Selenium 获取页面源吗(TimeoutException: Message: timeout)?

    即使遇到 TimeoutException Message timeout 也能获取页面源码吗 当我调用 driver page source 时 有时无法加载整页 但我只需要它的部分信息 尚未确定 所以我只想在任何情况下保存页面 是否可以
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • for 循环如何评估其参数

    我的问题很简单 Does a for循环评估它每次使用的参数 Such as for i in range 300 python 是否会为此循环的每次迭代创建一个包含 300 个项目的列表 如果是的话 这是避免这种情况的方法吗 lst ra
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • Python在postgresql表中查找带有单引号符号的字符串

    我需要从 psql 表中查找包含多个单引号的字符串 我当前的解决方案是将单引号替换为双单引号 如下所示 sql query f SELECT exists SELECT 1 FROM table name WHERE my column m
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 了解 Python 中的酸洗

    我最近接到一项作业 需要以腌制形式放置一本字典 其中每个键引用一个列表 唯一的问题是我不知道腌制形式是什么 谁能给我指出一些好的资源的正确方向来帮助我学习这个概念 pickle 模块实现了一个基本但强大的算法 用于序列化和反序列化 Pyth
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 根据开始列和结束列扩展数据框(速度)

    我有一个pandas DataFrame含有start and end列 加上几个附加列 我想将此数据框扩展为一个时间序列 从start值并结束于end值 但复制我的其他专栏 到目前为止 我想出了以下内容 import pandas as
  • Python Fabric - 未找到主机。请指定用于连接的(单个)主机字符串:

    如何获取 找不到主机 请指定用于连接的 单个 主机字符串 面料如何解决 def bootstrap host ec2 54 xxx xxx xxx compute 1 amazonaws com env hosts host env use
  • python 中的 Johansen 协整检验

    我找不到任何有关在处理统计和时间序列分析 pandas 和 statsmodel 的 Python 模块中执行 Johansen 协整检验的功能的参考 有谁知道是否有一些代码可以执行时间序列之间的协整测试 现在 这已在 Python 的 s
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • 如何使用 Django 项目设置 SQLite?

    我已阅读 Django 文档 仅供参考 https docs djangoproject com en 1 3 intro tutorial01 https docs djangoproject com en 1 3 intro tutor
  • 由于 json 字符串化 dict 键导致数据丢失

    考虑下面的例子 gt gt gt import json gt gt gt d 0 potato 0 spud gt gt gt json dumps d 0 potato 0 spud gt gt gt json loads json d
  • Python]将两个文本文件合并为一个(逐行)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我是蟒蛇新手 我想做的是将文件 a 和文件 b 逐行合并到一个文件中 例如 text file a a n b n c text fi
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 如何在 robobrowser-python 中发出 POST 请求

    http robobrowser readthedocs org en latest api html http robobrowser readthedocs org en latest api html 我正在尝试使用 APIbrows

随机推荐

  • 没学C++,如何从C语言丝滑过度到python【python基础万字详解】

    大家好 我是纪宁 文章将从C语言出发 深入介绍python的基础知识 也包括很多python的新增知识点详解 文章目录 1 python的输入输出 重新认识 hello world 重回那个激情燃烧的岁月 1 1 输出函数print的规则
  • 带头结点的循环链表表示队列, 并且只设一个指针指向队尾元素结点, 试编写相应的队列初始化,入队列和出队列的算法

    数据结构算法题 假设以带头结点的循环链表表示队列 并且只设一个指针指向队尾元素结点 注意不设头指针 试编写相应的队列初始化 入队列和出队列的算法 数据结构算法题 假设以带头结点的循环链表表示队列 并且只设一个指针指向队尾元素结点 注意不设头
  • 在Linux系统下用dd命令制作ISO镜像U盘启动盘

    首先在 Linux 系统中打开终端 确认 U 盘路径 sudo fdisk l 格式化 U 盘 为了格式化首先需要 umount U 盘 dev sdb 是我的 U 盘设备 sudo umount dev sdb 格式化 U 盘 sudo
  • flutter 页面导航和返回

    记录一下自己的学习过程 一般页面导航和返回 导航的使用在任何程序里都至关重要 这也是一个程序的灵魂 ElevatedButton 按钮控件 它有两个最基本的属性 child 可以放入容器 图标 文字 让你构建多彩的按钮 onPressed
  • MFC中CString与string的转换

    MFC中CString与string的转换 Unicode下 CString sz1 L abc std string sz2 CT2A sz1 GetBuffer 转化为非unicode 方法一 CString theCStr std s
  • python划分训练集和测试集_python-根据时间戳将数据分为训练集和测试集

    在很多python任务中 我们需要将原始数据进行处理 分成训练集和测试集 以便更深层次的运用这些数据 工具 原料 pycharm python3 7 win10 7 方法 步骤 1 首先需要指定编码方式为 utf8 格式 再导入处理数据的包
  • Mysql详细学习指南(超详细)

    文章目录 数据库MySQL 一 数据库的概念 1 1 现阶段数据存放方式 1 2 现有方式的缺点 1 3 新的文件类型 1 4 分类 1 5 数据库管理系统 二 MySQL 2 1 简介 2 2 目录 2 3 核心文件 三 SQL语言 四
  • python3 Excel转txt

    使用场景 每次都是点一下Excel表格链接 调到浏览器中 内容数据也多 这种机械的活 对于程序员来说 能省则省 最后的结果 附上代码 coding utf 8 Time 2018 7 19 19 47 Author 蛇崽 Email 643
  • C#笔记(1)--->基本语法 [运算符]

    算术运算符 即 取余数 逻辑运算符 布尔型与按位 与 或 非 异或 按位求补 与 或 字符串串联 递增与递减 这里注意一下x 与 x的区别 移位运算符 左移位 lt lt x lt lt 3 左移3位 相当与乘2的3次方 右移位 gt gt
  • 用 moment 实现获取本周、前 n 周、后 n 周开始结束日期

    本文用 moment js 实现了获取本周 前 n 周 后 n 周开始结束日期 即周一 周日日期的方法 先看代码 封装了个工具类 DateTimeUtils js 可以直接复制到项目中使用 时间日期工具类 import moment fro
  • matlab 计算协方差矩阵

    但是在有些用到协方差的算法中 分母使用了N 而不是N 1 但是由于样本很多 差别不大 gt gt v magic 3 v 8 1 6 3 5 7 4 9 2 gt gt cov v ans 7 8 1 8 16 8 1 8 7 gt gt
  • Base64编码工具类

    public class Base64Util private static final char last2byte char Integer parseInt 00000011 2 private static final char l
  • 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E0304 没有与参数列表匹配的 重载函数 "std::regex_match" 实例 Project16 D:\Program Files(x86)\Microsoft Visual Stu

    这个错误表示在你的代码中调用了一个名为 std regex match 的函数 但是在你的代码中并没有定义该函数的重载函数 没有参数列表与你调用的函数相匹配 这个错误发生在 Project16D Program Files x86 Micr
  • jstat命令

    文章目录 1 简介 2 常用选项示例 1 jstat class pid 2 jstat gc pid 3 jstat gcutil pid 4 其他命令 1 简介 jstat命令可以查看堆内存各部分的使用量 以及加载类的数量 命令的格式如
  • 推荐夸克和多御,非常的实用!

    一 多御浏览器 多御浏览器是一款集安全 速度 工具于一身的浏览器 它的界面简洁大方 干净利落 打开速度和加载速度都很快 并且注重浏览体验 浏览器常用的功能一应俱全 添加书签 夜间模式 视频下载 分享页面 密码锁屏等 保护你的隐私 满足你的需
  • Python之Pygame.rect函数

    1 参数设置 Pygame 通过 Rect 对象存储和操作矩形区域 一个 Rect 对象可以由 left top width height 几个值创建 Rect 也可以是由 Pygame 的对象所创建 它们拥有一个属性叫 rect 任何需要
  • svn使用中出现的错误

    svn虽然用过很多次 但是还是会遇到很多问题 因为有时候是为了使用而忽略了原因 这次使用svn出了很多错误 这里记录一下 1 注意 Tortoise SVN和eclipse SVN插件版本的匹配 出现问题 无法从仓库import 知道的有以
  • 怎么在浏览器中获取请求头Headers信息

    这里使用的是Chrome浏览器 打开你想查询的网站 按F12 或者鼠标右键一下选择检查 会弹出如下的审查元素页面 然后点击上方选项中的Network选项 此时在按Ctrl R 选择下方框中的第一个 单击 选择Headers选项 其中就会有R
  • 最简单三级管振荡分析(自由多谐振荡器电路)

    三极管震荡分析 1 电路 自由多谐振荡器电路 2 分析 摘抄于电子发烧友 最简单三极管震荡电路 http m elecfans com article 640326 html 由上图可见 这个电路是由两个非门 反相器 用电容C1 C2构成的
  • 无需训练,自动扩展的视觉Transformer来了

    来自德克萨斯大学奥斯汀分校 悉尼科技大学和谷歌的研究者提出了一个无需训练就能自动扩展框架 As ViT 其能以高效和有原则的方式自动发现和扩展 ViT 当前 Vision Transformers ViT 领域有两个主要的痛点 1 缺少对