(2024,MixLoRA,任务干扰,独立因子选择,条件因子选择)使用 LoRA 的条件混合进行多模态指令调优

news2024/11/15 19:52:00

Multimodal Instruction Tuning with Conditional Mixture of LoRA

公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群)

目录

0. 摘要

3. 任务干扰在多模态指令调优中的 LoRA 应用

3.1 背景:LoRA

3.2 调查多模态指导调优中的任务干扰

4. 条件 LoRA 混合

4.1 动态因子选择

4.1.1 独立因子选择

4.1.2 条件因子选择

4.1.3 动态自适应矩阵的重建

5. 实验


0. 摘要

多模态大型语言模型(MLLMs)在不同领域的各种任务中展现了出色的熟练性,越来越关注提高它们在看不见的多模态任务上的 zero-shot 泛化能力。多模态指令调优已成为通过指令在各种多模态任务上对预训练模型进行微调以实现 zero-shot 泛化的成功策略。随着 MLLMs 的复杂性和规模的增加,对于像低秩适应(Low-Rank Adaption,LoRA)这样的参数高效的微调方法的需求变得至关重要,该方法通过使用最小的参数集进行微调。

然而,在多模态指令调优中应用 LoRA 面临任务干扰的挑战,这导致性能下降,尤其是在处理广泛的多模态任务时。为了解决这个问题,本文介绍了一种新方法,将多模态指令调优与条件 LoRA 混合(Mixture-of-LoRA,MixLoRA)相结合。它通过动态构建适应于每个输入实例独特需求的低秩适应矩阵,来减轻任务干扰。对各种多模态评估数据集的实验证明,MixLoRA 不仅在相同或更高秩的情况下胜过传统的 LoRA,展示了其在各种多模态任务中的功效和适应性。

3. 任务干扰在多模态指令调优中的 LoRA 应用

3.1 背景:LoRA

3.2 调查多模态指导调优中的任务干扰

我们的研究深入探讨了在参数高效的多模态指令调优中分析任务对之间梯度方向冲突的任务干扰。对于每一对任务 i 和 j,我们首先估计在根据任务 j 的损失 Lj 优化共享参数 θ 时,任务 i 的损失 Li 的变化,遵循(Zhu等,2022):

其中,xi 和 xj 是任务 i 和 j 的采样训练 batch,λ 是学习率。然后,任务 j 对任务 i 的干扰被量化如下:

在这里,正的 I_(i,j)​ 表明任务 i 和 j 之间的梯度方向是对齐的,而负值意味着梯度方向是分离的,表明任务 j 对任务 i 产生不利影响。

我们在使用 LoRA 和秩为 4 进行微调的 LLaVa(Liu等,2023)模型上进行实验,计算来自 Vision-Flan(Xu等,2023a)的六个不同任务之间的任务干扰,包括 “ScienceQA”(Lu等,2022)(用于“复杂推理”),“COCO”(Lin等,2014)(用于“粗粒度感知”),“Fair-Face”(Karkkainen和Joo,2021)(用于“细粒度感知”),“iNaturalist”(Van Horn等,2018)(用于“知识密集型”),“STVQA”(Biten等,2019)(用于“OCR”),以及 “PACS”(Li等,2017)(用于“领域特定”)。

我们基于涉及 LoRA A 和 B 的梯度计算任务干扰矩阵 I 的平均值,跨越各个层次。图 2 显示了 MLP(图 2a) 和 Self-Attention(图 2b) 在第 5 层和第 25 层 Transformer 层的 LoRA A 和 B 的任务干扰分数。

我们的结果显示,对于 LoRA A 和 B,无论在浅层还是深层 Transformer 层,都存在显著的任务干扰。例如,如图 2b 所示,在第 5 层的 LoRA A 中,领域特定的分类任务 “PACS” 对粗粒度感知任务 “COCO” 产生负面影响,负干扰分数为 -7.3。与此同时,还观察到了正面的影响。例如,图 2a 显示,在 LoRA B 的第 5 层,“PACS” 对 OCR 任务 “ST-VQA” 产生积极影响。正面和负面干扰的存在表明指导任务之间存在复杂的动态:正分数(红色)表明一个任务的学习可以增强另一个任务的性能,而负分数(蓝色)则意味着一个任务的学习可能会妨碍另一个任务。这些发现突显了在参数高效的多模态指导调优中存在显著的任务干扰,并强调了需要有效的适应方法来确保在各种多模态任务中具有强大和多功能的性能。

