多模态大模型:基础架构

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

多模态大型语言模型(MLLM)是人工智能领域的前沿创新,它结合了语言和视觉模型的功能,可以处理复杂的任务,如视觉问答和图像字幕。这些模型利用大规模预训练,集成了多种数据模态,以显著提高其在各种应用程序中的性能。

架构概览

较为常见的MLLM框架可以分为三个主要模块:接收且有效编码的多模态编码器、多模态之间数据对齐的投影器、和接收对齐信号并执行推理的大语言模型。当然各种项目总有自己的差异化设计,例如Chameleon或者Octo。<可以随链接查看!>

MLLM的主要的优化方向,在于处理高分辨率图像、压缩视觉标记(token)、多模态对齐、高效结构和利用紧凑语言模型等。下图是一些MLLM的部分例子,将其中的基座LLM、视觉编码器、图像分辨率和投影器列具出来。

视觉编码器

来看看视觉编码器,与主流MLLM实践一致,基本上都是选择CLIP<链接查看详情!>的预训练模型。这种方法有助于更好地对齐视觉和文本输入的特征空间。视觉编码器在MLLM参数中所占比例相对较小,因此与语言模型相比,轻量级优化不是刚需。

单一的编码器肯定无法在不同的任务中始终表现出色,将各种偏差的数据编码器进行联动则能够产生令人惊讶的相似结果。

BRAVE的深度消融实验证明了上述的结论。BRAVE按顺序连接了K个不同视觉编码器的特征(上图左)。之后这些串联特征被MEQ-Former进一步提炼(上图右)。

多个视觉编码器的确有助于捕捉广泛的视觉表征,从而增强模型对视觉数据的理解。Cobra将DINOv2和SigLIP集成为其视觉主干,其原理是将DINOv2的低级空间特征与 SigLIP提供的语义属性相结合将提高后续任务的性能。SPHINX-X采用两个视觉编码器DINOv2和CLIP-ConvNeXt。

鉴于这些基础模型已经通过不同的学习方法(自监督与弱监督)和网络架构(ViT与 CNN)进行预训练,应该能够提供互补和复杂的视觉表征。

这些术语将在后续的文章中逐一讲解!可以关注“具身智能”专栏!

轻量级视觉编码器Vision Transformer架构在实际应用中由于硬件和环境限制而面临挑战。ViTamin代表一种轻量级视觉模型,专门针对视觉和语言模型量身定制。依照下图所示,通过两层的MBC外加一层的注意力块完成视觉编码,然后和文本一起进行对比学习。

值得一提,ViTamin-XL的参数数量只有436M,却达到了ImageNet zero-shot 82.9%的准确率,超过了EVA-E的准确率82.0%。要知道EVA-E的参数数量为4.4B。

视觉投影器

视觉投影器的目的在于将视觉嵌入(Visual embeddings)等输入映射到文本空间(Text Embeddings)中。换句话说也就是将不同模态进行对齐。

1)投影,相信读者最直观的就是线性投影仪或多层感知器(MLP)来实现,可以理解就是最普通的神经网络。比如几层的神经网与非线性激活函数组合而成。

2)部分的投影基于注意力机制。BLIP2引入Q-Former,这是一种轻量级转换器,它使用一组可学习的查询向量从冻结的视觉模型中提取视觉特征。

Q-former基于对比学习进行训练,上图右侧展示了由Flamingo提出的感知重采样器(Perceiver Resampler)考虑在交叉注意力中使用earned Queries(上图彩色序列块)作为Q,而图像特征展开与Q连接起来,在交叉注意力中充当K和V。

上图为BLIP-2的第二阶段架构,通过这种方式,在Learned Queries的相应位置的转换器输出被作为视觉特征的聚合表示,从而将可变长度的视频帧特征标准化为固定大小的特征。

