LLM模型融合(一)

news/2024/10/4 22:39:30

写文章
点击打开江左郎的主页
模型融合(Model Merging):合理性、常见技术及其特性
模型融合(Model Merging):合理性、常见技术及其特性
段誉
段誉​
武汉大学 网络空间安全硕士
​关注他
109 人赞同了该文章

目录
引言

开源LLM世界百花齐放,除了通用Base模型、SFT模型之外,另有一类融合模型(merged model) 常出现在各类榜单的top位置。

模型融合(model merging)指:将多个SFT模型在参数粒度上进行合并,得到一个融合模型。

Model Merging能取得近似于multi-task learning的效果,即融合模型能够同时“学会”多种任务,也可能取得更好的in-domain performance、更好的out-of-distribution generalization。

Model Merging在LLM时代也是合时宜的技术,因为它:

无需训练,节省了大量的机器成本、时间成本;
只需模型参数,而无需训练数据,规避了数据隐私问题。
这引起了笔者的兴趣:模型融合靠谱吗?有哪些常见技术?该技术的特性是什么?

本文将针对这三个问题进行讨论。

模型融合,合理吗?
Delta Parameters的冗余性
首先从SFT过程的冗余性谈起。

先引入一个概念,叫delta parameters,其值为 \theta_{SFT}-\theta_{Base} ,直观理解就是SFT前后的参数变化值。

Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch[1]提出一种对模型参数进行稀疏化的方法 -- DARE,其方法类似dropout:随机drop一定比例的delta parameters(置为0),对剩余的parameters进行rescale,即除以(1-drop_rate),以保证output的期望一致。

实验发现drop rate在90%-99%时,效果与原模型相差无几;而且模型越大,可以丢弃的delta parameters越多。

因为delta parameters是高度冗余的,因此可以在合并模型前,先丢掉大量的冗余参数,这样合并后的模型更不容易出现interference(干扰)现象,合并效果也就有了保障。形象化理解可参见下图。

Task Vector的正交性
此处的task vector等同于上节提到的delta parameters,源自Editing models with task arithmetic[2]的提法,因为这些参数是在某个task上FT后得到的,带有这个task的信息,因此称之为task vector。

Task-Arithmetic论文对多个task vector进行了相似度计算,发现它们之间的相似度极低,除了少数彼此关联的任务外,其余的task vector几乎都是正交的。

由于task vector之间的正交性,即使直接对参数进行平均,效果也还不错。

前提
就笔者阅读的论文而言,参数融合有一个必要前提:

用于融合的SFT模型必须源自同一个Base模型,即其模型结构一致、SFT的initilization一致。

其背后的原因在于:用于合并的delta parameters/task vector的数值不可过大,否则会明显影响合并效果。

DARE论文中有一个实验:当用于计算delta parameters的SFT模型(WizardCoder-Python-13B )并不源自Base模型(Llama-2-13b)时,其delta parameters值较大(> 0.005),此时仅drop 10% 的参数也会导致效果骤降。

Task-Arithmetic论文研究了 在FT时采取不同量级的learning rate对合并效果的影响。发现当learning rate较大时,合并效果明显下降。

这与DARE论文的实验异曲同工,均说明当delta parameters/task vector的数值较大时,合并效果是有影响的。

至于数值多大算大?DARE给出的数字是0.005,当大多数的delta parameter小于此值时可进行合并,否则不建议合并。

模型融合的常见技术
任务定义
输入

n个SFT Model \theta_{SFT1}、\theta_{SFT2}...\theta_{SFTn}
1个Base Model \theta_{Base}
通过相减得到每个SFT Model的delta parameter \delta_{SFT1}、\delta_{SFT2}...\delta_{SFTn}
输出

1个merged Model \theta_{Merge}
Simple Averaging
\theta_{Merge} = 1/n * \sum_{i=1}^{n}\theta_{SFTi} = \theta_{Base} + (1/n * \sum_{i=1}^{n}\delta_{SFTi})

由于前文提到的冗余性和正交性特征,这一方法在少量模型融合的场景效果也还尚可,通常作为baseline进行比较。

Fisher Averaging
简单来说,Fisher Averaging[3]就是在合并时先对每个weight进行加权。其公式如下:

\theta_{Merge} = \sum_{i=1}^{n} \hat{F}i \theta / \sum_{i=1}^{n} \hat{F}_i

其中, \hat{F}_i 为Fisher Information Matrix,用以衡量任务i中每个参数的重要性。其公式如下:

Task Arithmetic
Task Arithmetic是对 \delta_{SFT} 进行sum后,乘上scale term \lambda ,与Base Model合并后得到融合模型。其公式如下:

\theta_{Merge} = \theta_{Base} + (\lambda * \sum_{i=1}^{n}\delta_{SFTi})

\lambda 作为scale term,从验证集中挑选得来;论文实验发现, 0.3 - 0.5的值一般比较好,没有validation(或者懒)的时候,直接设置为0.3 - 0.5即可。

RegMean
RegMean方法[4]只针对linear layer的融合,其思想是:合并后的模型输出要与合并前的模型输出尽可能接近。其目标函数如下:

在linear layer的设定下,该问题直接有close-form solution:

原论文应用RegMean方法的策略如下:

对linear layer使用RegMean方法进行参数融合;
对非linear layer,使用simple averaging方法进行参数融合。
TIES-Merging
TIES[5]的核心思想是尽量减少干扰(interference),从而取得更好的模型融合效果。

作者提出有两类干扰:

冗余参数带来的干扰,这类干扰就像noise;
delta parameter的不同方向带来的干扰,例如任务1要往东走、任务2要往西走,两者相加带来抵消,使得两个任务都做不好。
TIES就是为了解决这两类干扰。其框架图如下:

其核心步骤有三:

Trim。对每个待合并模型,仅保留magnitude最大的top 20%
参数,其余参数置为0;
Elect。得到每个参数的merged sign(即方向,取值+1、-1、0),merge策略类似于max-pooling -- 计算每个方向的magnitude和,选择magnitude最大的方向作为merged sign,也可以认为这是一种“投票”机制,少数任务服从多数任务;
Disjoint Merge。对每个
参数,仅保留符合merged sign的参数,然后进行直接平均,但计算平均时并不包括值为0的参数。
经过以上步骤,得到
,然后像Task Arithmetic一样加入scale term,与Base Model参数合并,得到Merged Model:

值得一提的是,作者实验发现如果使用oracle merged sign,TIES方法的效果可以直逼Multi Task Learning方法,说明Elect阶段还有很大的提升空间。
DARE
DARE方法前文已有介绍,其本身并不直接merge,而是提供了一种对delta parameters进行稀疏化的工具,因此可以作为预处理方法,被应用到任何一个merge方法之中。

模型融合的技术特性
In-Domain Performance
融合模型既然对标Multi-Task Learning,其第一个关注点在于:

在同任务上,融合后的单一模型,和融合前的各个模型相比,表现如何?

纵观论文,可以发现以下特性:

特性1:融合模型的效果,通常比融合前的SFT模型差,更比Multi-Task Learning模型差;但随技术发展,其差距在减小,甚至偶有提升

以TIES论文结果为例,所有融合模型的效果距离第一列的FINE-TUNED(即用于融合的SFT模型)和MULTITASK(即用多个dataset,进行multi-task learning后得到的模型)仍有不小的差距。

然而DARE论文的实验表明,通过DARE + Task-Arithmetic,有可能得到效果更好的融合模型。例如融合WizardLM-13B和WizardMath-13B之后,其instruction following和math reasoning(GSM8K)能力都比单独的模型要更好。

不过需要指出的是,这一效果提升似乎并无规律可言,并且融合的模型也不多,最多才3个而已,不过这还是给模型融合这一方向注入了信心 -- 融合模型的效果有可能比单模型更好。

特性2:融合的模型越多,效果的损失也越大

融合的模型多了,各参数间互相干扰的情况愈发严重,因此带来效果损失也是情理之中的事情。从TIES论文的结果来看,当merge模型达到7个时,表现最好的TIES也只能取得原模型效果的85%;不过当merge模型只有2个时,TIES和Task-Arithmetic都能几乎保持原模型的效果。

Out-Of-Distribution Generalization
Multi-Task Learning的另一个重要特性是OOD Generalization,这也是融合模型的第二个重要关注点。

所谓OOD Generalization,指的是模型在同任务、但没见过的数据分布上的泛化性。

从TIES论文的实验来看,融合模型的OOD Generalization能力还不错,说明融合模型在一定程度上学到了鲁棒的task解决能力。

其他使用场景
模型融合还有一些使用场景:

在一次训练当中,融合多个checkpoint,以提升模型的训练效果;
将融合模型作为进一步Fine-Tuning的起点,以取得更好的FT效果;
Task Vector不仅可以用于加(即模型融合),也可以用于减(即让模型遗忘某些能力)。
总结
模型融合在参数粒度上对模型进行合并,乍一看非常不科学,但其背后有SFT参数更新的冗余性、Task Vector的正交性做支撑,具备一定的合理性,即使在目前还不算复杂的融合方法下,也已经能够取得不错的效果。

