30秒快速回答
模型合并(Model Merging)是一种无需重新训练即可将多个微调后的AI模型「融合」成一个新模型的技术。 它直接操作模型的权重参数,通过数学方法将不同模型的能力叠加,得到一个兼具多个模型优势的新模型。相比传统微调和模型蒸馏,它的成本几乎为零,是开源社区2025-2026年最活跃的探索方向之一。
一句话价值:用零训练成本,把「擅长写代码的模型」和「擅长写中文的模型」合并成一个「擅长写中文代码」的模型。
1. 什么是模型合并?为什么需要它?
在开源AI生态中,经常出现这样的场景:HuggingFace 上有 A 模型擅长数学推理,B 模型擅长创意写作,C 模型指令遵循度很高。你作为开发者,想要一个同时具备这三种能力的模型,传统做法是:
- 继续微调:在 A 模型上继续训练 B 的能力,但需要算力和数据,且容易「灾难性遗忘」
- 模型蒸馏:用多个教师模型训练学生模型,但流程复杂、计算成本高
模型合并给出了第三种答案:直接对权重做数学运算,把多个模型的「能力向量」叠加起来。
其核心假设来自线性模式连通性(Linear Mode Connectivity):在神经网络的损失函数空间中,两个独立微调得到的解之间存在低损失路径,对这些解的权重进行插值,往往能保留它们的能力。
| 方式 | 训练成本 | 数据需求 | 效果可控性 | 典型用时 |
|---|---|---|---|---|
| 继续微调 | 高 | 需要 | 中等 | 数小时~数天 |
| 模型蒸馏 | 中高 | 需要 | 较高 | 数小时 |
| 模型合并 | 零 | 不需要 | 视算法而定 | 数秒~数分钟 |
2. 三种主流合并算法
2.1 简单线性插值(Linear / SLERP)
最基础的做法:把两个模型的权重按比例相加。
merged_weight = α × model_A_weight + (1-α) × model_B_weight
球形线性插值(SLERP) 是升级版,它在高维球面上做平滑插值,避免简单线性插值导致的幅度衰减。适合合并同一基座模型上的两个微调变体。
# SLERP 合并伪代码
import torch
def slerp(t, v0, v1):
"""球面线性插值:在 v0 和 v1 之间按比例 t 插值"""
omega = torch.arccos(torch.clamp(
torch.dot(v0 / torch.norm(v0), v1 / torch.norm(v1)), -1, 1
))
if omega < 1e-6:
return (1 - t) * v0 + t * v1
so = torch.sin(omega)
return (torch.sin((1 - t) * omega) / so * v0
+ torch.sin(t * omega) / so * v1)
2.2 TIES-Merging(解决参数干扰)
当合并3个以上模型时,简单加权会引入大量干扰。TIES-Merging(Trim, Elect Sign, Merge)分三步解决:
- Trim(修剪):只保留每个模型中变化幅度最大的 Top-K 参数,丢弃微小变化(视为噪声)
- Elect Sign(选举符号):统计每个参数在所有模型中的变化方向(正/负),按多数投票决定最终符号
- Merge(合并):只对符号一致且显著的参数做加权平均
TIES 核心思想:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 模型 A 权重 │ │ 模型 B 权重 │ │ 模型 C 权重 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ 减基座模型 │ │
▼ ▼ ▼
任务向量 A 任务向量 B 任务向量 C
│ │ │
└──────────────────┼────────────────────┘
▼
Trim(只保留 Top-K)
▼
Elect Sign(投票决定方向)
▼
Merge(加权平均)
▼
最终合并模型
2.3 DARE(随机丢弃再合并)
DARE(Drop And REscale)的思路更激进:既然模型中大量微小的参数变化可能是冗余的,不如随机丢弃大部分任务向量中的参数,再把剩下的放大补偿。
具体步骤:对每个模型的任务向量(微调后的权重减去基座权重),以概率 p(常用 0.9,即丢弃 90%)随机置零,再将保留的参数乘以 1/(1-p) 做缩放补偿,最后对多个模型做加权合并。
DARE 非常适合合并大量模型(5个以上),它的随机丢弃起到了类似 Dropout 的正则化效果,能有效抑制合并后模型在某个任务上过拟合。
| 算法 | 适用场景 | 核心技巧 | 模型数量上限 |
|---|---|---|---|
| SLERP | 合并2个同源模型 | 球面插值 | 2 |
| TIES-Merging | 合并3-5个模型 | 修剪+选举+合并 | ~5 |
| DARE | 大规模多模型融合 | 随机丢弃+缩放补偿 | 10+ |
3. 实战:用 mergekit 合并模型
社区最成熟的合并工具是 mergekit(由 Charles Goddard 开发),被 HuggingFace 的 Open LLM Leaderboard 上大量模型使用。
# 安装
pip install mergekit
# 配置文件 merge_config.yml
models:
- model: mistralai/Mistral-7B-v0.1 # 基座模型
- model: teknium/OpenHermes-2.5-Mistral-7B # 通用对话能力
parameters:
weight: 0.5
- model: WizardLM/WizardMath-7B-V1.1 # 数学推理
parameters:
weight: 0.5
merge_method: ties
base_model: mistralai/Mistral-7B-v0.1
parameters:
normalize: true
density: 0.5 # TIES 的 Top-K 密度
weight_mask_apply: magnitude
dtype: float16
# 执行合并
mergekit-yaml merge_config.yml ./merged-model --cuda
合并完成后,就可以像普通模型一样加载使用:
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("./merged-model")
tokenizer = AutoTokenizer.from_pretrained("./merged-model")
4. 模型合并的局限与边界
尽管模型合并很强大,但它并不是「万能融合器」:
- 同架构限制:被合并的模型必须有相同的网络结构(层数、隐藏维度、注意力头数等),通常要求来自同一个基座模型
- 能力冲突:某些能力天然互斥,例如「创造力」和「事实精确性」合并后可能两者都变差
- 评估困难:合并效果缺乏统一的自动化评估标准,很多时候靠人工评测
- 天花板效应:合并不能突破各源模型的能力上限,它只是重新组合已有能力
经验法则:如果两个模型的能力是「互补」的(如编码+中文、数学+指令遵循),合并效果通常较好;如果是「互斥」的(如安全+越狱),强行合并往往有害。
总结
模型合并在2026年已经成为开源AI模型生态的「标配」技术。它让开发者可以像搭积木一样组合模型能力,无需高昂的训练成本。核心方法从简单的 SLERP 到更精细的 TIES-Merging、DARE,逐步解决了多模型合并时的参数干扰和冗余问题。
延伸阅读建议:
- mergekit 官方文档:了解更详细的配置和高级合并策略
- TIES-Merging 论文:深入理解修剪和选举的数学原理
- HuggingFace Open LLM Leaderboard:浏览排行榜上合并模型的实际表现
- diosblog 相关文章:什么是模型蒸馏? | 怎么微调 AI 模型? (内容由AI生成,仅供参考)