AIM可以像 LLM 一样进行扩展的自回归图像模型

news2024/10/5 23:27:41

0.引言

AIM(Autoregressive Image Model)是一种自回归学习图像模型,它是对语言模型的图像版本进行了推广。该模型的预训练图像特征质量会随着模型大小和数据质量的提高而提高,从而带来更好的性能。同时,下游任务的性能也会随着预训练性能的提高而提高。
通过在大规模图像数据集上进行预训练,AIM 模型可以学习到丰富的图像特征,这些特征可以被迁移到各种下游视觉任务中,如图像分类、目标检测、语义分割等。据报道,在 20 亿张图像上预训练了 70 亿个 AIM 参数,并在 ImageNet-1k 任务中达到了 84% 的准确率,而且没有显示出性能饱和的迹象。
AIM 模型的性能和预训练质量的提高可能会带来视觉领域的重大进展,为各种图像理解任务提供更强大的基础模型。

论文地址:https://arxiv.org/abs/2401.08541
源码地址:https://github.com/apple/ml-aim

1.介绍

2012 年,多伦多大学推出了基于卷积神经网络(CNN)的 AlexNet,并在图像识别竞赛中获胜。这一成功给人们带来了希望:层数越深,图像识别的准确性就越高,深度学习研究迅速走红。

虽然在模型参数学习过程中,由于梯度损失,加深层数会导致性能下降,但微软研究院在 2015 年发布的 ResNet 短切连接建议证实,即使层数增加到 152 层,性能也能得到改善。

因此,图像识别任务带动了模型的大规模开发,2017 年,Transformer 作为解决自然语言处理任务的语言模型被提出。

2022 年,开放人工智能(Open AI)发布了基于 Transformer 的大规模语言模型 ChatGPT 的原型。ChatGPT 因其对所有问题的高度可信回答而备受关注,预示着通用人工智能的到来。ChatGPT 是一个原型,可用于多种应用。此外,没有迹象表明模型参数数量的增加会带来性能限制,于是一场追求更大模型规模的竞赛开始了,并迅速引发了大规模语言建模研究的热潮。

回顾历史,深度学习研究在图像识别研究中得到了发展,随后生成模型,尤其是变换器,在语言处理研究中得到了大规模发展,本文讨论的是语言处理研究的成果能否推广到图像识别研究中。

具体来说,我们讨论的是基于 Transformer 创建大规模 "图像 "模型,而不是大规模 "语言 "模型。不过,这并不意味着 Transformer 没有应用于图像识别。

变形金刚在图像识别领域的一个著名应用是视觉变形金刚(ViT)。该模型于 2021 年由谷歌发布。这项研究表明,如果有足够的图像数据进行预训练,变换器可以取代 CNN。

Vision Transformer 和大规模语言模型一样都是基于 Transformer 的,但其预学习方法与大规模语言模型不同。在大规模语言模型中,预学习采用的是自动回归学习法,即不从外部给出标签,系统通过在句子中显示到某个单词来学习预测下一个单词;而在视觉转换器中,图像识别的正确标签(分类类别,如狗或猫)与训练图像一起作为一个集合给出,从而进行学习。在视觉转换器中,图像识别的正确标签(分类类别,如狗或猫)与训练图像一起作为一个集合给出,以便进行学习。

在本文中,模型基础与 Vision Transfomer 相同,但与大规模语言模型一样,本文研究了苹果公司能否开发出一种技术,通过自回归学习,随着模型参数和训练数据数量的增加而提高图像识别准确率。

现在介绍所提出的自回归图像模型(AIM)及其评估结果。

2.自回归图像模型(AIM)

研究前程序

图 1 显示了使用拟议方法–自回归图像模型(AIM)–进行预训练的流程。

图 1.AIM 预研究流程。

变换器自回归学习每次都会从目前显示的单词中从左到右预测给定句子的下一个单词。要将这种变换器自回归学习应用于图像,需要将图像表示为由单词组成的句子。因此,AIM 将输入图像划分为图 1 所示的非重叠mask图像(子区域),对mask图像进行排序,并学习下一个mask图像的猜测。

对原始图像分割出的每个mask图像进行降维处理,并通过线性映射提取特征。mask图像特征输入变换器,变换器执行自注意处理(上下文感知mask特征更新。使用前缀因果掩码进行自我关注处理),具体说明如下。然后,MLP 根据提取的图像特征预测下一个mask图像。

