关于模型参数融合的思考

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

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

可行性分析

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 本质就是把其他权重量化损失补偿到另外没量化权重上,相当于一次“平权”。虽然深度学习复杂度是人类无法理解的,但是依旧要服从信息熵规律。

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

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

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

相关文章

探索智慧生活:百度Comate引领人工智能助手新潮流

文章目录 百度Comate介绍1. 什么是百度Comate?主要特点 2. Comate的核心功能智能问答功能语音识别功能语音助手功能个性化服务 使用教程(以vscode为例)1. 下载和安装Comate2. 插件配置方式1:无License用户方式2:购买License用户 3. 常用操作快…

软件设计师

软件设计师 第一章 计算机系统基础原/反/补/移码例题: 浮点数例题 海明校验码例题 CISC和RISC*流水线例题 存储系统cache*主存编址计算例题: 可靠性例题 性能指标例题 第二章 操作系统进程例题 PV操作 信号量例题 前驱图例题 死锁计算例题 段页式存储例题…

阵痛中的乳业产业,何时才能成为下一个啤酒产业?

说起饮品,近年来中国啤酒业中各大品牌齐齐聚焦高端化的趋势绝对值得一提。然而,与之相反,国内乳业却是仍未进入高端化阶段,甚至陷入了周期底部中。 图源:中国圣牧财报 增收降利 牧企承受巨大的供需缺口压力 从产业链…

设计模式(2)创造型设计模式

创建型模式 创建型模式1.工厂模式1.1 抽象工厂模式(Abstract factory)1.2 工厂方法模式(Factory Method)1.3 简单工厂模式(Simple Factory) 2. 建造者模式(Builder)3. 原型模式&…

P8799 [蓝桥杯 2022 国 B] 齿轮

P8799 [蓝桥杯 2022 国 B] 齿轮 分析 最右边的齿轮的转速是最左边齿轮的q倍 最右边的齿轮的半径是最左边齿轮的q倍 题意即为:查询数组中是否存在两个数,其中一个是另一个的q倍 题目范围:查询次数q:2*10^5,数组范围2*10^5&…

2024付费进群系统,源码及搭建变现视频课程(教程+源码)

前三节讲解搭建支付对接,后两节讲解一些引流变现的方法,还有一种变现就是帮人搭建这样的平台,因为全网都没有一套完整的视频教怎么搭建的,有也只是文字教程,一般新人根本看不懂,我视频实操演示,…

学习经验分享【36】论文投稿写作(非理工科文章)

业务进一步扩展,可辅导非理工科偏文科性质的论文辅导,有需要评职称但没有时间精力研究的或者其他相关需求的朋友可咨询了解。 人工智能技术在各领域的发展和思考,类似这种主题的文章。

压缩和归档库-LZ4介绍

1.简介 LZ4是一种快速的压缩算法,提供压缩和解压缩的速度,而牺牲了压缩率。它被设计用于快速的数据压缩和解压缩,特别是用于数据存储和传输。LZ4通常用于需要高速数据处理的场景,如数据库、日志文件处理和实时数据传输。 LZ4的特…

进一步分析并彻底解决 Flink container exit 143 问题

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…

腾讯游戏海外扩张,增持芬兰游戏开发商股份持股比例增至14.8%

易采游戏网5月8日消息,近日腾讯再次出手,大幅增持了芬兰知名游戏开发商Remedy Entertainment的股份,持股比例猛增至14.8%。这一举动引起了业界和投资者的广泛关注。 据了解,腾讯此次增持是在2024年4月24日完成的。根据芬兰法律规…

Linux网络-PXE高效批量网络装机(命令+截图详细版)

目录 一.部署PXE远程安装服务 1.PXE概述 1.1.PXE批量部署的优点 1.2.要搭建PXE网络体系的前提条件 2.搭建PXE远程安装服务器 2.1.修改相关网络配置(仅主机模式) 2.2.关闭防火墙(老规矩) 2.3.保证挂载上 2.4.准备好配置文…

<网络安全>《76 概念讲解<第十课 物联网常用协议-网络层协议>》

协议简称全称名称内容说明IPv4互联网通信协议第四版IPv4是互联网的核心IPv6互联网协议第6版TCPTransmission Control Protocol传输控制协议TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务…

【Python】什么是皮尔森系数

我不完美的梦 你陪着我想 不完美的勇气 你说更勇敢 不完美的泪 你笑着擦干 不完美的歌 你都会唱 我不完美心事 你全放在心上 这不完美的我 你总当做宝贝 你给我的爱也许不完美 但却最美 🎵 周冬雨《不完美女孩》 皮尔森相关系数(Pe…

FinalShell连接虚拟机Linux系统连接超时

报错信息 java.net.ConnectException: Connection timed out: connect 排除是网络问题后可以尝试一下这个方法。 解决方案: 打开虚拟机终端输入:ifconfig 会出现端口信息: 看ens33这里的端口是多少,改一下重新连接就ok。

springboot+vue实现登录注册,短信注册以及微信扫描登录

说明:微信扫描登录需要微信注册--要钱,感谢尚硅谷提供的免费接口;短信注册需要阿里云的注册很麻烦并且短信费,没有接口,所以不打算实现,不过能做出效果。 目录 一、建立数据库 二、后端idea实现接口 1.…

幻兽帕鲁专用服务器怎样买省钱便宜?一个月30元

在数字娱乐的浪潮中,幻兽帕鲁Palworld以其独特的魅力吸引了无数玩家的目光。想要拥有流畅、稳定的游戏体验,一台专属的游戏服务器是必不可少的。而如何以最经济的价格购买到高品质的服务器,正是玩家们最关心的问题。腾讯云服务器性价比是很高…

每日Attention学习6——Context Aggregation Module

模块出处 [link] [code] [IJCAI 22] Boundary-Guided Camouflaged Object Detection 模块名称 Context Aggregation Module (CAM) 模块作用 增大感受野,全局特征提取 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as Fcla…

Anaconda安装和深度学习环境的安装(TensorFlow、Pytorch)

换了新电脑,重新装一下anaconda这些编程环境。好久没装过了,自己也需要查查资料,然后记录一下,分享给别人。 目标,三个环境:1.anaconda基础环境(包含xgboost和lightgbm)&#xff0c…

卫星通信现状与展望三 -- 分类总结及6G应用

作者:私语茶馆 卫星通信分类总结及6G应用 一、卫星轨道类型 卫星按照轨道距离地面的距离主要分为以下几种: 卫星轨道类型 卫星用途 轨道高度 VLEO(Very Low Earth Orbit) 对地观测、通信

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面

Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面 这里写目录标题 Python中使用tkinter模块和类结构的结合使用举例——编写制作一个简单的加数GUI界面一、tkinter模块和类的简述1.1 tkinter的简要介绍1.2 类结构的简要介绍 二、基于类机构和t…