模型合并 Merge:融合多个模型权重的生成风格

FreeGuideOnline 最新 2026-06-20

模型合并(Merge):概念与核心原理

模型合并,或称模型融合,是指将两个或更多预训练模型的权重以特定算法进行加权组合,从而创造出一个兼具多方优势的全新模型。在生成式人工智能领域,这项技术主要用于无缝混合不同的生成风格、主题倾向或能力特长,无需从头训练。最常见于 Stable Diffusion 生态(用于图像生成)和大型语言模型(用于文本生成)两个方向。无论是图像模型还是文本模型,合并的核心都可以归纳为一种权重空间插值:将代表不同“知识”或“风格”的向量按照一定比例叠加,使新模型的输出既非 A 亦非 B,而是沿着两个极点之间的连续谱生成结果。

为什么需要模型合并

  • 风格杂交:将写实摄影模型与二次元模型合并,得到“仿手办”或半写实插画风格;将不同画师风格的 LoRA 合并可以产生全新笔触。
  • 能力补全:弥补单模型在特定构图、光影或语言理解上的短板,例如将擅长构图的模型与擅长材质的模型融合。
  • 避免灾难性遗忘:对已经微调过的模型进行二次合并,可在不丢失原有知识的前提下引入新能力。
  • 降低算力门槛:相比重新训练,合并几乎不消耗 GPU 资源,几秒钟到几分钟即可生成一个混合模型。

Stable Diffusion 中的模型合并

常见合并方法

Stable Diffusion 的模型文件(checkpoint)通常包含 U-Net、text encoder(CLIP)以及 VAE 等组件的权重。合并时可以选择性地对这些组件应用不同算法。最常用的三种算法如下:

1. 加权和(Weighted Sum)

这是最直观、应用最广的合并方式。公式为:

[ \theta_{merged} = (1 - \alpha) \cdot \theta_A + \alpha \cdot \theta_B ]

其中 (\alpha \in [0, 1]) 为混合比例。当 (\alpha = 0) 时结果等同于模型 A,(\alpha = 1) 时等同于模型 B,中间值则实现线性过渡。该方法可产生高度可预测的、平滑的风格渐变,但容易造成生成细节的平均化,有时会丢失两个原始模型的个性特征。

2. 插值差异(Add Difference)

该方法基于三个模型:基础模型 A,两个变体模型 B 和 C。它首先计算两个变体之间的权重差异,再将这个差异加到基础模型上:

[ \theta_{merged} = \theta_A + \beta \cdot (\theta_B - \theta_C) ]

此处 (\beta) 是缩放因子。这种方法常用于将某个模型独有的“概念”(如某种画风)移植到另一个模型上,而不影响基础模型的结构稳定性。例如,A 为通用写实模型,B 为加入了特定艺术家风格的模型,C 为原始基础模型,则合并结果是在 A 上附加 B 相对 C 的风格增量。

3. 广度合并(Cosine / Block Merge)

这种方法按网络层混合模型,例如指定浅层使用模型 A 的权重以控制构图,深层使用模型 B 的权重以控制纹理和颜色。它通过余弦相似度自动确定融合边界,或由用户手动设置 block 权重,实现对构图、细节、色彩等不同视觉维度的精细解耦。

使用工具与操作步骤

最便捷的做法是使用 Stable Diffusion WebUI (AUTOMATIC1111) 内置的“Checkpoint Merger”选项卡:

  1. 加载模型:在 “Model A”、“Model B” 和可选的 “Model C” 下拉菜单中选择需要合并的模型文件(.ckpt 或 .safetensors)。
  2. 设置混合乘数:根据所选算法填入权重参数(Multiplier, (\alpha))。
    • 若使用“Weighted sum”,主要设置 Multiplier 值(即 (\alpha)),通常从 0.3 开始尝试,逐渐调整至 0.7。
    • 若使用“Add difference”,则在 A、B、C 中分别选择基础模型、含有目标特征的模型和参考模型。
  3. 选择插值方式:勾选对应的算法。高级用户可启用“Copy config from”以确保正确的配置文件。
  4. 执行合并:系统将计算并生成新的模型文件,可在输出目录中找到。通常合并后的模型会带有自定义命名。

直观的调整策略:先用极低的 (\alpha) 值(如 0.1)生成一张测试图,观察风格偏向哪一方,然后逐步增加至满意。

高级技巧:分层合并

SuperMerger 等扩展插件允许针对 U-Net 的 12 个输入块、1 个中间块和 12 个输出块独立设置混合比例。通用规律:

  • 输入块(IN0-IN11):主要控制构图、形状、人物姿势等全局布局。
  • 中间块(M00):影响画面内容的一致性和整体色调。
  • 输出块(OUT0-OUT11):负责纹理细节、光照和色彩微调。

通过给不同层分配不同模型的主导权重,可以在保持模型 A 构图的前提下应用模型 B 的材质,极大丰富创作自由度。

大语言模型(LLM)中的模型合并

文本生成领域近年来也涌现了大量模型合并实践,目标是将不同特化的语言模型对齐、推理、对话等能力组合。与图像模型不同,LLM 的权重矩阵往往具有高维语义结构,直接加权和可能效果不佳,因此常用更复杂的球面插值算法。

核心方法

  • 线性插值(Linear):与 SD 中的加权和相同,简单快速,但容易出现“能力混淆”,即两个模型的优点互相抵消。
  • 球面线性插值(SLERP):在高维空间中沿大圆弧插值,能保留权重向量的范数和方向属性,过渡更平滑,更不易损失原有能力。公式为:

[ \theta = \frac{\sin((1-\alpha)\omega)}{\sin(\omega)} \theta_A + \frac{\sin(\alpha\omega)}{\sin(\omega)} \theta_B ]

其中 (\omega) 是向量夹角。

  • 任务算术(Task Arithmetic):通过微调轨迹向量相加实现多任务合并,例如 TIES-Merging 会先修剪低幅值参数、解决符号冲突,再平均剩余参数。
  • DARE(Drop And REscale):先随机丢弃大部分权重变化量,再把剩余部分缩放后合并,以减少干扰。

工具:mergekit

mergekit 是目前最流行的 LLM 合并工具,支持上述各种方法,配置文件为 YAML 格式。一个简易的 SLERP 合并配置示例:

models:
  - model: model_A
  - model: model_B
merge_method: slerp
base_model: model_A
parameters:
  t:
    - filter: self_attn
      value: [0.5, 0.5]   # 注意力层各取一半
    - filter: mlp
      value: [0.3, 0.7]   # MLP 层更多采用 B 模型特征
    - value: 0.5           # 其余层等权
dtype: bfloat16