MoE-LLaVA: Mixture of Experts for Large Vision-Language Models

发表时间:6 Jul 2024

论文链接:https://arxiv.org/pdf/2401.15947 作者单位:Peking University

Motivation最近的进展表明,扩展大型视觉语言模型 (LVLM) 有效地提高了下游任务的性能。然而,现有的缩放方法使所有模型参数在计算中的每个标记都处于活动状态,这带来了大量的训练和推理成本。然而,直接应用MoE来训练稀疏的LVLM是具有挑战性的。我们观察到,同时LLM转换为LVLM和稀疏化模型会导致显著的性能下降。

解决方法:经过多次尝试,我们发现适当的初始化对于稀疏化 LVLM 至关重要,因此,我们引入了一种简单而有效的三阶段训练策略 MoE-Tuning(也就是说之所以三阶段训练,是为了更好的初始化参数)。在这项工作中,我们提出了一种简单而有效的 LVLM 训练策略 MoE-Tuning。该策略创新性地解决了多模态稀疏学习中性能下降的常见问题,从而构建了一个具有大量参数但计算成本恒定的稀疏模型。 此外,我们提出了MoE-LLAVA,这是一种基于moe的稀疏LVLM架构,在部署过程中,它只通过路由器唯一地激活前k个专家,使剩余的专家inactive,保持silence

MoE-Tuning 包括三个阶段:

  1. 在第一阶段,只训练 MLP。

  2. 在第二阶段,除了视觉编码器 (VE) 之外,所有参数都经过训练。

  3. 第三阶段,FFN 用于初始化 MoE 中的专家,只训练 MoE 层。对于每个 MoE 层,每个令牌只激活两个专家,而其他专家保持沉默。

MoE-LLAVA 仅在大约 3B 稀疏激活参数的情况下,在各种视觉理解数据集上表现出与 LLAAVA-1.5-7B 相当的性能,甚至在对象幻觉基准测试中甚至超过了 LLAVA-1.5-13B。如图:

实现方式:Training framework and strategy:MoE-LLAVA 采用三阶段训练策略。

(a) 阶段1,我们只训练 MLP LLM 适应视觉输入数据:For the first stage of pretraining, we use the pretrained data of LLaVA 1.5-558k 说明:阶段 1 的目标是让视觉 token 适应到 LLM,赋予 LLM 看懂图片的实体有哪些的能力。MoE-LLaVA 采用一个 MLP 来将图片 token 投影到 LLM 的输入域,这意味着一个个图片小 patch 被 LLM 当作伪文本 token。在这个阶段,LLM 被训练学会描述图片,理解更高层次的图片语义。在这个阶段 MoE 层不会被应用到 LVLM 中

(b) 阶段2,训练 LLM 后端支持多模态理解能力,不涉及 MoE 层数据:For the second stage, we collect datasets from MIMIC-IT, LRV , SViT and LVIS to provide a robust initialization for MoE-LLaVA. 说明:用多模态的指令数据来微调是提高大模型能力和可控性的关键技术,并且在这个阶段 LLM 被调整为有多模态理解能力的 LVLM。在这个阶段该研究加入更复杂的指令,包含图片逻辑推理,文字识别等高级任务,要求模型有更强的多模态理解能力。通常来说,稠密模型的 LVLM 到此就训练完成,然而研究团队发现同时将 LLM 转为 LVLM 和把模型稀疏化是具有挑战的。因此,MoE-LLaVA 将使用第二阶段的权重作为第三阶段的初始化以降低稀疏模型学习的难度

(c)阶段3, 在这个阶段,我们复制 FFN(阶段2训练过,阶段3还训练) 的权重来初始化每个专家数据:For the third stage, we utilize the same data pipeline as LLaVA-mix-665k。 说明:MoE-LLaVA 将 FFN 复制多份作为专家集合的初始化权重。当视觉 token 和文本 token 被喂入 MoE 层时,router 会计算每一个 token 和专家们的匹配权重,然后每个 token 会被送入最匹配的 top-k 个专家进行处理,最后根据 router 的权重加权求和汇聚成输出。当 top-k 个专家被激活时,其余的专家保持非活动状态,这种模型构成了具有无限可能的稀疏通路的 MoE-LLaVA。

架构:在LLAVA 1.5 (Liu et al., 2023b)之后,我们利用CLIP-Large (Radford et al., 2021)作为视觉编码器,MLP由两个线性层组成(与LLAVA 1.5一样都用的MLP替换LLaVA中的线性层),GELU激活函数。除非另有说明,MoE-LLAVA 使用 MoE 层交替替换 FFN,这意味着 MoE 层的数量是层总数的一半

图c中的expert在哪里?

