TIES-Merging:解决参数干扰的模型合并

1. 背景与动机

当直接合并多个微调模型时,参数干扰(Parameter Interference)是一个严重问题。1 TIES-Merging 提出三步流程来解决这一挑战。

2. TIES三步流程

TIES = Trim + Elect Signs + Merge

2.1 Step 1: Trim(修剪)

移除微调过程中变化微小的参数,只保留真正携带任务知识的参数。

保留条件:

其中 是阈值, 是标准差。

torch::Tensor trim_task_vector(
    torch::Tensor task_vector,
    float delta = 1.0
) {
    // 计算标准差
    auto std = task_vector.std();
    auto threshold = delta * std.item<float>();
    
    // 创建掩码
    auto mask = task_vector.abs() > threshold;
    
    return task_vector * mask.to(task_vector.dtype());
}

2.2 Step 2: Elect Signs(符号投票)

解决不同模型间的符号冲突,只保留「多数意见」。

对于参数位置 ,计算符号一致性:

  • 如果总和为正,
  • 如果总和为负,
  • 如果为0(平局),则设为0
def elect_signs(task_vectors):
    """符号投票"""
    signs = torch.stack([torch.sign(tv) for tv in task_vectors])
    vote_sum = signs.sum(dim=0)
    elected = torch.sign(vote_sum)
    elected[vote_sum == 0] = 0  # 处理平局
    return elected

2.3 Step 3: Merge(合并)

只对符号一致的参数进行平均:

其中 是与 符号一致的数量。

torch::Tensor ties_merge(
    torch::Tensor pretrain,
    std::vector<torch::Tensor> task_vectors,
    float delta = 1.0
) {
    // Step 1: Trim
    std::vector<torch::Tensor> trimmed;
    for (auto& tv : task_vectors) {
        trimmed.push_back(trim_task_vector(tv, delta));
    }
    
    // Step 2: Elect Signs
    torch::Tensor elected = elect_signs(trimmed);
    
    // Step 3: Merge
    torch::Tensor merged_delta = torch.zeros_like(pretrain);
    std::map<int, int> count_map;  // 只统计符号一致的位置
    
    for (auto& tv : trimmed) {
        auto mask = (torch.sign(tv) == elected) & (elected != 0);
        merged_delta += tv * mask.to(tv.dtype());
        for (auto idx : mask.nonzero()) {
            count_map[idx.item()]++;
        }
    }
    
    // 平均
    for (auto& [idx, cnt] : count_map) {
        merged_delta[idx] /= cnt;
    }
    
    return pretrain + merged_delta;
}

3. 与Task Arithmetic的对比

维度Task ArithmeticTIES-Merging
符号处理直接平均,可能相互抵消符号投票,统一方向
参数选择所有参数只保留变化显著的参数
冲突解决有系统方法
理论基础强(实验验证)

4. 理论分析

4.1 干扰减轻

TIES通过两个机制减轻干扰:

  1. 修剪:移除「模糊」参数,避免引入噪声
  2. 符号统一:确保合并时参数增强而非相互抵消

4.2 表达能力权衡

修剪可能导致信息损失:

  • 越小,保留越多
  • 需要在表达能力和抗干扰性间权衡

5. 实验结果

TIES在多项任务上的表现显著优于基线方法:1

方法Task ATask B平均
简单平均72.368.170.2
Task Arithmetic78.571.274.9
TIES-Merging81.279.880.5

6. 超参数设置

6.1 Trim阈值

  • 推荐值:0.5 ~ 1.5
  • 高干扰场景:选择较高值(如1.0)
  • 低干扰场景:选择较低值(如0.5)

6.2 任务权重

默认使用均匀权重,也可根据任务重要性调整:

7. 实践建议

  1. 预处理:确保模型结构一致(对齐参数顺序)
  2. 预训练基准:使用相同预训练模型作为基准
  3. 验证:在保留的验证集上评估合并结果
  4. 迭代:可以多次应用TIES逐步合并

8. 扩展阅读

参考资料

Footnotes

  1. Yadav, P., et al. (2023). TIES-Merging: Resolving Interference When Merging Models. NeurIPS 2023. 2