模型预测光栅顺序(图 1 中分配给每个mask图像的数字顺序)。模型按光栅顺序预测下一个mask图像(从顶行开始依次读取)。

图 1 中 MLP 的输出显示了根据mask图像 1 预测mask图像 2 和根据mask图像 1 和 2 预测mask图像 3 之间的关系。如果没有给出mask图像,就无法预测mask图像,因此mask图像预测结果以 2 开始,以 9 结束,因为在给出mask图像 9 之前,没有mask图像可以预测下一个mask图像。

上一个模型输出的第二至第九个mask图像的预测和正确答案的误差函数(自回归目标函数)如公式 1 所示。

方程 1.自回归模型训练过程中的损失函数

x 帽子是用模型参数 θ 对 AIM 第 k 个mask图像的预测值,而无帽子则是正确mask图像的值。对 θ 的训练是为了最小化每个mask图像的预测值与正确像素值向量之间误差平方和的平均值。(如图 1 所示,如果模型的输出是第二到第九个mask,则可以认为开始时的 k=2 是有效的)。

前置因果掩码

在预测下一个mask图像的问题上,应注意从目前显示的mask图像中预测下一个mask图像的关系,如果获取了下一个mask图像的信息,这将是一种作弊行为。Transformer 的自我关注过程是对句子中不同单词的单词加权求和,并通过计算这些单词的加权和来更新每个单词的特征,因此简单地计算所有单词的加权和就会导致这种作弊行为。

因此,在预测第二个mask图像时,因果掩码在预训练期间计算下一个mask图像的预测误差时,只使用第一个mask图像,而在预测第三个mask图像时,它只使用第一个和第二个mask图像,在迄今显示的mask图像之间进行自我注意。请执行以下操作。

然而,因果掩码的问题在于,当它们适应下游任务(在本文中,是与预训练任务不同的新图像识别任务)时,效果并不好。

在预训练中,由于这是一项自回归任务,因此有一项限制条件,即不得显示未来的mask图像。而在下游任务(图像识别任务)中,与待识别图像相关的所有mask图像都可能被同时看到。因此,在做出图像识别决定之前,自然要考虑所有mask图像的特征。但是,如果在预训练时使用简单的因果掩码,就无法很好地学习考虑多个图像mask的特征。因此,将下游任务也考虑在内的预学习是可取的。

因此,本文使用了前缀因果掩码。前缀因果掩膜通过使用全部的mask图像,直到由均匀分布决定的一定数量的mask图像 = 前缀长度,来执行自注意处理。之后,它与因果掩码一样进行自注意处理。在计算预测误差时,会针对超出前缀长度的mask图像进行预测。

图 2 显示了前缀因果掩码预学习和下游适应的图像。

图 2:"带前缀因果掩码的预学习 "和下游适配

这是一种猜测,因为本文没有解释图中的圆圈和线条代表什么,但它很像神经网络的示意图。

如果我们把输入层、中间层和输出层看作是一个三层神经网络,从图的底部看有五个维度,那么我们可以把这里输入层的五个维度看作是与五个mask相对应的。换句话说,水平圆圈可视为与五个mask图像的排列相同,以神经网络的方式展示了在通过对五个mask图像的自我注意处理更新特征时,其他mask图像是如何参与其中的。

图 2 左图显示了使用前缀因果掩码进行预训练的情况。前缀因果掩码的前缀长度为 3,可视为一个神经网络,从左数起最多可将三个图像斑块组合在一起。

这意味着,可以认为左起的第一、第二和第三个图像mask的特征分别根据第一至第三个图像mask进行了更新(相对于第一和第二图像mask而言,就像在未来的某个mask中更新了特征一样)。

第四个和第五个图像mask被认为代表了用自身和之前的图像mask更新的图像(应用了因果掩码,第四个图像mask的特征没有用第五个图像mask更新,第五个图像mask是第四个图像mask的未来图像mask)。

图 2 右侧的图片显示了下游适应的图像。下游适配是一项自然任务,它将所有待识别图像的所有mask都视为完全合并,因此完全合并是可取的,但如果始终允许完全合并,预训练始终是在作弊状态下学习。

因此,如果使用前缀因果掩码,就可以认为是在使用因果掩码进行预训练,假定下游适应,在所有连接状态中部分保留了特征更新。