4. 条件 LoRA 混合

受到 “专家混合” 概念的启发(Shazeer等,2016),我们提出了条件 LoRA 混合(MixLoRA),它利用低秩分解因子(low-rank decomposition factors)作为动态选择的专家,构建针对特定输入实例的定制分解矩阵 A 和 B。MixLoRA 促进了对不同输入实例的动态处理路径,从而增强了处理各种复杂多模态指导任务的效力。

条件LoRA混合的核心在于通过张量分解表示权重调整矩阵 ΔW:

其中 {ai, bi} 是 ΔW 的秩 r 分解因子,ai ∈ R^(d_in × 1),bi ∈ R^(d_out × 1)。

利用 ΔW 可以表示为低秩分解因子 ai 和 bi 外积之和的概念,MixLoRA 引入了一个动态因子选择(Dynamic Factor Selection)模块。该模块通过从扩展的分解因子池

中选择 r 个适当的因子,动态构建特定输入的唯一 ΔW,如图 1(b)所示。

4.1 动态因子选择

动态因子选择模块使用两个主要组件来动态构建 LoRA A 和 B。首先,两个独立因子选择(Independent Factor Selection,IFS)路由器(第 4.1.1 节)分别选择 r 个相关因子,形成适应矩阵 LoRA A 和 B,确保精确、针对实例的自适应。其次,一个条件因子选择(Conditional Factor Selection,CFS)路由器(第 4.1.2 节)通过在选择 LoRA B 时将选择 B 的因子以选择 LoRA A 的因子为条件,推动了一致的自适应过程。

4.1.1 独立因子选择

MixLoRA 采用两个独立因子选择(IFS)路由器,

分别选择 LoRA A 和 B 的 r 个相关因子,如图 3 所示。

IFS 路由器采用基于实例的路由方法,相对于基于传统输入 token 的路由,这更具内存效率,用于选择 r 个分解因子。路由策略可以表示为:

其中 Avg(·) 对前一层的隐藏状态 h ∈ R^(seq × d_in) 在序列维度上进行平均。

因子选择过程涉及计算向量 gA∈R^E 和 gB∈R^E,以选择从集合 {a_e​}^E_(e=1​) 和 {a_e​}^E_(e=1​)​ 中的特定子集,分别用于 LoRA A 和 B。为了计算 gA,输入

通过具有权重 W_A ∈ R_(E × d_in) 的稠密层(dense layer)进行处理,然后进行 softmax 归一化和 top-r 选择:

该过程确保选择 LoRA A 的 r 个因子,其中 g_A[i] = 1 表示选择因子 i。相同的过程应用于确定 LoRA B 的 gB。

4.1.2 条件因子选择

尽管到目前为止 LoRA A 和 B 的因子是独立选择的,但我们假设 LoRA A 和 B 的选择之间存在相互依赖关系,可以利用这种关系提高模型的整体适应性和性能。为了利用这种关系,我们提出了一种条件因子选择(Conditional Factor Selection,CFS)策略,其中 LoRA B 投影上权重的因子选择也受到了为 LoRA A 投影下权重选择的因子的影响。

通过 IFS 路由器,LoRA A 从选择的分解因子中组装而成,表示为 A = [a1, · · · , ar]ᵀ,其中 A ∈ ℝ^(r x d_in)。在这之后,CFS 路由器采用权重张量 W_AB ∈ ℝ^(r x d_in x E),将 A 中的每个因子 A[i] ∈ ℝ^(r x d_in) 映射到专家维度 𝔼。对于每个因子 A[i],通过 softmax 归一化并在 r 个因子上聚合的映射过程如下:

其中 W_AB[i] ∈ ℝ^(d_in x E) 是与 A[i] 相关的映射矩阵。

LoRA B 的因子选择集成了 IFS RB IFS(·) 和 CFS RB CFS(·) 路由器的输出,通过后融合(late fusion)策略形成选择向量 gB,具体如下:

最终选择向量 gB 由来自 IFS 和 CFS 路由器的概率分布 p^B_IFS 和 p^B_CFS 组合而成。这种 CFS 策略使得 LoRA B 的选择能够受到为 LoRA A 选择的因子的启发,促使一个更具连贯性的选择过程。

4.1.3 动态自适应矩阵的重建

最后,MixLoRA 通过利用因子选择向量 gA 和 gB,收集已选因子 aₖ、bₖ ∈ 𝕂,|𝕂| = r,以组装 LoRA A 和 B 的最终矩阵,从而构建动态自适应矩阵。因此,在每次前向传递中,基于这些已选择的因子动态计算权重调整矩阵 ΔW ∈ ℝᵈₒᵤₜ×ᵈᵢₙ,表示为:

5. 实验

 

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

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

相关文章

代码随想录算法训练营第二十八天补|93.复原IP地址 ● 78.子集 ● 90.子集II

组合问题:集合内元素的组合,不同集合内元素的组合 分割问题:本质还是组合问题,注意一下如何分割字符串 回溯模板伪代码 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素&#xf…

使用Python,maplotlib绘制树型有向层级结构图

使用Python,maplotlib绘制树型有向层级结构图 1. 效果图2. 源码2.1 plotTree.py绘制层级结构及不同样式2.2 plotArrow.py 支持的所有箭头样式 参考 前俩篇博客介绍了 1. 使用Python,networkx对卡勒德胡赛尼三部曲之《群山回唱》人物关系图谱绘制 2. 使用…

江科大stm32学习笔记——【5-2】对射式红外传感器计次旋转编码计次

一.对射式红外传感器计次 1.原理 2.硬件连接 3.程序 CountSensor.c: #include "stm32f10x.h" // Device header #include "Delay.h"uint16_t CountSensor_Count;void CountSensor_Init(void) {//配置RCC时钟:RCC_APB2Perip…

房贷计算器微信小程序原生语言

微信小程序: 房贷计算器 效果: 输入 300万 结果 还款明细 一共有3个页面 1、输入页面 2、结果页面 3、详情页面 1 index页面 index.wxml文件 <view class="text-black"><!--房屋总价--><view class="cu-bar bg-white solid-bottom"&…

Redis--事务机制的详解及应用

Redis事务的概念&#xff1a; Redis事务就是将一系列命令包装成一个队列&#xff0c;在执行时候按照添加的顺序依次执行&#xff0c;中间不会被打断或者干扰&#xff0c;在执行事务中&#xff0c;其他客户端提交的命令不可以插入到执行事务的队列中&#xff0c;简单来说Redis事…

Vue之监测数据的原理(对象)

大家有没有想过&#xff0c;为什么vue可以监测到数据发生改变&#xff1f;其实底层借助了Object.defineProperty&#xff0c;底层有一个Observer的构造函数 让我为大家简单的介绍一下吧&#xff01; 我用对象为大家演示一下 const vm new Vue({el: "#app",data: {ob…

Harbor 的安装及使用

Harbor 安装官网手册&#xff1a; https://goharbor.io/docs/2.10.0/install-config/download-installer/ Harbor 发布包地址&#xff1a; https://github.com/goharbor/harbor/releases 在部署harbor的前提下先安装docker 和 docker-compose 安装docker&#xff1a;https://d…

Opencv基础与学习路线

Opencv Opencv每一篇目具体&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 Opencv(5)平滑处理 具体Opencv相关demo代码欢迎访问我的github仓库&#xff08;包含python和c代码&#xff09; demo代码 文章目录 Opencv一…

<专利>机器人3D视觉快速定位抓取方法及系统

