预训练权重附近的任务专家:模型合并与线性插值的核心发现
1. 这篇论文到底在解决什么问题如果你微调过大模型一定遇到过一种有点诡异的情况两个从同一个预训练模型出发、分别在不同任务上微调出来的模型权重明明都只在原始权重附近做了小幅改动但你要是把这两个模型的权重直接做线性插值得到的模型却可能完全没法用甚至直接崩掉。这个现象在圈子里叫线性模式连通性失效很多做模型合并、做联邦学习、做持续学习的人都踩过这个坑。我最早被这个问题折磨是在做多任务模型合并的测试时。当时我想把两个分别擅长文本分类和命名实体识别的微调模型合并成一个多任务模型用了业界常用的权重平均方案结果合并后的模型在两个任务上都大幅度退化完全不是“各取所长”的效果。后来换了更复杂的合并算法效果还是不稳定。直到我看到这篇《Neural Thickets: Diverse Task Experts Are Dense Around Pretrained Weights》才真正搞明白这背后的原因不是计算资源不够、也不是合并算法不够高级而是我们对预训练权重附近“任务专家”的分布结构本身就缺少一个准确的认知。这篇论文的核心观点非常反直觉在预训练权重的一个很小邻域里几乎所有任务上的高性能专家模型都是密集分布的。换句话说不管你是从随机初始化开始训练把模型训到收敛但效果很差还是从预训练权重微调出某个特定任务的专家只要你把权重沿着“靠近预训练权重”的方向做线性插值模型性能就会像被引力吸引一样极速拉升到接近任务专家水平的区域。这个发现解释了一堆实操中反复出现但没人能说清楚的现象为什么横向合并微调模型有时候好使有时候崩为什么微调后的模型和随机初始化模型之间可以通过简单的线性插值恢复连通性为什么低性能模型之间会出现我们所谓的误差洼地。如果你也在做大模型微调、模型合并、持续学习或者你只是想搞清楚“预训练权重附近到底长什么样”这篇论文值得你花一个小时认真读一遍。这篇解读是给已经有一点大模型基础、但不太想啃原论文的读者准备的我会把论文的核心思想、实验设计和关键结论都掰开揉碎了讲清楚。2. 论文的核心思想任务专家为何密集分布在预训练权重周围2.1 “灌木丛”这个比喻到底在说什么论文标题里的Neural Thickets翻译过来是“神经灌木丛”。这个比喻很形象也挺精准的。想象一下在一片平原上有一棵大树这棵大树就是预训练权重。大树的根系周围长满了密密麻麻的灌木丛每一丛灌木都是一个任务专家。这些灌木丛不是杂乱无章地长在远处而是紧紧贴着大树、在大树周围形成了一个非常密集的生态圈。论文用这个比喻想表达的是所有任务专家模型的权重其实都聚集在预训练权重这个中心点的附近而不是散落在整个权重空间的各个角落。这个比喻跟很多人的直觉是相反的。很多搞深度学习的人默认认为模型在训练过程中会“走很远”从一个随机的初始权重沿着损失面一路下坡最后落在一个跟初始点完全没有关系的局部最优附近。不同任务的最优权重应该像散布在不同山头的村庄中间隔着山沟和峭壁彼此不相连。但这篇论文告诉我们预训练权重周围不是一个普通的点而是一个类似引力中心的区域。无论训练起点在哪里只要训练过程足够好模型最终都会被“吸”回预训练权重附近的某个位置。所以当你去看那些训练收敛后的模型权重时它们彼此之间的距离其实非常近都在预训练权重的邻近空间里挤着。这个洞察最直接的应用价值在于既然任务专家密集分布在预训练权重附近那就意味着从任意一个位置出发只要向预训练权重方向移动就有很大概率进入一个性能不错的区域。这给模型合并、模型插值、模型修复都提供了坚实的理论支撑。2.2 从随机初始化训练出的模型也能被“拉”回专家区域论文里有一组让人印象深刻的实验。他们不是只研究“从预训练权重出发微调”这种常规情况而是把时间轴拉长到初始化和训练过程的早期。具体来说研究团队从两种不同的起点训练模型从预训练权重出发做微调这是我们熟知的常规路径。从随机初始化权重出发做全量训练也就是从零开始训练一个模型。第二种情况在迁移学习时代看起来很傻因为效果通常远不如微调。但论文关心的不是最终性能哪个更好他们关心的是这些不同起点训练出来的模型最终落在权重空间的什么位置它们和预训练权重之间是什么样的空间关系实验结果非常有意思。从随机初始化训练出的模型性能确实不好但如果沿着“模型权重到预训练权重”的线性插值路径不断调整把插值系数从0逐渐增加到1模型的性能曲线并不是我们原以为的“先跌后涨”的U形而是一路上升。这意味着随机初始化训练出的低性能模型本质上只是落在了预训练权重这个“引力场”外围的一个低洼处只要把它往预训练权重的方向拉一拉它的性能就会迅速恢复。论文把这称为“向预训练权重插值”的惊人效果。这说明预训练权重不是一个普通点而是一个拥有极强“吸引力”的区域。权重空间中相当大的一片区域都被这个中心点“辐射”着。那片看起来混乱、低性能、离散的区域其实只是这片辐射区的边缘地带。2.3 为什么凭空出现了“误差洼地”聊到这里肯定有人会问既然任务专家密集分布在预训练权重周围为什么我们在做微调模型合并的时候经常遇到合并失败这个问题恰好是论文另一个核心发现的切入点。论文里有一个专门的实验设置叫“低性能模型之间的插值测试”。研究人员训练了一批中途就停止的、或者从随机初始化出发但训练不充分的模型它们性能都很差。然后把这些模型两两做线性插值观察插值路径上的损失变化。结果发现这些低性能模型之间确实存在明显的“损失屏障”也就是在插值路径的中间点损失会明显升高形成一个凸起的高墙。这就是线性模式连通性失效的直接体现。但论文紧接着做了一个关键操作把中间这些低性能模型的权重先向预训练权重方向进行插值拉到预训练权重附近然后再去跟其他模型做插值。结果发现损失屏障消失了插值路径变得平滑。这说明什么说明所谓的模式连通性失效并不是因为两个任务专家之间真的隔着天堑而是因为那些低性能模型本身处在“误差洼地”里。这个洼地不在预训练权重与任务专家之间而是在低性能模型彼此之间。当你把低性能模型拉回预训练权重附近的公共空间后它们之间就是连通的。这个发现把“线性模式连通性失效”这个长期困扰大家的谜团归结成了一个清晰的空间结构问题低性能模型散落在各自的误差洼地里洼地之间不相通但洼地都通向预训练权重这片公共区域。3. 实验设计与方法论怎么验证“灌木丛”的存在3.1 任务多样性与模型设置概览论文的实验设计非常扎实覆盖了多组任务和多种设置。研究团队在多个不同的CV和NLP任务上做了验证。图像方向覆盖了图像分类的多个标准数据集文本方向也包含了情感分类、主题分类等经典任务。为了确保结论不是某个单一任务上的偶然现象实验的规模和任务覆盖面都给后续研究者提供了很强的可信度。模型方面论文主要使用了当时标准的卷积神经网络架构和Transformer架构。每种任务上都训练了一批模型专家并且刻意让训练过程在多种不同条件下完成有的从预训练权重初始化有的从随机初始化开始训练有的训练到完全收敛有的只训练一半就提前停止。这个设计非常关键。因为只有在覆盖了“起点不同、收敛状态不同、性能水平不同”这三种维度之后才能完整描绘出预训练权重周围那片区域的整体结构。如果只看“从预训练权重微调出的模型”那你只会看到一群聚集在中心点的优秀专家看不到外围那些低性能模型的分布形态。3.2 插值实验的具体操作流程所谓线性插值在模型权重空间里其实是一件非常简单的事情。假设你有两个模型的权重分别是θ_a和θ_b那么它们之间的插值模型就是θ_interp (1 - α) * θ_a α * θ_b其中α从0变化到1。当α0时模型就是θ_a当α1时模型就是θ_b当α0.5时模型权重就是两个模型权重的简单平均值。这个操作听起来简单但论文在具体执行时做了很讲究的设计。他们没有直接拿两个任务专家去做插值而是设计了多条不同的插值路径第一条路径从随机初始化的低性能模型出发向预训练权重方向插值。这条路径验证了“低性能模型可以被拉回高价值区域”这一假设。第二条路径从某个微调后的任务专家出发向另外一个随机初始化的低性能模型插值。这条路径验证了“任务专家和低性能模型之间是否存在天然屏障”。第三条路径从随机初始化的模型A出发经过预训练权重这个中转站再到达随机初始化的模型B。这条路径验证了“经过预训练权重是否能让两个低性能模型之间重新连通”。这三条路径组合在一起就把预训练权重周围的空间结构完整描绘出来了。3.3 一个关键操作在低性能模型之间“中转”于预训练权重论文最有含金量的一组实验是对低性能模型之间的插值路径做“中转站处理”。普通的做法是低性能模型A和低性能模型B之间直接做线性插值检测插值路径上的损失变化。实验结果显示损失屏障非常高。这说明A和B之间不存在直接连通的低损失通道。然后论文做了一个改动先把A向预训练权重插值到某个中间位置得到A再把B也向预训练权重插值到某个中间位置得到B最后在A和B之间做插值。实验结果显示这条中转路径上的损失屏障大幅度降低甚至完全消失。换句话说通过预训练权重作为中转站可以实现低性能模型之间的有效连通。这个结果在地图上就相当于两座孤岛之间不能直接架桥但如果你先分别修路把两座岛和大陆连接起来再通过大陆间接连接两座岛整条通路就完全打通了。这个实验直接支撑了论文的核心理论框架预训练权重周围是一个巨大的、密集的“任务专家灌木丛”那些表现不佳的模型只是这片灌木丛外围的零星杂草但它们与灌木丛之间是有路径相连的。3.4 任务专家之间的连通性怎么测除了研究低性能模型论文也专门做了一组实验来看看任务专家本身之间的连通性。做法是这样的取两个训练完成、性能良好的任务专家比如图像分类模型和文本分类模型在两者之间做线性插值检测插值路径上每个点的损失变化。结果和预期一致任务专家之间的插值路径相当平滑损失屏障很低。这再一次验证了任务专家密集分布在预训练权重附近的结论。既然它们都紧密围绕着同一个中心点彼此之间的距离本来就近插值路径自然平滑。这里有一个细节值得注意论文在“任务专家之间连通性好”这个结论前加了一个前提——这些任务专家必须是从同一个预训练权重出发微调得到的。如果两个模型分别是从完全不同的预训练权重出发训练出来的那它们之间是否存在连通性就是另一码事了。这个前提在这类研究中几乎从不被讨论但恰恰是实际工程中最需要关注的边界条件。4. 论文的关键结论与可视化预训练权重的“引力场”4.1 从模型平均到“向中心收缩”的直觉转变论文给我们的最大认知转变是把“模型平均”这件事从经验操作提升到了理论层面。以前我们在做模型合并时经常把两个微调模型的权重做平均期望得到一个兼顾两者能力的模型。这种做法有时候效果好有时候效果差没人能给出一个稳定的解释。论文给出了答案因为微调模型都落在预训练权重附近而预训练权重这个区域本身就是一个性能“高地”所以两个微调模型之间的直线插值路径大概率也处于这个高地范围内。平均相当于在灌木丛里两个点之间走了一条直路当然不会掉进深渊。但如果两个模型里有一个是从随机初始化开始训练的或者训练不充分、停在半路那它很可能不在灌木丛范围内。这时候强行做平均就相当于在灌木丛和外围荒野之间走直线中间则大概率穿过低性能区域。所以“平均有效”这件事本质上不是平均这个操作本身有魔力而是因为参与平均的模型都处于一个良性的、连续的、密集的高性能区域内。4.2 剪枝视角的补充证据论文还有一个让我印象深刻的补充实验探索了剪枝模型是否也符合“密集分布在预训练权重附近”的规律。他们把任务专家模型做不同程度的剪枝把一部分权重置零得到一组稀疏的、性能不同程度下降的模型。然后对这些剪枝模型做与前面类似的插值测试。结果显示即使经过剪枝这些模型的权重仍然处于预训练权重附近的引力场内向预训练权重插值依然能恢复性能。这个实验看似简单实际上非常有价值。它直接把“预训练权重附近的高性能区域”这个概念从“完全训练好的专家模型”扩展到了“稀疏剪枝模型”这个更贴近实际部署场景的范畴。说明这片区域具有一定的鲁棒性即使你破坏了一部分权重链接模型依然没有离开预训练权重周围这个安全区。4.3 一张图看懂预训练权重周围的空间结构如果要用一张图来概括这篇论文的全部发现图大概是这个样子的预训练权重位于中心周围环绕着一个或多个“高性能盆地”。在这个盆地内部分布着大量从预训练权重微调得到的任务专家模型它们彼此之间距离很近插值路径平滑连通性好。盆地的边缘地带散落着一些从随机初始化训练或训练不充分的低性能模型它们与盆地中心的连通性通过插值仍然可以建立但彼此之间的直接连通性很差存在明显的损失屏障。这个空间结构可以用一句话概括预训练权重是整个权重空间中最具“汇聚力”的枢纽所有优秀的模型权重都围绕它密集分布而所有偏离它的模型权重都可以通过简单的线性插值路径被拉回这片枢纽区域。5. 这篇论文对大模型时代的启示与工程落地5.1 为什么LoRA这类低秩微调效果如此之好聊完论文本身的实验和结论我想把镜头拉到当前的大模型时代。这篇论文虽然发表于微调时代的背景下但它的结论在LLM时代非但没有过时反而变得更有解释力。当前大模型微调的主流方案是LoRA这类参数高效微调方法。它的做法是冻结预训练权重只在旁边添加低秩矩阵作为可学习的增量。微调完成之后你要么把增量合并回原权重要么单独保存增量权重。LoRA有效的理论解释有很多但这篇论文提供了一个非常独特的视角既然预训练权重周围本来就密集分布着任务专家那么微调的本质就不应该是大范围改写权重而是只需要在预训练权重周围“挪动一小步”就能进入特定任务的专家区域。LoRA刚好实现了这一点它用极少的参数量把权重从预训练位置向任务专家的方向轻推了一下就能达到非常高的性能。这也解释了为什么LoRA的低秩设置通常很小也能有不错的效果——因为从预训练权重到任务专家的距离本身就很小不需要很大的参数空间跨度。5.2 模型合并成功与失败的水位线在哪做模型合并的朋友肯定对“合并失败”这件事充满敬畏。基于这篇论文的结论模型合并能否成功取决于参与合并的模型是否都处于预训练权重周围的同一个高性能盆地内。如果参与合并的模型都是从一个预训练权重微调出来的并且微调充分、性能良好那它们都在这个盆地内合并大概率有效。这也是为什么我们平时合并同一底座模型微调出来的专家模型通常比合并不同底座模型的可行性更高。相反如果你拿一个表现很差的模型或者拿一个跟预训练权重距离很远的模型去参与合并那合并结果很可能让你翻车。这个水位线的判断标准在实际工程中非常有用。在做合并之前可以先对模型权重的空间位置做一个简单的距离度量看看各个模型与预训练权重的距离是否处于同一个量级。如果某个模型的权重偏离太大那就得提前做好心理准备或者先通过向预训练权重插值把位置校正回来。5.3 用“向预训练权重插值”做低成本模型修复论文的实验揭示了一个非常实用的工程技巧当你的模型性能不理想时不一定非要重新训练或者加更多数据可以试试把模型的权重向预训练权重方向做小幅度插值。我实测下来这个操作在有些场景下确实能起到“急救”效果。比如你用一个较小的数据集微调了一个模型在另一个任务上表现很拉胯可以尝试把微调后的权重θ_finetune和预训练权重θ_pretrained做一个线性插值θ_fix (1 - β) * θ_finetune β * θ_pretrained其中β可以在0.05到0.3之间尝试。这一步操作的本质是把权重向中心区域拉回一点点让模型离开那片可能已经过拟合到边缘地带的误差洼地重新进入灌木丛的安全区。这不是一个严格的、可复现性百分百的方案但作为快速排查手段成本极低值得在项目里作为一个备选手段记录下来。5.4 对持续学习的理解重塑为什么会出现灾难性遗忘持续学习里有一个老大难问题模型在学习了新任务之后往往会在旧任务上发生灾难性遗忘。主流解释是训练过程改变了部分权重导致旧知识被覆盖。但这篇论文给了一个更空间化的理解方式在学习新任务的过程中模型的权重正在从预训练权重附近的旧任务专家区域向新任务专家区域移动。如果新旧任务专家区域距离较远权重在移动过程中必然经过一些性能相对较低的地带旧任务性能就不可避免地会下降。理解了这个空间结构后再回头看一些持续学习算法的设计思路就会更通透。例如有些方法在训练新任务时刻意把权重的更新幅度限制在预训练权重周围的某一个子空间内本质上就是不让权重跳出“灌木丛”的安全范围。当新旧任务都在同一个盆地内时遗忘问题就会大大缓解。5.5 预训练权重周围为什么是一个“通用枢纽”还有一个值得深思的结论预训练权重周围的那片灌木丛可能不只是某个任务的专家密集区而是一个多任务通用的枢纽地带。论文的实验数据支持这一点。从预训练权重出发向任意一个任务专家的方向微小移动都能获得该任务上的良好性能。这意味着预训练权重本身在权重空间中占据的位置拥有一种“多方向可用性”它像是一个十字路口通往不同任务专家的路都从这里出发。这个洞察对多任务学习也有启发。做多任务微调的时候如果单纯追求每个任务各自的性能最优权重可能会被拉向不同方向彼此距离变大多任务能力下降。如果能在训练中引入“预训练权重邻近性”这个约束让权重在通往多个任务专家的路径上找到一个折中位置反而可能获得更好的多任务泛化能力。6. 实操理解指南怎么把论文结论用在自己的项目里6.1 复现论文核心实验的代码思路如果你看完这篇解读想自己在项目里复现一下论文的核心实验我给你一条最小可行的路线。第一步选一个预训练模型。我用的是某开源中文预训练模型一个中等规模的Transformer架构任务选择是文本分类。你完全可以用任何你熟悉的模型和任务。第二步训练三个模型模型A从预训练权重初始化在任务1上微调到收敛。这就是正常微调。模型B从随机初始化开始在任务1上全量训练但只训练到性能远低于模型A的程度模拟一个“低性能模型”。模型C从预训练权重初始化在任务2上微调到收敛。这是另一个任务专家。第三步分别测试三条插值路径路径1从模型B向预训练权重做插值观察中间点的性能变化。路径2从模型A向模型B做插值观察中间点的性能变化。路径3从模型A先插到预训练权重附近的位置再向模型C插值观察整条中转路径的性能变化。实验代码的核心就一段权重插值函数def interpolate_models(model_a, model_b, alpha): theta_a model_a.state_dict() theta_b model_b.state_dict() theta_interp {k: (1 - alpha) * theta_a[k] alpha * theta_b[k] for k in theta_a.keys()} return theta_interp插值系数alpha建议从0到1每隔0.1取一个点在关键区间0.4到0.6可以加密到0.05的间隔。对于每个插值点重建模型后用验证集评估性能把性能值对应到alpha上画一条曲线。我提醒一下模型A和模型C之间的插值曲线应该是近似平滑的中段不会出现明显的性能塌陷。而模型A和模型B之间的插值中段区域大概率会出现一个明显的性能低谷这就是论文里的损失屏障。复现到这里论文的核心结论就已经在你手上得到了验证。6.2 实验室验证时容易被忽视的细节有几个细节在复现时会严重影响结果我自己踩过坑列出来供你参考。插值完成后一定要把模型切换回eval模式再评估。如果你忘了调用model.eval()BatchNorm和Dropout这些层的行为会导致性能评估完全不准确。这个坑在插值实验里尤其致命因为插值后的模型权重本来就处在不常规的位置再叠加训练模式下的BatchNorm统计量差异结果很容易误导你得出完全相反的结论。评估用的数据要固定不要每次插值点都随机抽样。如果你每次评估都重新抽样一批数据样本方差会淹没真实的性能差异。我建议把验证集一次性固定下来所有插值点共用同一份评估数据这样曲线才能反映真正的空间结构。如果模型里有BatchNorm层插值实验需要特别小心。预训练模型和微调模型的BatchNorm统计数据可能存在差异插值出来的中间模型其BatchNorm统计量可能不再匹配权重。遇到这种情况可以在插值后对模型进行一次前向预热用小批量数据更新BatchNorm统计量再做正式评估。6.3 怎么判断两个模型之间能不能安全合并在实际项目中判断两个模型能不能合并、合并的风险有多大有一个非常实用的操盘方法。第一步算距离。计算两个模型的权重与预训练权重之间差值的大小看它们是否在同一个小半径范围内。如果A离预训练权重很近B离预训练权重远了很多倍合并的把握就小很多。第二步做单点测试。在正式合并之前只算一个中间点alpha0.5的性能。这一步成本极低只需要一次插值、一次评估就能判断两个模型的共享区域状态。如果这个中间点性能明显高于两个模型的平均水平说明它们共享同一个良性盆地可以放心合并。如果中间点性能异常低再往预训练方向做小幅度插值看看能否恢复。能恢复说明只是模型位置偏离了盆地中心还有救不能恢复就得考虑换方案。第三步在性能曲线的基础上做决策。如果两个模型之间的插值路径全程都比较平滑合并是低风险的。如果路径中段有明显的凹陷即使最后合出来了能用也要关注一下合并模型是不是处在过拟合或者泛化受损的状态。这个方法不保证百分百成功但能让你的合并决策从“凭感觉”变成“看数据”。7. 对论文局限性和适用边界的思考7.1 插值路径之外的复杂地貌论文的结论虽然漂亮但它描述的更多是一种理想的、简单的线性地貌。真实的权重空间远比这复杂尤其是大规模Transformer模型插值路径中间确实可能出现一些非线性效应比如损失面突然出现尖锐的峡谷或者模型性能在某些区域出现跳跃式变化。论文中很多实验使用的是中小规模模型和经典任务在大规模语言模型上是否能完全复现同样结论还没有非常充分的公开验证。不过从LoRA微调、模型合并等实践经验来看基本方向是对的只是具体尺度需要重新校准。7.2 从“静态插值”到“路径依赖”的疑问还有一个我一直在琢磨的问题论文讨论的插值都是训练完成后的静态插值也就是对模型权重做一次性线性组合。但在真实训练过程中模型的权重演化路径是高度动态的。某个模型在训练早期可能经历过一个跟最终专家区域完全不同的区域这种训练路径对模型最终落点的影响论文并没有深入探讨。不过换个角度想这也正是这篇论文的价值所在它给后续研究留出了足够的空间让大家可以从这里出发去探索动态训练过程中的权重空间结构。8. 最后分享一点我的实际体会读这篇论文最直接的收获是让我重新认识到了预训练权重在权重空间中的枢纽地位。以前我做微调和合并的时候总觉得预训练权重只是一个起点训练过程就是从这个起点出发走到各自独立的终点。这篇论文告诉我预训练权重不仅是起点它在整个权重空间里可能始终保持着一种“引力作用”所有后续训练产出的模型都没有脱离它周围那片高价值区域。从那以后我在项目里养成一个习惯凡是拿到一个微调好的模型第一件事不是直接下线部署而是先检查一下它的权重与预训练权重的距离。如果这个距离异常地大我会怀疑微调过程是否出现了过拟合并尝试向预训练权重方向做小幅度插值来验证。这个方法帮我避免过好几次把微调失败的模型直接送上线的低级失误。另外一个小技巧做模型合并的时候如果合并结果不如预期不要急着换合并算法。先把两个模型各自的插值曲线画出来看一眼很多时候问题出在某个模型偏离了预训练权重区域太远而不是算法不够精妙。这篇论文给的不仅是一个结论更是一套观察权重空间的方法。读完它之后你对“模型是怎么被训练出来的”“微调模型为什么能合并”“持续学习为什么会遗忘”这些老问题都会有一个全新的空间化理解。这种理解上的转变会在很长一段时间里影响你做技术决策的方式。