MLP 预测头

理想情况下,Transformer 预训练应能学习适用于各种下游任务的通用图像特征。如果在预训练时学习的图像特征是针对目标函数的,那么它们对下游任务的适应性就会降低。

因此,为了提高对下游任务的适应性,将一个 MLP(多层感知器)预测头连接到最后一层并进行预训练;MLP 预测头独立处理每个mask图像。

然后,在适应下游任务时,放弃预训练中的 MLP 预测头,将剩余的 Transformer 部分用作通用特征提取器。

下游适应

预训练大型模型需要消耗大量计算资源。微调也很费力。

因此,在训练下游任务时,预训练中学习到的变换器权重是固定的。只训练新连接的分类头。这样可以避免对少量下游任务数据集进行过度训练,并降低下游适应成本。

3.AIM 评估结果。

评估 AIM 是否能在模型参数和训练数据数量不断增加的情况下显示出可扩展的性能。

我们在 20 亿张无组织图像上对 AIM 进行了预训练,并将其调整为 15 项下游任务(各种图像识别(=图像类别分类)基准,包括细粒度识别、医疗图像、卫星图像、自然环境和信息图表),并评估了其在 15 项下游任务上的平均性能,如图 3 所示。

图 3.AIM 的预训练和下游任务性能对模型参数数量的可扩展性。

图 3 显示了 AIM 随模型参数数量变化的可扩展性。横轴是预训练中的验证损失,纵轴是 15 个下游任务的平均性能;图中标有 AIM-*B 的每个点代表 AIM 中模型参数的数量。数字越往右越大,依次为 6 亿、10 亿、30 亿和 70 亿个模型参数。

该图显示了当 AIM 中的模型参数数量增加时,预培训性能与下游任务性能之间的关系;可以看出,随着 AIM 中的模型参数数量增加,预培训性能得到改善,下游任务性能也得到改善。

顺便提一下,在 ImageNet-1k 基准测试中,AIM 在使用 70 亿个模型参数的情况下取得了 84.0 的准确率,优于使用名为 MAE 的自动编码器的现有方法 82.2 的准确率。另一方面,DiNOv2 方法的准确度为 86.4,优于 AIM。相比之下,论文指出,DiNOv2 的评估结果单独提高了 1 到 1.5%,因为它使用了高分辨率的训练图像。(目前还不清楚这是否意味着,如果 AIM 也使用高分辨率图像进行训练,其性能就会比 DiNOv2 有所提高)。

图 4 显示了 AIM 随模型参数数量变化的可扩展性。

图 4.AIM 下游任务性能随训练数据数量的可扩展性。

图 4 中的横轴是 AIM 的唯一训练图像数,纵轴是模型参数数为 6 亿时 AIM 在 15 个图像识别基准上的平均性能。换句话说,它显示了当模型参数数量为 6 亿时,AIM 训练数据数量与下游任务性能之间的关系:随着 AIM 训练数据数量从 100 万张图像增加到 1 亿张图像,再增加到 20 亿张图像,识别准确率也随之提高。没有迹象表明识别准确率达到饱和。

图 3 和图 4表明,在模型参数和训练数据数量不断增加的情况下,AIM 能以可扩展的方式提高图像识别精度。

4.模型应用

源码下载:

pip install git+https://git@github.com/apple/ml-aim.git

PyTorch用例:

from PIL import Image

from aim.utils import load_pretrained
from aim.torch.data import val_transforms

img = Image.open(...)
model = load_pretrained("aim-600M-2B-imgs", backend="torch")
transform = val_transforms()

inp = transform(img).unsqueeze(0)
logits, features = model(inp)

如果是Max本,可MXL有用例:

pip install mlx
from PIL import Image
import mlx.core as mx

from aim.utils import load_pretrained
from aim.torch.data import val_transforms

img = Image.open(...)
model = load_pretrained("aim-600M-2B-imgs", backend="mlx")
transform = val_transforms()

inp = transform(img).unsqueeze(0)
inp = mx.array(inp.numpy())
logits, features = model(inp)

5.结论

本文提出了一种基于视觉转换器的自回归图像模型(AIM,Autoregressive Image Models)方法,它能够利用自回归目标函数进行预训练,从而提高图像识别和 LLM 的预训练和下游任务性能。我们提出了一种基于视觉转换器的自回归图像模型(AIM)方法,它能够利用自回归目标函数进行预训练。

