首页 >>  正文

kmeans可人为指定初始位置

来源:baiyundou.net   日期:2024-09-21

港科大&南科大&华为诺亚方舟实验室

量子位 | 公众号 QbitAI

微调,能让通用大模型更加适配具体的行业应用。

但现在,研究人员们却发现:

对多模态大模型做“多任务指令微调”,大模型可能会“学得多错得多”,因为不同任务之间的冲突,导致泛化能力下降。

△多模态指令微调存在任务冲突

举个例子,多模态问答任务可能要求回复尽可能简洁准确,文档理解任务却会反过来要求大模型尽可能详细地做出描述。

不同下游任务指令微调数据分布差异较大,导致一个大模型难以在多个下游任务中均达到最优性能。

如何解决这个问题?

来自香港科技大学、南方科技大学和华为诺亚方舟实验室的联合研究团队,受MoE(混合专家模型)开源大模型Mixtral-8×7B的启发,提出利用稀疏专家模型,打造下游任务泛化性能更好、理解能力更强的多模态大模型。

具体细节,一起来看。

多模态指令微调存在任务冲突

为了验证多模态指令微调中不同类型任务数据对模型性能的影响,研究人员将数据进行如下划分:

  • VQA(视觉问答):VQAv2、OKVQA、A-OKVQA、OCRVQA,
  • Captioning(图像描述):COCO Caption、Web CapFilt、TextCaps,
  • Full(所有数据):VQA、Captioning、LLaVA-150k、VQG(视觉问题生成,基于VQA数据)。

基于以上数据,研究人员采用LoRA对InstructBLIP进行微调,获得3个专家模型,并在其他数据(Flickr30k-图像描述、GQA/SciQA/IconQA/TextVQA等不同类型视觉问答、HM/VSR等多模态分类或推理任务)上进行零样本测试和评估。

从上图(右)中可以看出,在指令微调中,并非采用全量数据会取得最好效果,相反,只有三个下游任务(GQA,VSR,TextVQA)在全量数据专家下表现最好。

这说明,对于大部分任务来说,在指令微调过程中引入其他任务的数据,反而会降低模型性能,多模态指令微调存在任务冲突

另一方面,实验中观察到,VQA和Captioning两个专家模型,在各自任务中取得了相较于全量专家更好的表现。这样的方法看似解决了任务冲突的问题,但存在以下局限:

  1. 不同训练任务的知识无法在任务专家之间共享;
  2. 训练的数据需要人为地划分,当训练数据种类较多时难以进行;
  3. 新任务来临时,需要人为判断使用哪一个任务专家。

为了解决以上局限,研究团队提出,可以利用稀疏专家模型(MoE),不同的专家处理不同的任务,并设计一种数据划分的方法,把相似的任务交给同一个专家处理。

基于指令聚类的稀疏专家多模态大模型

通过指令聚类划分数据

在大型视觉-语言模型(LVLM)中,该文定义指令为所有的文本输入,如上图(左)C1-C4的文本。

这些指令描述了任务的意图、要求。因此,作者使用Kmeans将所有的指令聚为64类。

如上图(右)所示,指令的聚类信息可以有效表示数据的任务类型。这样做省去了人力划分数据的成本

基于指令聚类信息进行混合LoRA专家路由

和前面的任务专家相似,模型在该层的输出同样由冻结的LLM线性层以及微调的LoRA产生。

不同的是,这里利用数据的指令聚类信息来对混合LoRA进行路由。具体而言,对于的模型的输入,可以按照如下方式计算它的路由信息:

其中,topk()(考虑k=1的情况)保持前k个最大项不变,并将其他的设置为0,C是可学习的类别的嵌入表征,C[xi]表示xi对应指令的聚类表征,Wgate是路由的线性参数。

通用专家提升模型泛化性

实验发现,上述的指令聚类LoRA专家的确缓解了任务冲突的问题,但由于一个专家可能只见过一部分任务,整个模型对下游任务的泛化性降低了。

因此,该研究团队提出用通用专家来从所有数据中学习指令泛化能力。

与MoE不同,除了通过top1选择的任务专家,该方法还固定地激活一个通用专家,使得这个专家从所有的指令数据中学习。

因此,模型在该层输出为LLM原始冻结参数W,任务专家We和通用专家Wu的加权和。

在这样的设计下,任务专家和通用专家的协同既提升了模型在和训练集相似任务的表现,又保障了模型对新任务的泛化能力。

实验效果

该论文遵循InstructBLIP的实验场景(数据使用、评估标准、训练细节),在13个训练数据集(包括VQA、Captioning、VQG等)上进行指令微调并在11个测试数据集上评估(训练数据集和测试数据集没有重叠)。

由上表所示,引入该文章提出的方法(MoCLE)后,InstructBLIP相较于基线模型在所有下游任务上都有提升,其中,在VSR,IconQA,TextVQA和MSVD-QA的提升尤为明显。

上图可视化了LLM某一层混合LoRA专家在不同数据下的路由结果,虚线上下方分别是训练和测试数据。(a)和(b)分别显示了使用指令聚类信息和指令token平均表征作为路由的结果。

可以看到,使用指令聚类信息路由时,数据在专家中出现了分化。例如专家0主要负责VQA相关任务,专家2主要负责Captioning相关任务,有效实现专家的差异化。另一方面,使用指令token平均表征作为条件时,不同任务对专家的激活是相似的,没有出现分化。

