LLaVA-MoLE:解决多模态大模型指令微调中的数据冲突问题

2024-09-02 08:12

本文主要是介绍LLaVA-MoLE:解决多模态大模型指令微调中的数据冲突问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

人工智能咨询培训老师叶梓 转载标明出处

多模态大模型(MLLMs)通过指令微调(instruction finetuning),能够执行各种任务,如理解图表、处理文档和回答基于图像的问题。但是,当从不同领域混合指令数据进行微调时,模型在特定领域的任务上可能会出现性能下降。这种现象被称为数据冲突,它限制了通过增加新领域训练数据来扩展MLLM能力的可能性。为了应对这一挑战,来自美团公司的研究者们提出了一种新颖的方法——LLaVA-MoLE,即稀疏混合LoRA专家(Sparse Mixture of LoRA Experts)。

该模型基于LLaVA-1.5,通过在Transformer层中引入一组LoRA(Low-Rank Adaption)专家,并为每个token选择最适合的专家进行处理。这种设计允许模型根据不同领域的token激活不同的专家,从而扩展了MLLM处理多领域数据的能力。

论文链接:https://arxiv.org/pdf/2401.16160

方法

低秩适应(LoRA)是一种针对大模型(LLMs)的参数高效微调方法。它能够应用于任意线性层。具体来说,对于一个输入为 和权重矩阵 ​ 的线性层 h=Wx,LoRA 学习一个低秩分解的更新:

其中,是低秩矩阵,r 是远小于d_o​ 和 d_i​ 的秩,α 控制对原始W 的变化幅度。在学习LoRA模块过程中,只有矩阵A 和 B 会被更新。

图 2 展示了 LLaVA-MoLE 模型的整体框架,该模型基于 LLaVA-1.5 构建,采用了稀疏混合 LoRA 专家(Sparse Mixture of LoRA Experts)的方法来训练。

  1. 输入图像处理:输入图像首先通过 CLIP ViT(Vision Transformer)进行处理,CLIP ViT 是一种视觉编码器,能够将图像转换成一系列的视觉嵌入(visual embeddings)。之后,这些视觉嵌入通过一个两层的多层感知器(MLP)进行进一步的映射。

  2. 文本输入处理:文本输入首先被分词(tokenized),然后通过词嵌入矩阵转换成嵌入表示,这些嵌入与视觉输入一起被串联(concatenated),形成最终输入到大型语言模型(LLM)的混合嵌入序列。

  3. 稀疏混合 LoRA 专家:在 LLaVA-MoLE 模型中,每个 Transformer 层都采用了提出的稀疏混合 LoRA 专家进行训练。具体来说,每个全连接层(FFN)都会根据路由器(router)的输出分布选择并结合一个 LoRA 专家来进行计算。

  4. 路由器(Router)的作用:路由器负责为每个 token 分配一个最合适的 LoRA 专家。路由器的输出分布决定了 FFN 应该选择哪个专家来处理当前的 token。

  5. 自注意力(Self-Attention)训练:自注意力机制同样采用 LoRA 进行训练,但在这个框架中没有应用专家混合(MoE)。

  6. 计算并行化:对于每个 LoRA 专家,相同子序列的 token 可以并行计算,这提高了模型训练的效率。

如图 2 所示,一个MLLM可以被表述为:

其中 是视觉编码器和适配器,将输入图像映射成一系列视觉嵌入,将输入问题 T_q​ 进行标记化并用词嵌入矩阵嵌入离散标记,而 ∣∣ 是序列连接操作。因此,MLLM的输入实际上是一个混合嵌入序列。训练MLLM的指令数据被组织成三元组 (),不同的指令数据集可能有不同的分布,导致训练出的MLLM表现出不同的行为或专长。

为了缓解混合不同类型的指令数据时产生的冲突,研究者引入了一组LoRA专家和一个路由器。在每个输入token上,路由器学习选择最合适的专家激活,使模型具有额外的能力来处理不同类型的输入。假设每层有K 个专家,选择具有最高路由函数值的专家:

然后激活选定的专家来执行实际计算,而忽略当前token的其他专家。例如,对于现代LLMs中的FFN层通常是多层的,每一层的FFN都会有一个单独的MoE,但它们共享相同的路由器。通过只激活top-1专家,实际计算成本与原始FFN中的plain-LoRA大致相同。

为了确保模型的高效运行,研究者还引入了负载平衡损失,以避免专家分配的严重不平衡。负载平衡损失的公式为:

其中 cj​ 是分配给第j 个专家的token数量,pj​ 是第 j 个专家的总路由概率。通过最小化,专家的分配趋于均匀,从而避免了某些专家过载而另一些专家闲置的问题。

通过上述方法,LLaVA-MoLE模型能够有效地解决数据冲突问题,同时保持了计算成本的可控性,为多模态大型语言模型的微调提供了一种有效的解决方案。

想要掌握如何将大模型的力量发挥到极致吗?叶老师带您深入了解 Llama Factory —— 一款革命性的大模型微调工具。9月22日晚,实战专家1小时讲解让您轻松上手,学习如何使用 Llama Factory 微调模型。

