Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记

news2024/9/25 7:13:31

Vit 中的 Token 改进版本:Token Mreging: Your Vit But Faster 论文阅读笔记

  • 一、Abstract
  • 二、引言
  • 三、相关工作
    • 3.1 有效的 Transformer
    • 3.2 Token 的减少
    • 3.3 Token 的联合
  • 四、Token 融合
    • 4.1 策略
    • 4.2 Token 相似性
    • 4.3 双边软匹配
    • 4.4 追踪 Token 的尺寸
    • 4.5 采用融合操作的训练
  • 五、图像实验
    • 5.1 设计的选项
    • 5.2 模型间的比较
    • 5.3 与其他方法的比较
    • 5.4 可视化的结果
  • 六、视频实验
  • 七、音频实验
  • 八、结论

写在前面

  都快一个月没写博客了,事情太多,又有拖延症,得改啊 (>﹏<)

  • 论文题目:TOKEN MERGING: YOUR VIT BUT FASTER
  • 代码地址:https://github.com/facebookresearch/ToMe
  • 预计提交于 ICCV 2023

一、Abstract

  本文引入一种 Token 融合的方法(Token Merging — ToMe),在无需额外训练的情况下增强现有 ViT 的性能。具体来说在 transformer 中使用一个通用且轻量化的匹配算法来逐步融合相似的 tokens。在图像、视频、音频上的性能绝佳。

二、引言

  Transformer 的应用很广,效果也很好,就是训练速度太慢。最近提出的一些方法在修剪 tokens,然而有一些缺点:减少的 tokens 可能会使得信息丢失;可能需要重新训练才能让模型更有效;大部分方法不能用于加快模型的训练;根据输入的内容来修剪 tokens,会使得批量推理存在麻烦。
  本文提出了 ToMe 来结合 tokens,而不是裁减掉这些。同时本文采用自定义的匹配算法,相对于剪枝来说更快且精度更高。此外,本文提出的方法需要或者不需要训练都可,在应用于大模型时只是会造成轻微的精度下降。在训练时如果使用 ToMe,时间会缩短,甚至在某些情况下训练时间减半。应用 ToMe 到图像、视频、音频上时能够达到 Sota 的效果。

三、相关工作

3.1 有效的 Transformer

  改进整个 Transformer 模块,改进注意力机制,剪枝注意力头的特征,注入特定域模块。本文通过融合现有ViT模型中的 tokens 来匹配特定域的模型,从而加快速度,一些时候甚至无需训练。

3.2 Token 的减少

  由于 transformer 能够使用任意数量的 token,因此一些方法在尝试剪枝的工作,然而需要训练。同时大量剪枝采用动态 token 数量的方式,但是不太实用,因为推理时没法用啊。因此为了改为动态方式,很多方法应用一个 mask 来训练而不是直接去除 token,但是这种方法又会让剪枝的作用失效。本文提出的方法可以直接应用于推理和训练,能够实现实时速度。

3.3 Token 的联合

  只有少量的方法剪枝到单个 token,但是他们的精度普遍在无训练时掉点很多。

四、Token 融合

  通过融合冗余的 tokens,不管在训练还是无训练的情况下,能够增加模型的效率。

4.1 策略

  在每一个 Transformer 的每一个块中,每一层来融合 r r r 个 tokens。因此对于 L L L 块来说,需要融合 r L rL rL 个 tokens。更多的 r L rL rL 意味着准确度更低,但是速度收益更大。此外, r L rL rL 和图像内容无关。

在这里插入图片描述
  如上图所示,在每一个 Transformer 块中的注意力和 MLP 模块间加上 ToMe 模块(这里有个 ToMe 模块放置位置的消融实验)。

4.2 Token 相似性

  之前的方法:衡量特征之间的距离,但这并不是最优的,因为中间的特征可能包含大量不太重要的噪声。而 Transformer 本身的特性通过 QKV 自注意力机制就解决了这个问题,因为 K 使用点乘的方式总结了每一个 token 的信息。因此借鉴这种方法,本文也采用点乘相似度矩阵来决定包含相似性信息的 token。