ST (Switch Transformer): Switch Transformer中,模型的每一层都是一个专家网络的集合,输入数据会被动态地路由到不同的专家进行处理。ST在Transformer模型中用一个稀疏的Switch前馈网络(FFN)层(浅蓝色)替换Transformer中存在的密集FFN层。该层独立地对序列中的标记进行操作,然后路由到多个FFN专家中。switch FFN层返回所选FFN的输出,然后乘以路由器阈值,然后进行合并。参考链接:https://blog.csdn.net/chattyfish/article/details/131908504

也就是说图c中的不同的FFN就是expert:

实验Image Understanding Evaluation,Object Hallucination Evaluation, MoE-LLaVA 的多模态理解能力评估。

由于 MoE-LLaVA 是第一个基于 LVLM 搭载 soft router 的稀疏模型,因此该研究将之前的模型归纳为稠密模型。研究团队在 5 个图片问答 benchmark 上验证了 MoE-LLaVA 的性能,并报告了激活的参数量和图片分辨率。与 SOTA 方法 LLaVA-1.5 相比,MoE-LLaVA-2.7B×4 展现了强大的图片理解能力,在 5 个 benchmark 上性能非常接近 LLaVA-1.5。其中 MoE-LLaVA 用 3.6B 的稀疏激活参数在 SQAI 上超过了 LLaVA-1.5-7B 1.9%。值得注意的是,由于 MoE-LLaVA 的稀疏结构,只需要 2.6B 的激活参数量就能全面超过 IDEFICS-80B

结论:(主要由消融实验得出)

  1. MoE-LLaVA 这一稀疏模型可以用更少的激活参数达到和稠密模型相当甚至超过的性能。

  2. MoE-LLaVA 的 yes ratio 占比处于较均衡状态,这表明稀疏模型 MoE-LLaVA 能够根据问题做出正确的反馈。

  3. MoE-LLaVA 的专家们学到了某种特定的模式,它能够按照一定的规律进行专家分工

  4. 研究发现 text 和 image 的路由分布极其相似,例如当专家 3 在 17-27 层努力工作时,它所处理的 text 和 image 的占比是相似的。这表明 MoE-LLaVA 对于模态并无明显的偏好

  5. 研究团队发现对于某个未见的 text token 或 image token,MoE-LLaVA 始终偏向于派发专家 2 和 3 来处理模型深层。专家 1、4 倾向于处理初始化的 token。这些结果能够帮助我们更好地理解稀疏模型在多模态学习上的行为,并探索未知的可能。

局限:虽然 MoE-LLAVA 展示了有竞争力的能力,但训练稳定性存在一些困难尤其是 16 位浮点精度Future:由于存在多个专门针对不同能力的专家,MoE-LLAVA 可以轻松扩展以处理其他任务,例如检测、分割、生成或处理更多模式,例如视频、深度和热量。

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

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

相关文章

深度学习笔记(神经网络+VGG+ResNet)