在使用 Transformer 学习自回归目标函数时,它使用简单的因果掩码进行自动注意处理,不能很好地利用图像识别目标图像之间的关系,也不能很好地适应下游任务,因此它将自动注意处理与前缀因果掩码相结合。

为了学习不过度拟合自回归目标函数的通用图像特征,变换器部分被用作通用图像特征提取器,而后一部分的 MLP 部分被用作下一个mask图像预测器。

此外,为了降低适应下游任务时的适应成本,预训练中的 MLP 部分由图像分类 MLP 代替,只训练图像分类 MLP 以适应下游任务。

评估结果表明,在 20 亿个训练数据和 70 亿个模型参数的情况下,前期训练和下游任务的性能都得到了提高,而且没有发现性能提高的极限。

如果随着我们不断扩展图像模型,图像识别的准确率确实能继续提高,那么为提高准确率而改进模型的竞赛基本上就结束了。回顾历史,通过深化深度学习来获得可扩展的性能提升本身就是一个重大挑战,而我认为这个问题已经迎刃而解。

如果是这样的话,剩下的研究方向很可能就只有一个,那就是用多少资源能实现多少图像识别,以及如何应用这项技术,因为投入更多资源就能提高性能。

不过,如果与大规模语言模型相比,这种图像版 LLM 在识别图像(对某些图像进行分类)方面的能力似乎不可避免地受到了限制。

大规模语言模型的好处是可以通过上下文学习回答各种问题,但这个大规模图像模型似乎仅限于图像识别,下游任务适应的学习是必须的,所以大规模语言模型的零镜头(无下游任务数据学习)还存在与预期不符的问题,可以非常准确地回答。

为了能够说它是图像版的 LLM,我觉得我需要一个惊喜,让我能够用这样的零镜头解决各种任务。

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

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

相关文章

Linux 中 alarm 函数详解

目录 简介函数原型函数参数返回值使用示例设置 3 秒闹钟修改闹钟与取消闹钟设置 1 秒周期定时器 更多内容 简介 alarm 函数的功能是设置一个闹钟(定时器),当闹钟时间到时,内核会向当前进程发送一个 SIGALRM 信号。 打开 Linux 终…

AI智能体|手把手教你申请一个Kimi(Moonshot)的API KEY

大家好,我是无界生长。 今天分享一下如何申请一个Kimi(Moonshot)的API KEY,为后面Kimi(Moonshot)接入微信机器人做铺垫。学会了的话,欢迎分享转发! 前提 拥有一个Kimi(Moonshot)账号 使用手机号注册即可,新用户可免费…

五、Linux二进制安装MariaDB 六、MariaDB主从复制