4.3 双边软匹配

  之前聚类的方法用不了,太慢了。因此需要提出一种更有效的方案,其设计原则如有:避免任何不能进行并行化的迭代操作;逐步地进行融合操作以代替 Mask。另外一个没有用聚类方法的原因:因为聚类的效果太狠了,无脑去融合 tokens 到一个聚类中心,这可能会影响整个网络的性能,而匹配的方法则是使得大部分 tokens 留下。

  算法流程如下:

  • 将 tokens 划分为两个大致数量差不多的集合 A \mathbb{A} A B \mathbb{B} B
  • 在集合 A \mathbb{A} A 中画一条边连接到 B \mathbb{B} B 中最相似的那个 token
  • 保留下 r r r 个最相似的边
  • 融合那些仍然相连接的边
  • 拼接这两个集合

  这个做法相当于建立了一个双边图,而在 A \mathbb{A} A 中的每个 token 仅有一条边,因此不需要计算每个 token 的相似度。实验表明这种双边软匹配的方法尽可能和随机扔掉 tokens 一样快。

4.4 追踪 Token 的尺寸

  一旦具有相同 key 的 tokens 被融合了,那么融合后的 token 可能会对 softmax 有影响,因此采用一种比例注意力的方式来弥补这一变化:
A = softmax ⁡ ( Q K ⊤ d + log ⁡ s ) A=\operatorname{softmax}\left(\frac{Q K^{\top}}{\sqrt{d}}+\log s\right) A=softmax(d QK+logs)
其中 s s s 为包含每个 token 尺寸(token 表示的 patch 数量)的行向量。

4.5 采用融合操作的训练

  训练不是必须,但是训练可能会阻止梯度降低以及加快模型的训练。为了训练 ToMe,将 token 的融合视为池化操作并通过反向传播回传梯度。因此 ToMe 是个可以临时增加训练速度的替代方法。

五、图像实验

  在 ImageNet-1K 数据集上,使用 AugReg、MAE、SWAG、DeiT 这四种方式。所有的模型要么采用 ToMe 离线训练,要么在 MAE 和 DeiT 上应用 ToMe 训练。推理在单张 V100上进行。

5.1 设计的选项

  ViT-L/16 模型,24层。

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

在这里插入图片描述

5.2 模型间的比较

在这里插入图片描述

5.3 与其他方法的比较

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

5.4 可视化的结果

在这里插入图片描述

六、视频实验

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

七、音频实验

  上表 7。

八、结论

  本文提出 ToMe,通过逐步融合 tokens 来增加 ViT 模型的速度,在图像、视频、声音模态上效果很好。能够和其他模型结合,可以用在大模型中。

写在后面

  文章方法部分写的简洁凝练,实验做的特别多,工作量巨大。也需要一定的资本投入才能实现。剩下的附录部分等回家再给补上。溜了溜了~
  青青草原,我来了~

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

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

相关文章