3)部分的投影基于CNN。MobileVLMv2提出了LDPv2,这是一种新的投影。由三部分组成:特征转换、Token压缩和位置信息增强。通过使用逐点卷积层、平均池化和具有跳跃连接的PEG模块,LDPv2实现了更高的效率,与原始LDP相比,参数减少了99.8%,处理速度略快。

4)最后还有基于大名鼎鼎的Mamba,VL-Mamba在其视觉语言投影仪中实现了2D视觉选择性扫描(VSS)技术,促进了不同学习方法的融合。

5)和所有武功都有最后一式一样,投影可以采用混合架构。Honeybee提出了两种视觉投影仪的组合,即C-Abstractor和D-Abstractor,它们遵循两个主要设计原则:(i)在视觉Token数量生成方面提供适应性,以及(ii)有效地维护本地上下文。下图详细的展示了Honeybee的投影混合架构:

C-Abstractor,或卷积抽象器,专注于通过采用卷积架构来熟练地对局部上下文进行建模。该结构由L个ResNet块组成,然后紧接着是额外的L个ResNet块,这有助于将视觉特征抽象为任意平方数量的视觉标记。而D-Abstractor是基于Deformable注意力的Abstractor。

视觉Token压缩

MLLM在需要复杂识别的任务中面临着相当大的挑战,尤其是带有OCR的场景。尽管提高图像分辨率可以解决,然而增加视觉Token的数量给MLLM带来了巨大的计算负担,这主要是由于Transformer架构中计算成本与输入Token数量呈二次比例,因此如何优化则成为这个领域很热门的主题。

直接使用高分辨率视觉编码器进行细粒度感知的成本高,并且不符合实际使用要求。为了让MLLM能够感知细节且实现低分辨率的编码能力,一般会利用全局视图进行图片规模的压缩以及通过拆分衍生局部的图像块(Patch)。

LLaVA-UHD提出了一种图像模块化策略,将原生分辨率的图像划分为更小的可变大小切片,以实现高效和可扩展的编码。注意下图左侧,这个框架自动的选择最优的切分方案。

此外,InternLM-XComposer2-4KHD 引入了一种通过自动布局排列动态调整分辨率的策略,不仅可以保持图像的原始纵横比,还可以自适应地改变Patch布局和计数,从而提高图像信息提取的效率。

通过对不同分辨率的图像实施自适应输入策略,可以在感知能力和效率之间实现平衡。如上图所示,说白了就是将原图压缩和切块一起进行编码。

Mini-Gemini由两个编码器组成,一个用于高分辨率图像,另一个用于低分辨率视觉嵌入。它提出了patch的信息挖掘,它使用低分辨率的视觉嵌入作为查询,通过交叉注意力从高分辨率候选者那里检索相关的视觉线索。

Scaling on Scales表明,多尺度较小模型的学习能力与较大模型相当,并且预训练较小的模型可以在MLLM基准测试上匹配甚至超过较大模型的优势,同时计算效率更高。

S2-Wrapper是一种简单的机制,它可以以无参数的方式将任何预训练的视觉模型扩展到多个图像尺度。以ViT-B为例,S2-Wrapper将输入图像插值到不同的尺度(例如224^2和448^2),然后将每个尺度分割成几个与默认输入大小相同的子图像(448^2→4×224^2)。对于每个尺度,所有子图像都被输入到同一个模型中,输出(例如4×16^2)被合并到整个图像的特征图中(32^2)。不同尺度的特征图被平均池化到原始空间大小(16^2)并连接在一起。最终的多尺度特征具有与单尺度特征相同的空间形状,但有更高维度(例如1536 vs 768)。

小结

MLLM的主要问题是资源需求,训练这些模型需要大量的计算资源,通常只有拥有大量预算的大型企业才能使用。例如,在 NVIDIA A100 GPU上训练像MiniGPT-v2这样的模型需要超过800个GPU小时,这对于许多学术研究人员和小公司来说成本是巨大的。此外,推理的高计算成本进一步加剧了这个问题,使得在边缘计算等资源受限的环境中部署这些模型变得困顿。OpenAI的GPT-4V和谷歌的Gemini等模型通过大规模预训练取得了显著的性能,但它们的计算需求限制了它们的使用。