同时,本文介绍了5种Merge算法、1种预处理算法,并对模型融合的技术特性进行了归纳,希望帮助读者对模型融合产生一个比较全面、深入的认识。

笔者认为模型融合是一个很好的分析工具,它可以帮助我们理解LLM是如何“解锁”某一任务的,这对于理解并优化LLM的Task Adapation能力是有意义的。

关注笔者
欢迎关注笔者的公众号,了解更多有趣、有用的NLP/AI知识:)

参考资料
[1] Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch(DARE): https://arxiv.org/abs/2311.03099

[2] Editing models with task arithmetic: https://openreview.net/pdf?id=6t0Kwf8-jrj

[3] Merging Models with Fisher-Weighted Averaging: https://arxiv.org/abs/2111.09832

[4] Dataless Knowledge Fusion by Merging Weights of Language Models(RegMean): https://openreview.net/pdf?id=FCnohuR6AnM

[5] TIES-Merging: Resolving Interference When Merging Models: https://arxiv.org/abs/2306.01708

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

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

相关文章

30. 协程

1.协程的概念 1.1 定义 进程是操作系统内部运行的程序 线程是进程内部运行的程序 协程是线程内部运行的程序 协程是单线程下的并发,又成微线程,英文名coroutine 1.2 协程的优点协程切换的开销更小 GIL锁导致同一时刻只能运行一个线程,一个线程内不会限制协程数,单线程就可以…

.net core 安装服务

https://www.jianshu.com/p/e1b3b61f876a使用NSSM 后面的代码演示以Asp.net Core 2.1作为演示,其他.Net Core方式一致。 1、确保.Net Core程序可以正常运行 先把Asp.net Core发布,然后直接运行dotnet命令,确保程序可以运行并访问 2、使用NSSM安装dotnet 下载NSSM,使用命…

vs2015安装包丢失或损坏解决工具 或者不能启动

打开“本地组策略编辑器”(gpedit.msc)。展开“计算机配置”>“管理模板”>“系统”>“Internet 通信管理”,然后选择“Internet 通信设置”。选择“关闭自动根证书更新”>,“禁用”,然后选择“确定”或“应用”。  下载最新的组件版本(备份的) https://lea…

uboot 启动自编写程序的方式

uboot 启动自编写程序的方式 uboot 存在 boot 命令。 自己最初在尝试撰写串口程序时,选择了使用汇编来完成。 在这段时间,自己使用 go 命令来尝试载入程序 先是在 Ubuntu 上搭建 tftp 目录 # /etc/default/tftpd-hpaTFTP_USERNAME="tftp" TFTP_DIRECTORY="/ho…

20240924

[牛半仙的妹子 Tree(tree)](http://ac.robo-maker.cn/d/contest/p/ZY1044?tid=66f28cd11bca2159e88c8fb0) 我们会发现其实牛半仙发癫时就等于将以前的标记清空,从头开始,所以我们可以考虑根号分治,如果两个牛半仙发癫的时间间隔小于 \(\sqrt n\) ,那么我们可以直接暴力枚举两…

『模拟赛』冲刺CSP联训模拟2

『模拟赛记录』冲刺CSP联训模拟2Rank 不重要了A. 挤压 你说的对,期望怎么能算签呢? 一个重要的性质:一个数的平方可以在二进制下表示为 \(\sum_{i,j}\ s_i\ s_j\ 2^{i+j}\),所以就可以分别求每一位对答案的贡献了。 设 \(f_{i,1/0,1/0}\) 表示到第 \(i\) 个数我们枚举的两位…

PbootCms上传图片变模糊、上传图片尺寸受限的解决方案

在使用PbootCMS的过程中,如果上传的图片被压缩变得模糊,通常是因为上传的图片尺寸过大。PbootCMS 默认的上传图片限制宽度为 1920 像素,缩略图的限制大小为 10001000 像素。可以通过调整这些参数来解决这个问题。 解决方案打开 config.php 文件 调整 max_width 和 max_heigh…

ROS基础入门——实操教程

ROS新人可看ROS基础入门——实操教程前言 本教程实操为主,少说书。可供参考的文档中详细的记录了ROS的实操和理论,只是过于详细繁杂了,看得脑壳疼,于是做了这个笔记。Ruby Rose,放在这里相当合理前言:本文初编辑于2024年10月24日 CSDN主页:https://blog.csdn.net/rvdgds…