[附源码]计算机毕业设计Python餐馆点餐管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 11.4 小结

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.3 处理JSON文件11.3.2 解码JSON11.4 小结第11章 文件操作 11.3 处理JSON文件 11.3.2 解码JSON 解码JSON会使用到Unmarshal接口,也就是Marshal的反操作。 func Unmarshal(data []byte, v interf…

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?

30岁零基础没学历学Python怎么样?30岁学习Python晚吗?任何时候开始都不晚。30岁开始学习Python听起来年纪有点大,大家认为编程上了年纪学习编程语言是一个劣势。想在三十岁的时候通过学习Python来谋求一份IT程序员工作,则需要有一…

SQL笔记

SQL笔记 基本概述 数据库:保存有组织的数据的容器(通常是一个文件或一组文件)。容易混淆:人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的,也因此产生了许多混淆。确切地说&#xff0c…

抖音关键词排名优化技巧,手把手教你怎样优化抖音关键词

云南百收科技有限公司 1、标题中出现关键词是关键词排名靠前的基础。 一篇文章中标题中一定要出现你想做的关键词,因为搜索引擎是是匹配标题的,如果你标题中没有关键词,是不会有排名的。而且还有一点,关键词的位置要靠近标题最前面…

python+pyqt5+mysql设计图书管理系统(1)- 数据库

一、概述 前面学习了python,pyqt和mysql的一些基础知识,接下来运用学习的东西进行实操制作一个项目--图书管理系统。 项目介绍:图书管理系统对于我们的图书管理来说非常重要,管理图书者可以通过系统有效的管理书籍,用户可以通过系统快速有效的找到自己需要的书籍。相比人工…

【目标跟踪】Kalman滤波目标跟踪【含Matlab源码 388期】

⛄一、获取代码方式 获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。 获取代码方式2: 完整代码已上传我的资源:【目标跟踪】基于matlab Kalman滤波目标跟踪【含Matlab源…

聊一聊Unity的Test Framework应该怎么用

其实 Unity 很早就出了这个包,不过感觉基本上没什么人用,这么好的东西,本着让所有人都能了解的态度,今天就来聊聊它应该怎么使用。 第1步先安装它,或者给它升级到最新。 第2步打开工具的主窗口 支持分别在 PlayMode 或…

unity 2022大三期末大作业 3D立体魔方游戏(附下载链接)

unity 2022大三期末大作业 3D立体魔方游戏 这是本人的一个unity期末大作业,实现比较简单,unity版本是2018 的,导入即可运行无错误 下载链接 游戏可以一键打乱魔方的顺序,也可以一键还原等等功能,实现了魔方的使用功能…

手把手教你,从零开始搭建Spring Cloud Alibaba这份笔记太牛了

Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。 Springcloud 和 Srpingcloud Alibaba 区别? SpringCloud: 部分组件停止维护和更新,给开发带来不便;SpringCl…

[附源码]Nodejs计算机毕业设计基于推荐算法的鞋服代购平台Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

【代码规范】lombok注解使用

【代码规范】lombok注解使用一、前言二、常用注解三、使用示例一、前言 上一篇文章(【JVM知识】插入式注解处理器实现java编程规范检测)总结了一下插入式注解,我们知道lombok插件是通过插入式注解处理器实现的,并且lombok插件在工…

版本控制器Git的使用。

目录 一、分布式版本工具 1、基本介绍 2、Git 安装配置 3、本地仓库和基础指令 二、分支 1、分支概述 2、解决冲突 三、Git远程仓库 1、常用的托管服务[远程仓库] 2、配置SSH公钥 3、操作远程仓库 4、解决合并冲突 三、IDEA中使用Git 1、在Idea中配置Git 2、ID…

什么是用户标签体系?

一.概况 标签:对某一类特定群体或对象的某项特征进行抽象分类和概括 标签体系:根据用户的“基本属性”,“行为特征”,“社交网络”,“心理特征” 和 “兴趣爱好”等,把个性化的用户,打上标签化…

入门:认识容器镜像

要启动容器最关键的就是镜像,我们来看看镜像相关的介绍。 初识容器镜像 首先我们来了解一下镜像的相关操作,比如现在我们希望把某个镜像从仓库下载到本地,这里使用官方的hello-world镜像: docker pull hello-world 只需要输入pull…

【CANN训练营第三季】2022年度第三季进阶班之AI目标属性编辑应用-数据预处理

了解华为的生态已经两年有余,用CANN做过两个模型的转换,跑过推理测试,但是感觉还是对CANN框架一知半解,恰巧看到2022年度第三季度训练营开班,赶紧报名参与上车。 本次课程是进阶版第一节正式课,主要讲解的…

零基础自学Python要多久才能学会?

零基础自学Python要多久?学习Python开发的周期因人而异,由于基础、学习效率不同有的人学习进度快,需要六个月到一年不等,有的人自律性较差可能需要更久的时间才能学会,今天小编分享下6个月学习周期内的自学Python的学习…

数据结构---计数排序

计数排序计数排序JAVA实现计数排序优化存在的问题1:存在的问题2JAVA实现局限性冒泡排序,还是快速排序,都是基于元素之间的比较来进行排序 有一些特殊的排序并不基于元素比较,如计数排序、桶排序、基数排序。 计数排序&#xff1a…

0. Arthas的基本安装和使用

我们慢慢寻找,直到找到我们的方向。 选择了方向,便一往无前。 我们爱那少年,一如爱我们自己。 Arthas 的简介 Arthas 的官方文档: https://arthas.aliyun.com/doc/ Arthas的官方命令文档: https://arthas.aliyun.com/doc/advanced-use.html …

数据结构-难点代码突破(C++实现图广度优先遍历,深度优先遍历,广度/深度优先遍历生成树和森林,广度优先遍历求单源非带权图两点最短路径)

注意:为了简便起见,这里采用邻接矩阵的方式储存图的边信息 文章目录1.邻接矩阵图的广度优先遍历单源非带权图的两点最短路径2. 邻接矩阵图的深度优先遍历3. 广度/深度优先遍历生成树和森林深度优先生成树与森林广度优先遍历生成树与森林图的遍历是指从图…