目前应对这些挑战的方法集中在优化MLLM的效率上,需要MLLM采用多种创新技术来解决资源消耗问题。其中包括引入更轻的架构,旨在降低参数和计算复杂性。例如,MobileVLM和LLaVA-Phi等模型使用视觉Token压缩和高效的视觉语言投影器来提高效率。

通过采用Token压缩和轻量级模型结构,这些模型实现了计算效率的显著提高,并拓宽了其应用范围。例如,与以前的型号相比,LLaVA-UHD支持处理分辨率高达6倍的图像,只需94%的计算量。这使得在学术环境中训练这些模型成为可能,一些模型只需23小时即可使用8个A100 GPU进行训练。值得一提的是,这些效率的提高不是以牺牲性能为代价的。

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

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

相关文章

gitee添加别人的仓库后,在该仓库里添加文件夹/文件

一、在指定分支里添加文件夹&#xff08;如果库主没有创建分支&#xff0c;自己还要先创建分支&#xff09; eg:以在一个项目里添加视图文件为例&#xff0c;用Echarts分支在usr/views目录下添加Echarts文件夹&#xff0c;usr/views/Echarts目录下添加index.vue 1.切换为本地仓…

Linux系统安装Ruby语言

Ruby是一种面向对象的脚本语言&#xff0c;由日本的计算机科学家松本行弘设计并开发&#xff0c;Ruby的设计哲学强调程序员的幸福感&#xff0c;致力于简化编程的复杂性&#xff0c;并提供一种既强大又易于使用的工具。其语法简洁优雅&#xff0c;易于阅读和书写&#xff0c;使…

重学java 66.IO流 转换流

且敬我疯狂&#xff0c;生命中不败的篇章 —— 24.6.11 一、字符编码 计算机中储存的信息都是用二进制数表示的&#xff0c;而我们在屏幕上看到的数字、英文、标点符号、汉字等字符是二进制数转换之后的结果。[按照某种规则&#xff0c;将字符存储到计算机中&#xff0c;称为编…

打造一个属于你的桌面天气 超级有个性的天气桌面

打造一个属于你的桌面天气 超级有个性的天气桌面。大家好&#xff0c;今天我们带来一个非常有趣的桌面天气工具&#xff0c;喜欢桌面diy的你&#xff0c;快点用上它吧&#xff01; 桌面上的美化&#xff0c;是许多爱美用户的心血和热爱。每个地方的美化&#xff0c;都是自己亲…

机器学习课程复习——隐马尔可夫

不考计算题 Q:概率图有几种结构? 条件独立性的公式? 顺序结构发散结构汇总结构Q:隐马尔可夫模型理解? 概念 集合:状态集合、观测集合 序列:状态序列、观测序列

linux环境编程基础学习

Shell编程&#xff1a; 相对的chmod -x xx.sh可以移除权限 想获取变量的值要掏点dollar&#xff08;&#xff04;&#xff09; 多位的话要加个花括号 运算&#xff1a;expr 运算时左右两边必须要加空格 *号多个含义必须加转义符 双引号可以加反单&#xff0c;但是发过来就不行 …

【android】安卓入门学习

文档介绍&#xff1a;http://8.136.122.222/book/primary/kotlin/kotlin-intro.html 文档补充说明&#xff1a;https://blog.csdn.net/qq_42059717/category_12047508.html 一、搭建环境及工具安装 见文档 二、工具界面及项目文件介绍 ├── app //工程主模块名称 │ …

【Linux安装Conda环境的详细教程】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

PTP简介及Linux phy ptp驱动实现

1、PTP简介 PTP(precision time protocol)精确时间协议&#xff0c;是一种时间同步的协议&#xff0c;对应 IEEE 1588 标准&#xff0c;是基于网络数据包的一种时间同步协议&#xff0c;1588v2的同步精度可以达到ns级&#xff0c;但1588协议对硬件有依赖。 2、PTP原理 时间同…

