关于模型参数融合的思考

news2024/12/22 19:27:50

模型参数融合通常指的是在训练过程中或训练完成后将不同模型的参数以某种方式结合起来,以期望得到更好的性能。这种融合可以在不同的层面上进行,例如在神经网络的不同层之间,或者是在完全不同的模型之间。模型参数融合的目的是结合不同模型的优点,减少过拟合的风险,并提高模型的泛化能力。在实际应用中,这通常需要大量的实验来找到最佳的融合策略。

本篇文章只介绍训练完成后的不同模型的参数融合,不涉及训练过程的模型参数融合。

可行性分析

2023 年年初的时候,chatglm 刚推出 glm-130B 模型那会儿,一个令人印象深刻的论述是大模型的参数空间非常稀疏,对于大部分权重可以用 int4 进行量化来减少显存的开销,从而能够在多张消费级显卡上进行部署。当时公司的资源有限,用 3 张 RTX3090 以 int4 方式部署,推理的效果虽然相较 chatgpt 甚远,但比起 T5 也好得多,经过业务数据微调后即可投入到实际的生产业务。

去年 5 月份,LIMA(LIMA:Less Is More for Alignment) 提出了“浅层表征假说”:一个模型的知识和能力几乎完全是在预训练中学习的,而对齐则是教它在与用户交互时应该使用哪种格式的子分布。提高输入多样性和输出质量会产生可衡量的积极影响,而仅提高数量则可能不会(实际上也要训练特定领域的 LLM,或者在 SFT 阶段注入知识,仍然需要大规模的数据,模型是可以在 SFT 阶段学到知识,不过这可能不叫做对齐,这就有点玩文字游戏的嫌疑了)。

此外,去年还看到一篇博客 Can LLMs learn from a single example?,它针对 SFT 多 epoch 训练时,loss 曲线呈现阶梯状做了假设与验证,提出“记忆假说可能是真的”,现代 LLM 的学习速度非常快!当模型的训练速度非常慢时,我们可以使用各种各样的数据对它们进行长时间的训练,并进行多个 epoch 训练,而且我们可以预期,我们的模型将逐渐从我们给它的数据中提取出可概括的信息。但是,当模型的学习速度如此之快时,灾难性遗忘问题可能会突然变得明显得多。例如,如果一个模型看到了十个非常常见关系的示例,然后又看到了一个不太常见的反例,那么它很可能会记住这个反例,而不仅仅是稍微降低它对原来十个示例的记忆权重。从这个角度来说,LLM 的 SFT 非常容易过拟合,模型只是记住了答案,或者数据的难度不足以让模型有新的收获(因此,现在流行各种课程学习,以及数据子集挑选方法中会选择 loss 高的样本)。博客中的一句原文“预训练的大语言模型在接近最小损失的区域具有极其平滑的损失面,而开源社区所做的大量微调工作都是在这一区域”。

综上所述,将这三方面的观点结合:不同任务的微调或许仅仅只是修改了庞大参数空间的一隅,但这些任务数据之间高度的独立同分布,它们各自在各自的参数空间内“各司其职、互不干扰”,就像九头蛇一样,共享同一个身体,通过不同任务的微调,使其长出一个新的头(浅层表征趋向于特定领域)。

模型参数融合的优缺点

  1. 无需训练,只需要将现有的基于相同基底的模型进行融合即可,例如把基于 mistral-7b 微调的 mistral-7b-math 和 mistral-7b-instruct-v0.1 进行融合,结合指令遵循能力和数学能力。
  2. 针对单独一个领域训练“偏科”的模型要比训练通用模型要容易得多,不需要考虑数据集内部各类型数据的配比情况,也不需要考虑数据顺序和采样,训练的过程也容易得多,甚至过拟合也未尝不可。
  3. “查漏补缺”,哪里不行补哪里。

模型参数融合的缺点是不一定有用(滑稽.jpg)。

DARE

阿里提出了一种名为 DARE 的方法,用来将具备不同能力的多个模型融合成拥有全部能力的单个模型。

  • 论文地址:https://arxiv.org/abs/2311.03099
  • GitHub 仓库:https://github.com/yule-BUAA/MergeLM/tree/main
  • 相关文章:https://zhuanlan.zhihu.com/p/668152236

作者发现基于编码器或解码器的语言模型可以通过吸收同源模型的参数来获得新的能力,而无需重新训练。通常,LMs 的新能力可以通过 SFT 实现,这反映在微调后模型参数与预训练参数(即 delta 参数)之间的差距上。作者提出 DARE(Drop And REscale)方法,将大部分的 delta 参数设置为 0,这并不会影响 SFT LM 的能力,并且越大的模型的可以 drop 更多的参数。基于这一观察结果,使用 DARE 进一步稀疏多个 SFT 同源模型的 delta 参数,然后通过参数平均将它们合并为一个模型。

mergekit