摘要&#xff0c;此专利无可用的关键技术信息&#xff0c;基本都是下面几句话反复说。。。 本发明提供了一种机器人3D快速定位抓取方法及系统&#xff0c; 包括&#xff1a; 通过高速的3D结构光成像对目标物体的表面轮廓进行扫描&#xff0c; 形成点云数据&#xff1b;对所述点…

idea 手动打 jar 包

1.在 File 中找到并点击 Project Structure 2.按图中高亮的部分依次点击 3.在 Main Class 处设置要打包的类&#xff0c;记得在 Directory for ... 处设置目录为根目录&#xff0c;设置好以后点击两次 OK 回到首页 4.在页面上方找到 Build &#xff0c;点击 Build Artifacts...…

蓝桥杯练习系统(算法训练)ALGO-993 RP大冒险

资源限制 内存限制&#xff1a;64.0MB C/C时间限制&#xff1a;200ms Java时间限制&#xff1a;600ms Python时间限制&#xff1a;1.0s 问题描述 请尽情使用各种各样的函数来测试你的RP吧~~~ 输入格式 一个数N表示测点编号。 输出格式 一个0~9的数。 样例输入 0 样…

基于React全栈Sora AI视频案例展示项目

花了一天时间基于React Next全栈开发的Sora AI 演示项目 Preview: https://sora.langchat.cn/ Github&#xff1a;https://github.com/tycoding/lang-sora 欢迎大家star、fork呀&#xff01; 这是一套完整的React & Next.js项目&#xff0c;包含前后端交互、路由、数据库…

Android14之解决编译报错:bazel: no such file or directory(一百八十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

企业微信变更主体怎么改?

企业微信变更主体有什么作用&#xff1f;做过企业运营的小伙伴都知道&#xff0c;很多时候经常会遇到现有的企业需要注销&#xff0c;切换成新的企业进行经营的情况&#xff0c;但是原来企业申请的企业微信上面却积累了很多客户&#xff0c;肯定不能直接丢弃&#xff0c;所以这…

靶机渗透之sar

Name: Sar: 1Date release: 15 Feb 2020Author: LoveSeries: Sar Download: https://drive.google.com/open?id1AFAmM21AwiAEiVFUA0cSr_GeAYaxd3lQ 对于vulnhub中的靶机&#xff0c;我们都需先下载镜像&#xff0c;然后导入VM&#xff0c;并将网络连接改为NAT模式。首先我们…

uniapp实战:父子组件对象数组传参

需求说明 1.父组件传参给子组件 1.1子组件中定义属性unitList 1.2 父组件中将data中的unitList传递给子组件 2.子组件向父组件传参 2.1子组件设置用户名文本框以及切换操作属性 2.2 子组件对应操作(文本输入以及按钮切换)添加自…

【学习笔记】深度学习实战 | LeNet

简要声明 学习相关网址 [双语字幕]吴恩达深度学习deeplearning.aiPapers With CodeDatasets 深度学习网络基于PyTorch学习架构&#xff0c;代码测试可跑。本学习笔记单纯是为了能对学到的内容有更深入的理解&#xff0c;如果有错误的地方&#xff0c;恳请包容和指正。 参考文献…

C# 获取类型 Type.GetType()

背景 C#是强类型语言&#xff0c;任何对象都有Type&#xff0c;有时候需要使用Type来进行反射、序列化、筛选等&#xff0c;获取Type有Type.GetType, typeof()&#xff0c;object.GetType() 等方法&#xff0c;本文重点介绍Type.GetType()。 系统类型/本程序集内的类型 对于系…

C++——模板详解

目录 模板 函数模板 显示实例化 类模板 模板特点 模板 模板&#xff0c;就是把一个本来只能对特定类型实现的代码&#xff0c;变成一个模板类型&#xff0c;这个模板类型能转换为任何内置类型&#xff0c;从而让程序员只需要实现一个模板&#xff0c;就能对不同的数据进行操…

2024年 前端JavaScript Web APIs 第二天 笔记

Web APIs 第二天 2.1 -事件监听以及案例 2.2 -随机点名案例 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><t…