DFS(一)

问题一(指数级选择) 从1~n这n个整数中任意选取多个&#xff0c;输出所有可能的选择方案。 首先想一下&#xff0c;在现实世界中&#xff0c;我们要如何解决这个问题。 应该是一个一个枚举&#xff0c;即每个数都可以有两个选择(选/不选)。共有种结果。 想一下&#xff0c;如…

PHP转Go系列 | 字符串的使用姿势

大家好&#xff0c;我是码农先森。 输出 在 PHP 语言中的输出比较简单&#xff0c;直接使用 echo 就可以。此外&#xff0c;在 PHP 中还有一个格式化输出函数 sprintf 可以用占位符替换字符串。 <?phpecho 码农先森; echo sprintf(码农:%s, 先森);在 Go 语言中调用它的输…

创建进程的常用方式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在Python中有多个模块可以创建进程&#xff0c;比较常用的有os.fork()函数、multiprocessing模块和Pool进程池。由于os.fork()函数只适用于Unix/Linu…

0617,递归问题(详细——好好好一入递归深似海)

目录 第七章&#xff08;函数&#xff09;思维导图总结&#xff1a;递归三问 01&#xff0c;电影院问题 理解递归的执行过程 02&#xff0c;FIBNACCI数列 不是说具有递归结构的问题&#xff0c;就可以用递归求解——存在大量的重复计算 法一&#xff1a;自顶向下求解 BUG…

ruoyi框架第二天,自定义接口,在若依框架显示数据

书接上文&#xff0c;搭建好若依&#xff0c;并且创建自己想要的模块。 让ruoyi框架显示自己想要的模块。 今天&#xff0c;我们就要自定义接口&#xff0c;模仿ruoyi框架收发数据模式&#xff0c;来创建自己的模块。 我们创建好自己想要的接口&#xff0c;我这个是无参的查…

【Java】已解决java.util.EmptyStackException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.util.EmptyStackException异常 一、问题背景 java.util.EmptyStackException是Java在使用java.util.Stack类时可能会遇到的一个异常。这个异常通常在尝试从空的栈中弹出&am…

四连杆机构运动学仿真 | Matlab源码+理论文本【超详细】

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学详细的公式推导文档&#xff0c;从而帮助大家更好…

2024年化学、能源与核工程国际会议(ICCENE 2024)

2024年化学、能源与核工程国际会议(ICCENE 2024) 2024 International Conference on Chemical, Energy and Nuclear Engineering (ICCENE 2024) 会议地点&#xff1a;三亚&#xff0c;中国 网址&#xff1a;www.iccene.com 邮箱: iccenesub-conf.com 投稿主题请注明:ICCEN…

【面试题】Spring常见面试题整理2024(全是干货!!!)

备战实习&#xff0c;会定期给大家整理常考的面试题&#xff0c;大家一起加油&#xff01; &#x1f3af; 注意&#xff1a;文章若有错误的地方&#xff0c;欢迎评论区里面指正 &#x1f36d; 系列文章目录 【面试题】MySQL常见面试题总结【面试题】面试题分享之JVM篇【面试题…

信息学奥赛初赛天天练-29-CSP-J2022阅读程序-掌握递归、递推、动态规划、二分与极值函数应用

PDF文档公众号回复关键字:20240619 2022 CSP-J 阅读程序2 阅读程序(判断题1.5分 选择题3分 共计40分 ) 01 #include <algorithm> 02 #include <iostream> 03 #include <limits> 04 05 using namespace std; 06 07 const int MAXN 105; 08 const int MAX…

C/C++ string模拟实现

1.模拟准备 1.1因为是模拟string&#xff0c;防止与库发生冲突&#xff0c;所以需要命名空间namespace隔离一下&#xff0c;我们来看一下基本内容 namespace yx {class string{private://char _buff[16]; lunix下小于16字节就存buff里char* _str;size_t _size;size_t _capac…