现在用的比较多的是 mergekit 这个工具。mergekit 是一个用于合并预训练语言模型的工具包,支持多种合并算法。

  • GitHub 仓库:https://github.com/cg123/mergekit

它还能将多个模型融合成 MoE,例如 https://huggingface.co/mlabonne/Beyonder-4x7B-v2。这种 MoE 通常被称为 Franken MoE,即选择几个在特定任务上表现优异的微调模型,将它们组合成一个 MoE 模型。通过一定的训练,可以让路由器学会将不同类型的 token 发送给对应的专家。

在这里插入图片描述

  • 配置文件示例:
    base_model: mlabonne/Marcoro14-7B-slerp
    experts:
      - source_model: openchat/openchat-3.5-1210
        positive_prompts:
        - "chat"
        - "assistant"
        - "tell me"
        - "explain"
      - source_model: beowolx/CodeNinja-1.0-OpenChat-7B
        positive_prompts:
        - "code"
        - "python"
        - "javascript"
        - "programming"
        - "algorithm"
      - source_model: maywell/PiVoT-0.1-Starling-LM-RP
        positive_prompts:
        - "storywriting"
        - "write"
        - "scene"
        - "story"
        - "character"
      - source_model: WizardLM/WizardMath-7B-V1.1
        positive_prompts:
        - "reason"
        - "math"
        - "mathematics"
        - "solve"
        - "count"
    

融合效果

融合的效果(使用阿里提出的 DARE 方法)见下图,去年 11 月份的时候尝试调研一些“奇技”,看看能否提升闲聊模型的能力,由于受到灾难性遗忘的困扰,于是考虑尝试用模型参数融合的方式,可以看到融合后的 mistral-7b-dare-merge-v1 尽可能综合 mistral-7b-instruct-v0.1 和 mistral-7b-math 的长处。
在这里插入图片描述
后续尝试将自研模型与一些专长的开源模型进行融合,最后是超越了 GPT-3.5-Turbo-0314,评测是用 fastchat 的代码,工具是自己搭建的一套可视化网页版。由于涉及到公司的一些机密,加上现在离职了(悲),故而无法放出具体的截图,但模型参数融合的确会有效果,值得尝试。

最近有一篇名为《How Good Are Low-bit Quantized LLaMA3 Models? An Empirical Study》的论文:研究人员使用现有的 10 种训练后量化和 LoRA 微调方法,评估了 Llama3 在 1-8 bit 和各种评估数据集上的结果。他们发现:Llama3 在低比特量化下遭受了不可忽视的退化,特别是在超低位宽上

有一个评论非常有意思:

果然没有免费午餐,llama3-8b 模型用了 15t tokens,模型训练充分,冗余权重应该少很多,再执行量化难度大点。模型越大越容易量化,最朴素道理就是冗余权重过多。gptq 本质就是把其他权重量化损失补偿到另外没量化权重上,相当于一次“平权”。虽然深度学习复杂度是人类无法理解的,但是依旧要服从信息熵规律。

推测:模型训练得越充分,同模型量化一样,模型参数融合起到的作用也越低,甚至可能效果反而下降。
在这里插入图片描述
先前做过的一次实验也有同样的结论,如上图所示。当然,具体是否如此还需要更加细致的验证。由于现在手上没卡,也难以得出确切的结论,如果有读者感兴趣的话,可以在评论里说明一二,不胜感激!

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

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

相关文章

震惊,现在面试都加科技与狠货了

震惊,现在面试都加科技与狠货了 生成式AI盛行的现在,程序员找工作变容易了吗我和老痒喝着大酒,吃着他的高升宴,听他说他面试的各种细节,老狗我只恨自己动作慢了一步,不然现在在那侃侃而谈的就是我了。 面试…

【深度学习】【Lora训练2】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

文章目录 一、如何为图片打标1.1. 打标工具1.1.1. 秋叶中使用的WD1.41.1.2. 使用BLIP21.1.3. 用哪一种 二、 Lora训练数据的要求2.1 图片要求2.2 图片的打标要求 三、 Lora的其他问题qa1qa2qa3qa4qa5 四、 对图片的处理细节4.1. 图片尺寸问题4.2. 图片内容选取问题4.3. 什么是一…

深入浅出,一文搞懂向量数据库工作原理和应用

大家好,在今天这个数据复杂性日益增长和高维信息丰富的时代,传统数据库在高效处理和提取复杂数据集方面已显得捉襟见肘。向量数据库,作为一项应运而生的技术创新,成功解决了数据领域在不断扩展过程中所面临的挑战。 1.向量数据库…

常见的一些RELAXED MODEL CONCEPTS

释放一致性(release consistency, RC) RC的核心观点是:使用 FENCE 围绕所有同步操作是多余的 同步获取 (acquire) 只需要一个后续的 FENCE,同步释放 (release) 只需要一个前面的 FENCE。 对于表 5.4 的临界区示例,可以省略 FENCE F11、F14…