研究团队认为,稀疏专家多模态大模型+通用专家模块的组合,缓解了任务之间的冲突,还保证了稀疏模型对任务的泛化能力,使得多模态大模型能够更有效地适配不同的下游行业应用。

这是首个在多模态大模型指令微调中结合LoRA和稀疏专家模型(MoE)来缓解任务冲突并保持模型泛化能力的工作。

该工作证实了其应对复杂下游任务的有效性,并未多模态大模型的应用和发展开辟了新途径。

论文链接:

https://arxiv.org/abs/2312.12379

— 完 —

量子位 QbitAI · 头条号签约

","gnid":"999452d3d80aa0e81","img_data":[{"flag":2,"img":[{"desc":"","height":1056,"title":"","url":"https://p0.ssl.img.360kuai.com/t01a1c324a19a9cd4dd.jpg","width":1220},{"desc":"","height":"206","title":"","url":"https://p0.ssl.img.360kuai.com/t019b719adb07f8a5bd.jpg","width":"902"},{"desc":"","height":"515","title":"","url":"https://p0.ssl.img.360kuai.com/t01e9a34bbd5cc06b2a.jpg","width":"1080"},{"desc":"","height":"370","title":"","url":"https://p0.ssl.img.360kuai.com/t01566af656dd4d7147.jpg","width":"1080"},{"desc":"","height":"700","title":"","url":"https://p0.ssl.img.360kuai.com/t0146ceb99b12b8ec8c.jpg","width":"1148"},{"desc":"","height":"764","title":"","url":"https://p0.ssl.img.360kuai.com/t0149c788a919d6d7ba.jpg","width":"1120"},{"desc":"","height":"80","title":"","url":"https://p0.ssl.img.360kuai.com/t0128522a1876311e1a.jpg","width":"442"},{"desc":"","height":"392","title":"","url":"https://p0.ssl.img.360kuai.com/t0106c867264ea3216d.jpg","width":"902"},{"desc":"","height":"558","title":"","url":"https://p0.ssl.img.360kuai.com/t0180d0c08321831d64.jpg","width":"846"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"pika","pub_time":1703934780000,"pure":"","rawurl":"http://zm.news.so.com/c1bf4633aea0c412bb56f9947ffc2027","redirect":0,"rptid":"7440ef21b5d6d0ee","rss_ext":[],"s":"t","src":"量子位","tag":[],"title":"多模态大模型学杂了能力反下降?新研究:MoE+通用专家解决冲突

农烟晓3008关于MATLAB的kmeans聚类函数,为什么对于同一个矩阵作多次kmeans聚类,得到的输出不同?虽然分类是一致
阮虎卸19598074239 ______ 因为K-mean的初始化是需要随机的,要随机的确定K个点作为初始点.

农烟晓3008matlab 中kmeans聚类完了以后 怎么存储每一类? -
阮虎卸19598074239 ______ IDX = kmeans(X,k) , 这个IDX就是X中每一个点所属的分类.例如, IDX = [2;1;3], 则X的第一个点在第2类里,第二个点在第1类,第三个点在第3类. 如果要存储,则用 CLASS1 = X(IDX==1); CLASS2 = X(IDX ==2);...

农烟晓3008如何调用matlab中自带的k - means算法 -
阮虎卸19598074239 ______ function [ labels ] = kmeans_clustering( data, k ) [num,~]=size(data); ind = randperm(num); ind = ind(1:k); centers = data(ind,:); d=inf; labels = nan(num,1); while d>0 labels0 = labels; dist = pdist2(data, centers); [~,labels]

农烟晓3008matlab中kmeans算法程序如下 我要做图像分类 主程序改怎么写那?知道的写下 谢谢了 -
阮虎卸19598074239 ______ function [mu,mask]=kmeans(ima,k)%k为指定类别数%kmeans imag...

农烟晓3008用MATLAB 实现k - means算法数据 data随机产生100个数. 分成两类,即k=2.代码 -
阮虎卸19598074239 ______ %随机获取100个点 X =[randn(100,2)+ones(100,2);randn(100,2)+[ones(100,1),-ones(100,1)]]; opts =statset('Display','final');%调用Kmeans函数%X N*P的数据矩阵%Idx N*1的向量,存储的是每个点的聚类标号%Ctrs K*P的矩阵,存储的是K个聚...

农烟晓3008python有没有内置kmeans函数 -
阮虎卸19598074239 ______ 1、从Kmeans说起Kmeans是一个非常基础的聚类算法,使用了迭代的思想,关于其原理这里不说了.下面说一下如何在matlab中使用kmeans算法.创建7个二维的数据点:复制代码 代码如下:x=[randn...

农烟晓3008matlab的kmeans算法的问题 -
阮虎卸19598074239 ______ 没有问题!I = imread(('1.bmp));[nrows,ncols]=size(I);I2 = double(I);II = I2(:);[idx, ctx]=kmeans(II,4);iidx = reshape(idx,nrows,ncols);imshow(I)figure,imshow(iidx,[]);

农烟晓3008r语言中kmeans聚类结果,怎么评估其准确性 -
阮虎卸19598074239 ______ [idx,c,sumd] = kmeans(x,k) 其中x是只含数字部分的矩阵.k是要聚集的类数.

农烟晓3008急求:k - Means聚类算法实现
阮虎卸19598074239 ______ K-MEANS算法:k-means算法接受输入量k;然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小.聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024