深度学习 主要参考博客常用英语单词 概念应用神经网络基础神经网络基本结构 超参数超参数是什么常用超参数超参数搜索过程常用超参数调优办法(通过问题复杂度和计算资源选择) 激活函数介绍为什么要使用激活函数推荐博客 sigmoid激活函数(使用…

第R1周:RNN-心脏病预测

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊 要求: 1.本地读取并加载数据。 2.了解循环神经网络(RNN)的构建过程 3.测试集accuracy到达87% 拔高: 1.测试集accuracy到达89% 我的环境&a…

[windows10]win10永久禁用系统自动更新操作方法

WinR打开运行 输入regedit打开注册表 点击确定打开注册表 按照如下路径找到UX 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 在空白处点击鼠标右键,新建选择DWORD,然后重命名为FlightSettingsMaxPauseDays 双击FlightSet…

Vue项目学习(项目的开发流程)(2)

1、vue项目的默认首页和入口文件 2、两种书写的方式是表达一样的意思——>el:指定当前Vue实例挂载到哪个区域里 3、如果属性值和属性名一致,冒号和后面可以省略不写 (所以有两种写法) 4、以".vue"文件结尾的文件在项…

Linux操作系统之进程信号

进程信号 一、信号1、概念2、系统定义的信号列表3、常见的信号处理方式 二、产生信号的方式1、终端按键(1)组合键(2)示例代码(3)运行结果 2、调用系统函数(1)kill命令(2&…

CRC16循环冗余校验

代码&#xff1a; #include<stdio.h> #include <stdint.h>#define uchar unsigned char #define uint unsigned int static const uint8_t auchCRCHi[] { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x0…

深入理解接口测试:实用指南与最佳实践(三)API文档解析及编写测试用例

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 这一阶段是接口测试的学习&#xff0c;我们接下来的讲解都是使用Postman这款工具&#xff0c;当然呢Postman是现在一款非常流行的接口调试工具&#xff0c;它使用简单&#xff0c;而且功能也很强大。不仅测试人员会使用…

pxe自动安装linux

实验环境 1.rhel7主机 2开启主机图形&#xff08;本人最小化安装&#xff0c;先下载&#xff09; 3配置网络 4关闭VMware dhcp功能 5能够自动安装系统 完成rhedhat7图形,kickstart,启动图形化制作工具 安装kickstart 启动图形化制作工具 在ks.cfg可以添加安装时下载的包 …

算法学习day29

一、乘法表中第k小的数(和有序矩阵中第k小的数类似) 题意&#xff1a; 乘法表是大小为 m x n 的一个整数矩阵&#xff0c;其中 mat[i][j] i * j&#xff08;下标从 1 开始&#xff09;。 给你三个整数 m、n 和 k&#xff0c;请你在大小为 m x n 的乘法表中&#xff0c;找出…

可视化图表与源代码显示的动态调整

可视化图表与源代码显示的动态调整 页面效果描述&#xff1a;本篇代码实现了通过拖动一个可调整大小的分隔符&#xff0c;用户可以动态地调整图表显示区域和源代码显示区域的大小。通过监听鼠标事件&#xff0c;当用户拖动分隔符时&#xff0c;会动态计算并更新两个区域的大小 …

Vue项目学习(1)

1、进入cmd命令行——> vue ui ——>等等操作 2、 3、src目录下 4、vue项目的启动 &#xff08;1&#xff09; &#xff08;2&#xff09; 5、如何更改前端vue项目的端口号&#xff1f;——>去vue.config.js里配置应一个对象

mprpc框架的应用示例

一、注册 有一个本地服务&#xff0c;我想把它发布成远程服务&#xff0c;首先在user.proto中定义rpc方法的描述&#xff0c;定义参数和响应的消息类型 然后在userservice.cc文件中通过继承UserServiceRpc这个类&#xff0c;重写一下响应的方法&#xff08;打四个动作&#xf…

shell函数的基本知识

文章目录 shell函数定义函数调用函数函数参数返回值 Shell 输入/输出重定向输入重定向输出重定向 Shell 函数是 Shell 脚本编程中的一个非常有用的特性&#xff0c;它允许你将一段代码封装起来&#xff0c;给它一个名字&#xff08;函数名&#xff09;&#xff0c;然后在脚本的…

低代码: 开发难点分析,核心技术架构设计

开发难点分析 1 &#xff09;怎样实现组件 核心问题&#xff1a;编辑器 和 页面其实整个就是一系列元素构成的这些元素的自然应该抽象成组件&#xff0c;这些组件的属性应该怎样设计在不同的项目中怎样做到统一的使用 2 &#xff09;跨项目使用 在不同的项目中怎样做到统一的…

【Linux】线程互斥

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

C# Unity 面向对象补全计划 七大原则 之 依赖倒置原则 (DIP)难度:☆☆ 总结:多抽象,多接口,少耦合

本文仅作学习笔记与交流&#xff0c;不作任何商业用途&#xff0c;作者能力有限&#xff0c;如有不足还请斧正 本系列作为七大原则和设计模式的进阶知识&#xff0c;看不懂没关系 请看专栏&#xff1a;http://t.csdnimg.cn/mIitr&#xff0c;查漏补缺 1.依赖倒置原则 (DIP) 这…

「队列」实现FIFO队列(先进先出队列|queue)的功能 / 手撕数据结构(C++)

概述 队列&#xff0c;是一种基本的数据结构&#xff0c;也是一种数据适配器。它在底层上以链表方法实现。 队列的显著特点是他的添加元素与删除元素操作&#xff1a;先加入的元素总是被先弹出。 一个队列应该应该是这样的&#xff1a; --------------QUEUE-------------——…

骨传导耳机哪个牌子好?五款业界高性能机型推荐,让你选购不迷茫!

骨传导耳机哪个牌子好&#xff1f;哪款耳机值得入手&#xff1f;作为一名资深的数码设备测评师&#xff0c;我极力推荐大家尝试下骨传导耳机&#xff0c;它无需直接堵塞耳道&#xff0c;既能起到保护听力的作用&#xff0c;又能在使用中保持对外界的环境感知。然而&#xff0c;…

OD C卷 - 园区参观路径

园区参观路径&#xff08;100&#xff09; 有一个矩形园区&#xff0c;从左上角走到右下角&#xff0c;只能向右、向下走&#xff1b;共有多少条不同的参观路径&#xff1b; 输入描述&#xff1a; 第一行输入长度、宽度 后续每一行表示 对应位置是否可以参观&#xff0c;0可…

poetry配置镜像

1.简介 poetry 是一个包管理和打包的工具。 在 Python 中&#xff0c;对于初学者来说&#xff0c;打包系统和依赖管理是非常复杂和难懂的。即使对于经验丰富的开发者&#xff0c;一个项目总是要同时创建多个文件&#xff1a; setup.py ,requirements.txt,setup.cfg , MANIFES…