专栏名称: 计算机视觉深度学习和自动驾驶
讨论计算机视觉、深度学习和自动驾驶的技术发展和挑战
目录
相关文章推荐
FM1007福建交通广播  ·  宇树科技携两款机器人亮相2025GDC ·  昨天  
FM1007福建交通广播  ·  宇树科技携两款机器人亮相2025GDC ·  昨天  
哔哩哔哩  ·  高中生随便出手,做了个折叠手机? ·  2 天前  
哔哩哔哩  ·  马斯克刚发的地表最强AI,拉胯了吗? ·  3 天前  
哔哩哔哩  ·  B站2024第四季度及全年财报来啦! ·  3 天前  
51好读  ›  专栏  ›  计算机视觉深度学习和自动驾驶

LLM模型合并 —— 大模型也能组合吗?

计算机视觉深度学习和自动驾驶  · 公众号  ·  · 2024-05-09 01:53

正文

模型合并是一种将两个或多个大型语言模型(LLM)组合成单个模型的技术。这是一种相对较新且具有实验性质的方法,可以低成本创建新模型(无需 GPU)。模型合并在效果上出奇地好,并在 Open LLM Leaderboard上创造了许多先进的模型。

Mergekit是一个可以用来合并LLM的库。在github上可以找到:https://github.com/arcee-ai/mergekit

接下来,咱们就介绍Mergekit中的算法。

合并算法

我们将重点介绍目前在 mergekit 中实现的四种方法。请注意,还有其他方法存在,例如线性合并和任务算术合并 (Task Arithmetic)。如果您有兴趣阅读关于模型合并的论文,我推荐 Hugging Face 上的这个优秀合集[2]。

SLERP

球面线性插值 (SLERP) 是一种平滑地在两个向量之间进行插值的方法。它保持恒定的变化率并保留向量所处球面空间的几何特性。

相较于传统的线性插值,选择 SLERP 有以下几个原因:

  • 在高维空间中,线性插值会导致插值后向量幅值减小(即,它会缩小权重的量级)。
  • 此外,权重的方向变化通常代表着更有意义的信息(例如特征学习和表示),胜过单纯对幅值的改动。

SLERP 的实现步骤如下:

  • 将输入向量标准化为单位长度,确保它们代表的是方向而非幅值。
  • 使用点积计算这些向量之间的夹角。
  • 如果向量近似共线,则出于效率考虑,SLERP 会退回到使用线性插值。否则, SLERP 会基于插值因子 t(t = 0 表示 100% 取自第一个向量,t = 1 表示 100% 取自第二个向量) 和向量之间的夹角来计算缩放因子。
  • 这些缩放因子用于加权原始向量,然后将加权后的向量相加,得到最终的插值向量。

SLERP 是目前最流行的合并方法,但它一次只能组合两个模型。当然,依然可以通过层级结构组合多个模型,例如 Mistral-7B-Merge-14-v0.1 中就展示了这种方式。

TIES

TIES-Merging 方法由 Yadav 等人的 这篇论文: TIES-Merging: Resolving Interference When Merging Models [3] 提出,旨在将多个针对特定任务的模型有效地合并为单个多任务模型。它解决了模型合并中的两个主要挑战:

  • 模型参数冗余:TIES-Merging 能够识别并消除任务特定模型内的冗余参数。聚焦于模型微调期间所做的变更,识别其中变化幅度最大的前 k% 参数,并将其余参数舍弃。

  • 参数正负号冲突:当不同的模型对同一参数提出相反方向的调整建议时就会出现冲突。TIES-Merging 通过创建一个统一的正负号向量来解决这些冲突,该向量代表了所有模型中最主要的变化方向。

TIES-Merging 可分为以下三个步骤:

  • 修剪(Trim):仅保留一小部分 最重要的参数(通过密度参数控制),并将其余参数重置为零,从而减少任务特定模型中的冗余。
  • 选定正负号(Elect Sign):根据累积变化幅度中最主要的方向(正或负),创建一个统一的正负号向量,以此解决不同模型之间的正负号冲突。
  • 不重叠合并(Disjoint Merge):对与统一正负号向量保持一致的参数值进行平均,同时排除零值。

与 SLERP 不同,TIES 可以一次性合并多个模型。

DARE方法

DARE 方法由Yu( Language Models are Super Mario: Absorbing Abilities from Homologous Models as a Free Lunch [4]) 等人在2023年提出,它采用了一种与TIES相似的方法,但有两个主要区别:

  • 剪枝:DARE随机地将微调后的权重重置为它们的原始值(即基础模型的权重)。
  • 重缩放:DARE对权重进行重缩放,以保持模型输出的预期值大致不变。它使用一个缩放因子,将两个(或更多)模型经重缩放后的权重添加到基础模型的权重中。

Mergekit 库对 DARE 方法的实现提供了两种方式:包含 TIES 的正负号选定步骤(dare_ties)或不包含(dare_linear)。

你可以在 Hugging Face Hub 的 mlabonne/Daredevil-7B 上找到 DARE 模型。它也是本文中表现最好的合并模型,甚至超过了 Marcoro14-7B-slerp。

直通合并(Passthrough)

直通合并方法与之前介绍的方法有显著的不同。它通过串联不同大型语言模型(LLM)中的层来创建模型,可以生成具有独特参数量级的模型(例如,用两个 70 亿参数的模型组合出 90 亿参数的模型)。这类模型常被社区戏称为 "frankenmerges" (科学怪人合并)或 "Frankenstein models" (弗兰肯斯坦模型)。

这种技术仍处于高度实验阶段,但它已经成功构建出一些令人印象深刻的模型,例如由两个 Llama 2 70B 模型组合而成的 goliath-120b。最近发布的 SOLAR-10.7B-v1.0 也运用了同样的思路,在他们的论文( SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective Depth Up-Scaling [5])中被称为 "depth-up scaling" (深度扩展)。







请到「今天看啥」查看全文