加助理微信提供直播链接:amliy007,29.9元即可参加线上直播分享,叶老师亲自指导,互动沟通,全面掌握Llama Factory,关注享粉丝福利,限时免费CSDN听直播后的录播讲解。
LLaMA Factory 支持多种预训练模型和微调算法。它提供灵活的运算精度和优化算法选择,以及丰富的实验监控工具。开源特性和社区支持使其易于使用,适合各类用户快速提升模型性能。

实验

基本模型架构遵循LLaVA1.5的设计,其中使用了CLIP ViT-L作为视觉编码器,输入图像分辨率为336x336,补丁大小为14。适配器是一个两层的MLP,用于转换来自ViT的576个token。大型语言模型(LLM)是Vicuna-7B-v1.5。在所有实验的训练过程中,ViT和Vicuna的权重都被冻结。除非特别说明,否则应用于LLM的LoRA秩是32。

模型在两个阶段进行训练:预训练和指令微调。预训练阶段使用了ShareGPT4V数据集,包含由GPT4V生成的数据训练的标题器产生的130万个详细的字幕数据。指令微调阶段,采用了来自三个不同领域的多模态指令数据集:一般多任务、文档和生物医学。M3IT和ShareGPT4V Instruct是两个一般多任务指令数据集,而UReader收集的文档导向指令数据集包含来自多个公共数据集的图像和指令。还使用了PathVQA作为生物医学领域的指令数据。所有这些数据集都是公开的,并且按照UReader的数据划分进行训练和测试。表格1列出了预训练(PT)和监督指令微调(SFT)阶段的训练参数。

表 2 展示了在不同数据和MoE配置下训练的模型的实验结果。首先提供了官方LLaVA-1.5和LLaVA-Med模型在每个基准测试上的结果。然后,通过在不同数据集上单独训练plain-LoRA模型,并将其命名为LLaVA-1.5、LLaVA-Doc和LLaVA-Med。这些模型在与其训练数据集相对应的基准测试上的性能被视为该基准的基线性能。例如,特别重现的LLaVA-1.5†专门在一般多任务指令数据上训练,在Tiny LVLM-eHub上实现了与官方LLaVA-1.5 (307.2)相当的306.3的总分。通过混合不同数据集,发现LLaVA-Mix在eHub的整体性能比LLaVA1.5†降低了7-9分。这表明一般多任务数据与这些数据类型之间存在冲突,这种冲突可能会损害模型的一般多任务QA能力。提出的LLaVA-MoLE成功地解决了上述冲突。通过比较LLaVAMoLE[1,1,0]与LLaVA-Mix[1,1,0],可以观察到eHub的整体性能显著提高,与基线LLaVA-1.5†相当,而UReader基准测试的性能甚至超过了基线LLaVA-Doc†,例如在ChartQA上绝对性能提高了6.4。这可以证明混合专家已经学会了处理不同类型的指令数据并减少潜在的数据冲突。

表 3 展示了在不同LoRA秩下训练的模型的实验结果。可以看到,对于LoRA秩32、64和96,将文档指令数据与一般多任务指令数据混合都会导致eHub基准测试的性能下降。但通过比较实验LLaVA-Mix[1,1]-R32、LLaVA-Mix[1,1]-R64和LLaVA-Mix[1,1]-R96的结果,也发现增加LoRA秩,即增加模型容量,可以在一定程度上缓解数据冲突问题:eHub的总分从R32的298.8增加到R96的301.1。此外,如果将LoRA秩增加到128,似乎解决了这个问题。然而,作者认为简单地提高模型容量是一种昂贵的解决方案,会导致训练过程中的计算和内存增加。而提出的LLaVA-MoLE可以在不增加太多额外成本的情况下解决这个问题。值得注意的是,对于较小(32)和较大(128)的LoRA秩,LLaVAMoLE在两个基准测试上都显著优于LLaVA-Mix。

图 3 展示了在所有三个数据集的混合上训练的LLaVA-MoLE模型的路由选择的粗略分析。通过计算每个基准测试中分配给每个专家的token比例的均值和标准差,对第0层、第2层、第10层和第28层的结果进行了可视化。对于某些层,例如第2层和第10层,不同类型数据的专家选择模式相似,但在不同层之间有所不同。也有一些层(第10层和第28层),每种类型的数据都有自己的专家选择模式。没有观察到明显的模式表明某个特定专家在其他专家中一直更受青睐。但某些专家可能在特定数据集上比其他专家更倾向于被选择,例如,专家0在所有层的PathVQA样本中更频繁地被激活。

通过这些详细的实验设置和结果分析,证明了LLaVA-MoLE模型在解决多模态大型语言模型指令微调中的数据冲突问题方面是有效的,并且能够在保持计算成本可控的同时提高模型性能。

这篇关于LLaVA-MoLE:解决多模态大模型指令微调中的数据冲突问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129454

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

好题——hdu2522(小数问题:求1/n的第一个循环节)

好喜欢这题,第一次做小数问题,一开始真心没思路,然后参考了网上的一些资料。 知识点***********************************无限不循环小数即无理数,不能写作两整数之比*****************************(一开始没想到,小学没学好) 此题1/n肯定是一个有限循环小数,了解这些后就能做此题了。 按照除法的机制,用一个函数表示出来就可以了,代码如下

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G