目录 五、Linux二进制安装MariaDB1 卸载mariadb1.1 卸载相关的服务(mysql和mariadb都查询一下)1.2 查找MySQL和mariadb相关的文件目录 2 安装mariadb2.1 mariadb下载地址2.2 将安装包放入到服务器中并解压 (我放到opt下)2.3 将解压后的目录移动到安装目录下2.4 创建数据目录(根…

【iOS】架构模式

文章目录 前言一、MVC二、MVP三、MVVM 前言 之前写项目一直用的是MVC架构,现在来学一下MVP与MVVM两种架构,当然还有VIPER架构,如果有时间后面会单独学习 一、MVC MVC架构先前已经详细讲述,这里不再赘述,我们主要讲一…

YOLOv9改进策略目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

👑 YOLOv9有效涨点专栏目录 👑 专栏视频介绍:包括专栏介绍、得到的项目文件、模型二次创新、权重文件的使用问题,点击即可跳转。 前言 Hello,各位读者们好 本专栏自开设两个月以来已经更新改进教程50余篇其中包含Re…

持续集成-Git

重要步骤命令 git init (初始化一个仓库) git add [文件名] (添加新的文件) git commit -m [关于本次提交的相关说明] (提交) git status (查看文件状态) git diff (如果文件改变,比较两个文件内容) git add[文件名] || git commit -a -m [关于本次提交的相关说…

Java入门1: 基础语法

Java入门1: 基础语法 MangoGO 芒狗狗 目录 1 基础语法1.1 Hello World1.2 常量1.3 数据类型1.4 String1.5 StringBuilder1.6 运算符1.7 位运算符1.8 逻辑运算符1.9 关系运算符1.10 练习:计算数字和1.11 关键字和语句1.12 流程控制1.13 数组1.14 用户输入操作参考代码…

WCF 双工 回调模式

wcfInterface 项目 》》》wcf服务端提供的服务协议 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ServiceModel; namespace wcfInterface {[ServiceContract(CallbackContract typeo…

【pouchdb-可视化工具 】

最近使用pouchdb,想找个其对应的可视化工具,可以对数据库进行操作。 找了好久才找到,网上有说先同步到couchdb,再用couchdb的可视化工具查看,其实没有那么麻烦,pouchdb的可视化工具其实藏在另外的pouchdb-…

自然语言转SQL(NL2SQL、Text2SQL)

使用 FastAPI 框架和 LangChain 库构建的简单 Web 服务,其目的是将自然语言处理(NLP)应用于 SQL 查询生成。以下是代码中使用的技术架构和业务流程的详细说明: 技术架构 FastAPI:一个现代、快速(高性能&am…

Django开发实战之定制管理后台界面及知识梳理(下)

接上一篇:Django开发实战之定制管理后台界面及知识梳理(中) 1、前台设置 1、隐藏路由 当你输入一个错误地址时,可以看到这样的报错: 从这样的报错中,我们可以看到,这个报错页面暴漏了路由&a…

Linux学习之禁用防火墙

查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈是有颜色的就是开启状态 黑色的就是关闭状态 关闭防火墙 systemctl stop firewalld.service 输入密码认证 再次查看防火墙状态 systemctl status firewalld.service 第一行前面的圆圈变成黑色说明关闭…

【基础技能】Windows常用快捷键

最近做知识管理,梳理了下个人技能,存在好多基础技能都是一知半解,用的时候都是现搜现查,没有形成一个完整的知识体系,导致一些基础不牢靠,需要再次筑基! 于是就翻阅了微软的官网,撸…

1Panel应用推荐:Uptime Kuma

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

01 | 为什么需要消息队列?

哪些问题适合使用消息队列来解决? 1. 异步处理 2. 流量控制 使用消息队列隔离网关和后端服务,以达到流量控制和保护后端服务的目的。 3. 服务解耦 无论增加、减少下游系统或是下游系统需求如何变化,订单服务都无需做任何更改&#xff0c…

git版本控制器详解(3)本地和远端同步

为什么要使用gitee? gitee是基于git所搭建的网站,会给我们提供一个稳定的服务器保存我们的版本信息。因为github是国外网站,国内访问速度不够稳定,所以我们选择使用gitee。 前边我们讲解了如何在本地进行操作, 接下来进…

golang创建式设计模式------单例模式

目录导航 1.单例模式1)什么是单例模式 2)使用场景3)实现方式1.懒汉式单例模式2.饿汉式3.双重检查式4.sysc.Once式 4)实践案例5)优缺点分析 1.单例模式 1)什么是单例模式 单例模式(Singleton Pattern)是一种常用的设计模式。单例模式的类提供了一种访问其唯一对象的方法&#…

牛客小白月赛90VP

1&#xff0c;签到&#xff1a;https://ac.nowcoder.com/acm/contest/78306/A AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,a[100010]; long long sum; int main() {cin>>n>>m;for(int i1;i<n;i) cin>>a[i];for(int …

[Algorithm][回溯][全排列][子集] + 回溯原理 详细讲解

目录 0.原理讲解1.全排列1.题目链接2.算法原理详解3.代码实现 2.子集1.题目链接2.算法原理详解3.代码实现 0.原理讲解 回溯算法通常⽤于解决组合问题、排列问题和搜索问题等回溯算法的基本思想&#xff1a; 从⼀个初始状态开始&#xff0c;按照⼀定的规则向前搜索&#xff0c;…

针对关键 PuTTY 私钥恢复漏洞的 PoC 发布

安全研究人员针对广泛使用的 PuTTY SSH 和 Telnet 客户端中的一个关键漏洞发布了概念验证 (PoC) 漏洞利用。 该漏洞CVE-2024-31497允许攻击者恢复 PuTTY 版本 0.68 至 0.80 中使用 NIST P-521 椭圆曲线生成的私钥。 该漏洞源于 PuTTY在使用 P-521 曲线时偏向生成ECDSA随机数。…