Vue3专栏项目 -- 一、第一个页面(下)

一、Dropdown 组件(下拉菜单组件)编码 1、基本功能:展示出下拉按钮和下拉菜单栏的样式 我们可以通过bootstrap来实现这个下拉框,需要注意它这个只是有样式,是没有行为的 然后这个下拉按钮的文字展示是根据用户名称展…

洗地机什么品牌好?洗地机怎么选?618洗地机选购指南

随着科技的飞速发展,洗地机以其高效的清洁能力、稳定的性能和用户友好的设计而闻名,不仅可以高效吸尘、拖地,还不用手动洗滚布,已经逐渐成为现代家庭不可或缺的清洁助手。然而,在众多品牌和型号中,如何选择…

Python专题:七、函数初探

代码的重用,重复的机械性功能 封装性,不用了解其组成原理 易于维护,更新 def是关键词,函数定义,add3函数名(自定义)三个数相加,a,b,c是函数的形式参数,需要注意的是,在出现三个点号之后,还需再输入一个回车,出现三个尖括号,才算函数定义完成,定义完之后就可以使…

MySQL 通过 systemd 启动时 hang 住了……

mysqld:哥,我起不来了…… 作者:贲绍华,爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编…

网工内推 | 技术支持工程师,最高15k,加班有补贴

01 星网信通 招聘岗位:售前技术支持 职责描述: 1、售前技术支持:技术交流、产品选型报价、方案制作等工作; 2、招投标支持:项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

95、动态规划-编辑距离

递归暴力解法 递归方法的基本思想是考虑最后一个字符的操作,然后根据这些操作递归处理子问题。 递归函数定义:定义一个递归函数 minDistance(i, j),表示将 word1 的前 i 个字符转换成 word2 的前 j 个字符所需的最小操作数。 递归终止条件…

命运交织的节点:分布式事务最终一致性的心跳共鸣纪实

关注微信公众号 “程序员小胖” 每日技术干货,第一时间送达! 引言 在当今云计算和微服务架构大行其道的时代,分布式系统成为了构建高可用、高性能应用的基石。然而,随着系统规模的扩张,数据的一致性问题如同幽灵般萦…

Linux字符设备驱动(一) - 框架

字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标、键盘、显示器、串口等等,当我们执行ls -l /dev的时候,就能看到大量…

C++容器之vector类

目录 1.vector的介绍及使用1.1vector的介绍1.2vector的使用1.2.1 vector的定义1.2.2 vector iterator 的使用1.2.3 vector 空间增长问题1.2.4 vector 增删查改1.2.5vector 迭代器失效问题1.2.6 vector 在OJ中的使用。 2.vector深度剖析及模拟实现2.1 std::vector的核心框架接口…

Kotlin基础知识总结(三万字超详细)

1、条件语句 (1)if条件 if条件表达式,每一个分支最后一条语句就是该分支的返回值。适用于每个分支返回值类型一致这种情况。 fun getDegree(score: Int): String{val result: String if(score 100){"非常优秀"}else if(score …

【2024全国青少年信息素养大赛初赛时间以及模拟题】

2024全国青少年信息素养大赛时间已经出来了 目录 全国青少年信息素养大赛智能算法挑战赛初中模拟卷 全国青少年信息素养大赛智能算法挑战赛初中模拟卷 1、比赛时间和考试内容: 算法创意实践挑战赛初中组于5月19日举行,检录时间为10:30-11:00&#xf…

OS复习笔记ch5-3

引言 上一节我们学习了关于信号量机制的一些内容,包括信号量的含义,对应的PV操作等。 如图所示,上一节主要是针对信号量的互斥,其实信号量机制还可以做很多事情,比如实现进程同步和前驱关系,这一节我们先复…

leetcode每日一题第七十二天

class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {if(!root) return root;if(root->val val) return root;else if(root->val > val) return searchBST(root->left,val);else return searchBST(root->right,val);} };

新能源汽车动力电池热管理方案直冷方案原理简介

前言 随着新能源汽车的快速发展,动力电池作为其核心部件之一,对于其性能和寿命具有重要影响。动力电池在工作过程中会产生大量的热量,如果不能有效地进行热管理,将会导致电池温度升高、性能下降甚至损坏。因此,热管理…

C语言【文件操作 2】

文章目录 前言顺序读写函数的介绍fputc && fgetcfputcfgetc fputs && fgetsfputsfgets fprintf && fscanffprintffscanf fwrite && freadfwritefread 文件的随机读写fseek函数偏移量ftell函数rewind函数 文件的结束判断被错误使用的feof 结语 …

哈希题目总结

以下列举了可以用哈希方法(包括但不限于用HashMap和HashSet)的题目,实质上是把东西丢给这些数据结构去维护。请注意有些题目中用哈希是最优解,有些题目中不是最优解,可以自行探索其时间复杂度和空间复杂度的区别&#…