导读:本期聚焦于高宇创作的《如何通过模型合并技术融合多个模型?Model Soup与Task Arithmetic权重平均解析》,敬请观看详情。模型合并的本质是在权重空间中寻找多个已训练模型参数的线性组合,从而在不增加推理成本的前提下融合不同能力。以Model Soup和Task Arithmetic为代表的权重平均方法,利用神经网络损失景观的平坦性与连通性,将多个微调模型或任务向量进行加减组合,实现性能提升或多任务控制。这类方法无需额外训练数据与算力,也能改善分布外泛化与多任务适应,近年来在视觉与语言模型的融合中受到关注。通过直接平均模型汤或在预训练锚点上叠加任务向量,开发者可以快速复用已有模型能力。本文将剖析两者的算法原理、适用场景与实现要点,并讨论如何避免负迁移与选择合适系数。

在大规模预训练模型普及之后,如何在低成本下复用多个已经微调好的模型成为工程与研究的焦点。模型合并尝试在参数层面直接融合不同模型,而不是通过集成推理或重新训练。其核心假设是:对于同一预训练初始化产生的多个微调模型,它们在权重空间中往往位于同一个低损失区域,通过对权重向量进行插值或算术操作,可以得到兼具多个模型能力的新参数。

如何通过模型合并技术融合多个模型?Model Soup与Task Arithmetic权重平均解析

这种做法的优势十分明显:推理阶段只运行一个模型,参数规模不变,也不引入额外延迟;同时不需要访问原始训练数据,规避了数据隐私与存储成本。接下来从模型合并的动机开始,逐步拆解Model Soup与Task Arithmetic两种代表性方法。

一、模型合并的动机与核心思想

传统的多模型融合通常依赖集成学习,例如对多个模型的输出概率取平均,或者在推理时进行投票。集成虽然稳定,但计算量与显存占用会随模型数量线性增长,不利于部署。权重平均则不同,它直接把多个模型的参数按一定规则相加或相加后归一化,得到一个单一模型。由于神经网络推理只使用一组参数,因此推理成本与单个模型完全相同。

权重平均的可行性建立在损失景观的几何特性上。许多研究表明,现代深度网络在训练后往往收敛到宽阔的平坦区域,而不是尖锐的极小值点。如果两个模型来自相同的预训练初始化,并且微调过程没有偏离太远,那么这两个参数点之间的连线路径上,损失值通常不会剧烈上升。这意味着参数插值后的模型仍然可能保持较低损失,甚至获得更好的泛化能力。

不过,模型合并并非万能。不同初始化、不同优化轨迹或差异过大的模型之间进行平均,可能会落入损失景观中的高损失区域,导致性能崩溃。因此,模型合并方法通常要求模型具备共同的初始参数,并且微调数据的分布差异处于可控范围。这也是Model Soup与Task Arithmetic等方法在设计时首先考虑的前提。

二、Model Soup:权重空间中的模型集成

Model Soup由Wortsman等人提出,最初应用于CLIP视觉模型的微调。其思路非常直观:对多个独立微调模型的权重做逐元素平均,得到一锅模型汤。根据平均方式不同,可以分为直接平均、均匀Soup与贪心Soup。直接平均即对所有模型权重求算术平均;均匀Soup则在平均前对各模型施加不同系数,最后归一化;贪心Soup从最优模型开始,不断尝试按顺序加入其他模型,只要验证集精度上升就保留新的平均结果。

与预测概率集成相比,Model Soup在推理时只加载一组参数,因此可以实现与单模型相同的速度。论文实验显示,即使微调模型使用了不同的超参数,如学习率、数据增强、随机种子等,这些模型的权重平均后往往也能取得超过单个最佳模型的准确率,同时提升分布外鲁棒性。这说明模型汤不仅是对参数的简单折中,还能借助损失景观的平坦性吸收不同训练轨迹带来的多样性。

实现Model Soup的代码并不复杂。下面给出一个最基础的均匀平均示例,假设所有模型结构完全相同:

import torch

def uniform_soup(models, weights=None):
    if weights is None:
        weights = [1.0 / len(models)] * len(models)
    state_dict = models[0].state_dict()
    for key in state_dict:
        weighted_sum = None
        for w, model in zip(weights, models):
            param = model.state_dict()[key].float()
            if weighted_sum is None:
                weighted_sum = w * param
            else:
                weighted_sum += w * param
        state_dict[key] = weighted_sum
    return state_dict

这里为了清晰省略了设备转移与参数恢复,实际使用时应将所有权重移动到同一设备,并在加载前保证键名一致。贪心Soup需要在验证集上逐次评估,代码会更长,但核心仍是逐步添加候选模型并检查指标。

三、Task Arithmetic:用任务向量编辑模型行为

Task Arithmetic源自任务向量的概念。给定一个预训练模型权重θ_pre和一个在特定任务上微调后的权重θ_ft,任务向量定义为两者的逐元素差:τ = θ_ft - θ_pre。这个向量编码了从预训练状态到该任务能力的变化方向和幅度。通过将任务向量加到另一个模型上,可以为其添加对应任务能力;减去任务向量,则可以削弱甚至删除某些行为。

例如,在图像分类中,如果想合并两个微调模型A和B,可以分别计算任务向量τ_A和τ_B,然后用θ_new = θ_pre + α·τ_A + β·τ_B生成新权重。系数α和β控制每个任务的贡献强度,通常需要根据目标验证集进行调整。这种加性组合可以在一定程度上实现多任务能力的叠加,而不需要联合训练。

下面是任务向量组合的简单代码:

import torch

def combine_task_vectors(pretrained, finetuned_dicts, scales):
    tv_list = []
    for ft in finetuned_dicts:
        tv = {k: ft[k] - pretrained[k] for k in pretrained}
        tv_list.append(tv)

    merged = {}
    for k in pretrained:
        val = pretrained[k].clone()
        for tv, s in zip(tv_list, scales):
            val = val + s * tv[k]
        merged[k] = val
    return merged

Task Arithmetic的优势在于控制粒度更细,可以通过改变系数实现从单任务到多任务之间的平滑过渡。不过该方法对任务向量质量要求较高,如果不同任务的任务向量方向冲突,直接相加可能导致负迁移。研究者提出了多种改进,例如对任务向量做剪枝,只保留幅度较大的参数变化,或对符号一致性进行筛选,以降低干扰。

四、两者对比与工程实践建议

Model Soup与Task Arithmetic虽然都属于权重平均范畴,但核心差异明显。Model Soup平均的是完整微调模型权重,更侧重于同任务下多个模型之间的稳定性与精度提升;Task Arithmetic则利用预训练模型作为锚点,对任务向量进行加减,更适合跨任务的编辑与组合。前者相当于在多个微调解之间寻找一个折中解,后者则试图把不同的能力增量线性叠加到基准模型上。

在实际工程中使用模型合并时,有几个关键点需要特别注意。首先,所有待合并模型必须共享相同的网络结构与预训练初始化,否则权重键和参数空间不匹配,直接相加没有意义。其次,微调过程应尽量温和,例如使用较小的学习率、较少的微调轮数,避免权重偏离预训练锚点过远。第三,平均或合并后应在目标验证集上进行评估,必要时搜索最优的缩放系数。对于Task Arithmetic,可以先做任务向量幅度裁剪,去掉噪声分量后再组合。

此外,模型合并并不能完全替代多任务训练或专门的模型融合技术。在任务差异较大或数据分布冲突时,直接权重平均可能会产生明显的性能下降。此时可以考虑只在部分层上进行合并,例如冻结底层、仅平均分类头或某些中间层,或者使用更复杂的合并策略,如基于Fisher信息的加权平均、子空间匹配等。总体上,将模型合并作为快速原型验证和推理部署优化手段,往往能以很低成本获得可观的收益。

模型合并权重平均Model Soup修改时间:2026-08-27 06:33:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。