AI模型融合:SLERP、TIES、DARE与模型汤技术
无需额外训练,组合多个微调模型以创建更优模型
AI模型融合:SLERP、TIES、DARE与模型汤技术
无需额外训练,组合多个微调模型以创建更优模型
模型合并把多个微调模型融合成一个,无需重训。基于 mergekit:linear/SLERP/TIES/DARE/task-arithmetic 等方法原理、真实 YAML 配置与适用场景。
模型融合(Model Merging)是一种在不增加推理成本的前提下,将多个预训练语言模型的能力合并到单一模型中的技术。与集成学习(Ensembling)需要同时运行多个模型不同,融合后的模型仅需一次前向传播,却能继承多个源模型的专长。arcee-ai/mergekit 是目前最主流的开源融合工具,支持从简单的加权平均到复杂的稀疏化合并等多种算法。
核心概念:任务向量(Task Vector)
理解大多数高级融合方法(TIES、DARE、Task Arithmetic)的关键在于“任务向量”。对于一个基础模型 θ_base 和在其上微调得到的模型 θ_finetuned,任务向量定义为:
τ = θ_finetuned - θ_base
这个向量捕捉了微调过程带来的参数变化方向与幅度。融合多个模型,本质上就是组合这些任务向量,再叠加回基础模型。
主流融合方法详解
#### 1. Linear(线性融合)
最简单的融合方法,直接对多个模型的对应参数进行加权平均。
θ_merged = Σ w_i * θ_i
适用场景:
注意事项:
mergekit YAML 配置示例:
yaml
merge_method: linear
models:
- model: path/to/model1
parameters:
weight: 0.5
- model: path/to/model2
parameters:
weight: 0.3
- model: path/to/model3
parameters:
weight: 0.2
dtype: bfloat16
#### 2. SLERP(球面线性插值)
SLERP 在参数空间的球面上进行插值,保持参数向量的范数,避免线性插值可能导致的“坍缩”问题。它只能用于两个模型的融合。
θ_merged = sin((1-t)*Ω)/sin(Ω) * θ_1 + sin(t*Ω)/sin(Ω) * θ_2
其中 Ω 是 θ_1 和 θ_2 之间的夹角,t 是插值系数(0 到 1)。适用场景:
注意事项:
base_model(通常为 θ_1)mergekit YAML 配置示例:
yaml
merge_method: slerp
base_model: path/to/base_model
models:
- model: path/to/model1
parameters:
t: 0.7
- model: path/to/model2
parameters:
t:
- filter: self_attn
value: 0.3
- filter: mlp
value: 0.5
- value: 0.4 # default
dtype: bfloat16
#### 3. Task Arithmetic(任务算术)
将多个任务向量线性组合后加回基础模型。
θ_merged = θ_base + Σ λ_i * τ_i
适用场景:
注意事项:
base_modelλ 通常取 0.3-0.5mergekit YAML 配置示例:
yaml
merge_method: task_arithmetic
base_model: path/to/base_model
models:
- model: path/to/math_model
parameters:
weight: 0.4
- model: path/to/code_model
parameters:
weight: 0.3
- model: path/to/chat_model
parameters:
weight: 0.3
dtype: bfloat16
#### 4. TIES(Trim, Elect Sign, and Merge)
TIES 在 Task Arithmetic 基础上增加了两个关键步骤:
适用场景:
注意事项:
density 参数控制保留比例,过低会丢失信息,过高则退化为 Task Arithmeticmergekit YAML 配置示例:
yaml
merge_method: ties
base_model: path/to/base_model
models:
- model: path/to/model1
parameters:
weight: 1.0
- model: path/to/model2
parameters:
weight: 1.0
- model: path/to/model3
parameters:
weight: 1.0
parameters:
density: 0.2 # 保留 20% 的参数
normalize: true
dtype: bfloat16
#### 5. DARE(Drop And REscale)
DARE 采用随机丢弃策略:对每个任务向量,随机丢弃大部分参数(通常 90%-99%),然后对剩余参数进行缩放以保持期望值。
τ'_i = (τ_i * mask_i) / (1 - drop_rate)
DARE 有两种变体:
dare_linear:直接对丢弃后的任务向量做线性组合dare_ties:在 DARE 丢弃后,再应用 TIES 的符号选举机制适用场景:
注意事项:
drop_rate 通常设为 0.9,过低会引入噪声,过高会丢失信息mergekit YAML 配置示例:
yaml
merge_method: dare_ties
base_model: path/to/base_model
models:
- model: path/to/model1
parameters:
weight: 1.0
- model: path/to/model2
parameters:
weight: 1.0
parameters:
density: 0.1 # 保留 10% 的参数(drop_rate=0.9)
normalize: true
dtype: bfloat16
#### 6. Passthrough(直通)
直接从一个模型中复制指定层,不进行任何融合。用于构建“弗兰肯模型”(Frankenmerging),即从不同模型中拼接层。
适用场景:
注意事项:
slices 配置配合使用mergekit YAML 配置示例:
yaml
merge_method: passthrough
slices:
- sources:
- model: path/to/model1
layer_range: [0, 16]
- sources:
- model: path/to/model2
layer_range: [16, 32]
dtype: bfloat16
实战建议
tokenizer_source: union 合并词汇表。mergekit-evolve 进行进化搜索自动寻找最优参数density 参数
- 显存不足:使用 --cuda 和 --lazy-unpickle 选项,mergekit 支持 8GB 显存运行lm-evaluation-harness 进行标准化测试,同时进行人工评估检查生成质量。FAQ
Q: 融合后的模型是否需要重新训练? A: 不需要。融合直接在权重空间操作,无需额外训练。但如果融合效果不理想,可以尝试在融合模型基础上进行少量微调。
Q: 融合两个不同大小的模型(如 7B 和 13B)是否可行? A: 不可行。mergekit 要求所有源模型具有完全相同的架构和参数维度。不同大小的模型无法直接融合。
Q: TIES 和 DARE 哪个更好? A: 没有绝对优劣。TIES 通过符号选举减少冲突,适合参数符号一致性高的场景;DARE 通过随机丢弃消除冗余,适合任务向量稀疏的场景。建议两者都尝试。
Q: 融合后的模型能否商用? A: 取决于源模型的许可证。如果所有源模型都允许商用(如 Apache 2.0),融合模型通常也可商用。但需检查每个模型的许可证条款。
Q: 如何选择融合权重? A: 可以从等权重开始,然后根据下游任务表现调整。对于 Task Arithmetic 类方法,权重通常设为 0.3-0.5;对于 Linear,权重总和必须为 1。
*最后更新:2026 年 7 月。请以各工具官方文档为准。*
相关教程
使用参数高效微调技术,将基础模型高效适配到你的领域
使用 Hugging Face TRL SFTTrainer 进行监督微调——逐步实现指南
何时以及如何针对特定领域任务微调大语言模型
追踪收集、评估数据集、A/B 测试与回归检测
系统讲解后训练中的关键方法(SFT、RLHF、OPD、PEFT),并给出评估通用能力损失的量化方法
简单链、RAG、智能体与多智能体模式及决策框架