
前两天有个做后端的朋友突然问我训练五个模型再平均这套路现在还灵不灵。我没法用一句话回答因为这个问题背后其实是模型集成从2015到2025这十年的完整演进。十年前模型集成还是竞赛社区里靠堆模型硬刷分的土办法十年后的今天它换了一副面孔藏在稀疏路由的专家组合、参数空间的权重合并、以及大模型微调时的低秩分支里。它没有过时反而更深入了系统的每一层。这篇文章想把这十年的演进脉络一次性理清楚传统集成为什么有效、竞赛时代具体怎么用深度学习时代出现了哪些变体大模型时代又变成什么样最后给出一套可以迁移到实际项目的选型思路。无论你是还在调梯度提升树的老手还是现在只跟大模型打交道的同学应该都能在里面找到自己熟悉的位置。1. 十年脉络模型集成从“堆模型”到“叠参数”1.1 为什么“多模型一起判断”始终有效模型集成能一直存在于机器学习里底层逻辑无非是三个字多样性。单个模型哪怕再强也一定有自己的盲区比如训练时没见过的那部分数据分布或者某种特征组合下的系统性偏差。几个人独立判断同一件事通常比一个人单独判断更稳这和一个团队做决策是同一个道理——每个成员看到的侧面不同综合起来盲区就少了。从统计学习的角度看这个直觉落在偏差-方差分解上。均值化多个有差异的预测通常能显著降低方差对偏差也有一定缓解。传统上把集成分为两大思路一类是“并行独立”像投票委员会大家各干各的最后汇总一类是“串行纠错”像接力赛每个选手重点解决前面留下的问题。这两种思路一直延续到今天只不过载体从决策树换成了神经网络和参数矩阵。1.2 十年走过的三条演进主线如果要给这十年画几条主线我会这么总结。第一条是从“样本空间”到“参数空间”。早期集成靠的是数据抽样、特征抽样或者算法不同来制造多样性到了深度学习阶段多样性可能来自不同的初始化、不同的数据顺序、甚至不同的网络层保留方式而大模型时代多样性可以直接落在低秩矩阵和权重增量上不同任务的专家分支可以按比例合并模型本身的参数变成可以直接加减的“向量”。第二条是从“显式”走向“隐式”。传统Stacking会让几十个模型的预测文件摆在那里一眼看得见后来的快照集成、随机权重平均已经把集成藏进一次训练过程和一组检查点里再到如今的主流大模型架构多个专家子网和路由机制焊在一个网络里从外部看只是一个模型内部却在做条件化的专家组合。第三条是从“决策层的投票”走向“结构层的融合”。早期我们融合的是模型输出的概率或分数后来开始平均权重、合并参数增量再往后一个调度器根据输入现场决定调用哪个专家、哪个分支这种“路由组合”已经是系统层面的集成。三条主线叠加在一起正好解释为什么不同时代的人聊“集成”时说的完全不是同一件事。1.3 竞赛场景与业务场景的长期分岔这十年里有一个很有意思的分岔。竞赛社区追求的是极致精度不限制算力和复杂度所以集成越堆越猛交叉验证、多层Stacking、上百个模型做加权平均都是常规操作。业务系统完全相反线上有延迟约束和成本预算模型还得能解释、能维护、能快速迭代。这两种目标在很长一段时间里互相碰撞最后逼出了“训练时集成、部署时压缩”的折中方案。这也是为什么你会看到同一个工程师在离线实验里搞了一堆模型融合线上却只跑一个模型——因为线上跑不了或者根本不划算。理解了这个分岔后面看每个阶段的集成形态就不会觉得混乱了。2. 2015—2019竞赛驱动的“大力出奇迹”时代2.1 朴素但有效的起点装袋与随机森林2015年前后表格数据建模正处于黄金期。在神经网络还不是万能答案的年代随机森林是很多项目里第一个拿出来的强基线。它的核心是装袋思想的延伸从训练集里做有放回抽样得到很多份不同的子集每份子集训练一棵树最后让所有树投票。为了进一步降低树之间的相关性每棵树在每次分裂时还只随机考察一部分特征。这两个“随机”让每棵树都带着不同的偏差但投票后整体方差大幅下降而且不容易过拟合。我到今天都记得当时做项目的一个习惯先训练一棵决策树看哪些特征重要再上随机森林对比袋外误差基本能判断数据里的信号到底够不够。随机森林不仅能给出特征重要性还容忍缺失值调试空间比后来的很多方法都大是那个阶段性价比最高的起点之一。2.2 Boosting序列化纠错的统治力如果说随机森林是“并行投票”Boosting就是“串行纠错”。它的思路是让新加入的弱模型重点学习前面所有模型做错的样本不断把注意力引向难例。老一代的AdaBoost通过调整样本权重来实现这一点后来的梯度提升树则把这个过程推广为“每一轮去拟合前面模型的负梯度”变成一个非常通用的框架。梯度提升树之所以在表格数据上长期称霸是因为它对特征交互的建模能力天然很强又能处理混合类型特征和不完整数据。当时的主流开源实现已经非常成熟训练快、调参自由、还能输出非常有用的特征重要性。很多团队的默认做法就是“先用梯度提升树作为基线然后才是各种集成”。这个习惯一直延续到今天在中小规模结构化数据上它依然是最难被战胜的选手之一。2.3 Stacking与多模型融合的竞赛方法论到了竞赛后期单纯一个梯度提升树已经不够用了。那时大家发现不同算法——比如线性模型、核方法、树模型、浅层神经网络——在同一份数据上会看到不同的模式。把这些预测结果放到一起做二次学习就是Stacking套路。具体做法我展开说一下。第一步把所有训练数据分成K折每个基模型在K-1折上训练对剩下的一折做预测循环K次得到一条“袋外预测”序列叫OOF预测。第二步所有基模型的OOF预测拼成一张新特征表用这张表训练一个元学习器比如逻辑回归或者简单线性模型。第三步对新样本每个基模型各自预测把预测结果喂给元学习器得到最终输出。这里最关键的点是K折循环这一步。如果不做K折直接用全量训练集的预测去训练元模型表格结果会非常漂亮但真实效果一塌糊涂——因为那叫数据泄漏。当时翻车的案例特别多很多新人栽在“预测也要交叉验证”这一条上。2.4 这个阶段沉淀下来的方法论和后来被诟病的点前面几年把所有基础打法都磨炼了一遍沉淀出几条到今天仍然有用的经验融合前先看模型之间的相关性矩阵相关性越低融合增益越大OOF指标比验证集指标更接近真实线上效果简单加权平均在很多情况下已经足够好复杂的元模型未必带来收益反而增加过拟合风险。被诟病的点也很多。为了排行榜好看堆几十个模型然后做带权平均工程上完全不可维护计算资源消耗巨大小团队根本复现不了而且当模型数量多到一定程度收益曲线会明显变平边际效果趋近于零。批评的声音促使后来出现了更精巧的方法能不能用更少的成本拿到差不多的集成收益这正是深度学习阶段要回答的问题。3. 2020—2023深度学习时代的集成形态重塑3.1 从“多个完整模型”到“单模型内的多样决策”进入深度学习时代训练一个完整模型的成本比训练一棵树高好几个数量级训练五个完整神经网络再融合对很多团队来说是负担。但集成的价值又确实存在于是形态开始改变。一种做法是在一个模型内部制造多样性。比如让多个任务分支共享同一个特征提取主干每个分支只看部分类别或部分模态或者在同一份输入上模型天然带有随机性多次前向推理后平均结果也就是测试时增强。测试时增强本质上就是一个“推理时的轻量集成”不需要额外训练只在预测阶段做多次前向并平均对于图像分类、语义分割这类任务经常能带来稳定提升。3.2 快照集成与随机权重平均一次训练换取集合真正让我觉得“集成可以很便宜”的是快照集成和随机权重平均这两类方法。快照集成的思路很直白训练时让学习率周期性上升再下降模型会在损失曲面里跳出当前局部区域再落入另一个局部极小值。把每次落入极小值附近的检查点保存下来一个训练周期就能得到好几个“不同模型”。预测时对这些快照的平均结果做集成相当于用一次训练成本换到了多个模型。随机权重平均更进一步。它不保存多个快照而是直接对训练轨迹上不同阶段的权重做平均最后只留下一个模型。这样做的好处是推理成本完全没有增加而且很多任务上效果甚至比单模型更好。原因可以这样理解神经网络的损失曲面在高维空间里通常存在大片的平坦区域平坦区域里的不同权重点在表现上往往都不差把这些权重直接平均相当于在这些“表现相近但视角略有不同”的点上取一个中心这个中心往往更鲁棒。我个人的经验是如果推理资源允许先试快照集成如果线上只能跑一个模型就试随机权重平均。两者都比硬训练好几个完整模型要划算得多。3.3 知识蒸馏把集成“压缩”回单模型知识蒸馏是另一个方向的思路。用训练好的大模型当教师去教一个小模型当学生教的内容不只是正确答案还包括教师输出概率里的“类间相似性结构”。比如一张猫的图片教师可能给出猫0.8、狗0.1、老虎0.05这种分布比硬标签“猫1”包含更多信息。学生模型学会了这种软标签往往能得到比直接训练更高的精度。放在集成语境里知识蒸馏的价值在于“把集合压缩成单模型”。教师可以不是一个模型而是一堆模型的集成集成输出的软概率当成超级教师。训练完成后学生模型一个人上战场推理成本还是原来单模型那么多却带上了整个集成的知识。这是一种很聪明的折中训练时享受集成的精度部署时享受单模型的速度。3.4 深度学习集成落地的收益与成本权衡落到实际业务里这阶段的集成决策不再是“要不要堆模型”而是“把集成的收益沉淀在哪一层”。我见过不少团队的做法是离线阶段训三到五个同结构不同初始化的模型做一个简单平均得到最好的离线指标但线上部署时并不会跑全部模型而是通过随机权重平均或快照取中把多个检查点压成一个或者用知识蒸馏重新训练一个轻量学生。这背后的本质是收益曲线的问题。集成带来的精度提升通常是边际递减的头三个有差异的模型可能带来明显收益从第五个开始就基本是噪声了。而推理成本却是线性上涨的。如果能在“两到三个有差异的模型”这个范围内完成集成再用参数或蒸馏的方式压缩成本收益比通常是最优的。这个经验我到现在都在用。4. 2024—2025大模型时代的新集成范式4.1 稀疏专家混合把“专家组合”焊进一个大模型大模型时代最典型的隐式集成是稀疏专家混合架构。它把一个大模型内部组织成多个专家子网络输入进来之后由一个路由网络决定激活哪几个专家而不是让所有参数都参与计算。从外部看你部署的是一个模型从内部看不同样本走的是不同的专家路径这已经是一种条件化的动态集成。我理解的类比是这样传统集成像开大会所有专家都必须到场发言哪怕话题跟他不相关稀疏路由像医院分诊先根据症状把病人分到对应的科室只有少数相关医生参与诊断。这样做不仅节省计算量还能在模型总参数很大的情况下把每个样本的实际计算开销控制在可接受范围。这也解释了为什么很多大模型可以做得很大却依然能跑出可以接受的推理延迟。需要注意稀疏路由和经典集成的训练方式完全不同。它是端到端联合训练的路由和专家一起优化而不是事后把一堆独立模型拼起来。这种“联合训练条件激活”的形式让集成的粒度从独立模型缩到了模块级是大模型时代最重要的范式变化之一。4.2 低秩分支多任务专家的低成本集成大模型微调成本高全参微调几乎不可能对每个任务都来一次。于是低秩适配成了主流做法冻结基座模型的大部分参数只训练极少量低秩增量参数这些增量参数就像一个轻量分支。多个任务各训一个这样的分支推理时根据需求切换或者合并。这自然引出了一个有用的集成视角基座模型是共享底座每个低秩分支扮演一个领域专家。中文、代码、数学、客服各自一个分支需要哪项能力就跑哪个分支甚至可以把多个分支按比例合并得到“既要又要”的混合模型。分支之间存在差异又不共享训练过程组合在一起就构成了一个参数级的模型集成。这种做法的好处是边际成本极低。训练一百个任务分支每个分支只占基座很小一部分参数存储和切换代价都可控。我在实际项目里见过不少团队用这个模式做多领域助手效果比反复微调一个全能模型要稳定因为每个专家专注于自己的领域不会互相干扰。4.3 参数空间的模型合并从决策融合到权重融合大模型时代另一个让我觉得形态完全变了的是“模型合并”。把一个模型微调前后的权重差看成“任务向量”这个向量指向的任务技能方向是可以做加减法的。想同时获得两个任务的能力就把这两个任务向量按比例加到基座上合成一个新的模型。这个过程根本没有走“多个模型投票”的路线直接是在权重空间里做融合。模型合并和决策融合的本质区别在于决策融合保留多个模型每次推理都要算多份合并则是把多个模型“焊”成一个推理时依旧是一个模型开销和原来一样。听起来很诱人但也有很多坑。权重空间不是线性世界两个任务向量直接相加可能互相覆盖也可能整体崩溃。解决办法一般是给每个向量加一个缩放系数或者用更复杂的加权方式把互相干扰的任务分开处理。我的看法是这类方法很适合“同源微调”的场景同一个基座同样规模的低秩增量方向各异但结构一致合并的成功率最高。如果两个模型基础架构差异很大连权重对齐都做不到那还是老老实实回到决策融合。4.4 动态组合从固定集成到自适应路由这十年集成还有一个非常明显的方向从“固定不变”走向“动态自适应”。过去做集成权重是在验证集上调好的上线后所有样本用同一套融合公式。大模型时代不一样了一个系统往往要应对多种类型、多个领域的请求与其让一个模型硬扛所有输入不如先判断输入属于哪类再调用最合适的专家或分支。这就是所谓评测/路由驱动的组合。轻量一点的实现是规则或分类器路由重一点的实现是模型自身在推理时用路由决定专家路径。甚至检索增强生成也可以理解成一种集成——每来一个问题先从外部知识库里找出一批相关资料让生成模型把模型内在知识和检索到的资料综合起来再回答。这不也是“两路信息互补、综合判断”的集成思想吗从2025年回头看集成已经不是一个单独的模型层操作而是嵌入到路由、检索、参数合并等方方面面。它的颗粒度越来越细但底层逻辑还是那两条让不同视角的信息相互补充用组合去对冲单一判断的盲区。5. 实操参考构建一个跨越代际的集成流程5.1 第一步先有一个足够强的单模型这条我在任何场合都会先说不要一上来就想集成。如果单模型的准确率还没到能用集成只是把多个不够好的模型绑在一起收益非常有限。正确的顺序是先把数据清洗、特征工程、评估流程做到位让单模型达到一个稳定的基线再去看集成能不能带来额外提升。举个我常用的判断标准如果单模型的验证集指标和OOF指标都稳了接下来先做一次最简单的平均比如两到三个模型的预测平均看增益是多少。如果增益连0.1个百分点都不到说明这些模型之间的多样性不够或者数据里的信号已经快被榨干了这时候堆更多模型没有意义。5.2 第二步根据场景选集成粒度不同场景适合的集成方式差别很大我按自己的经验整理了一个选型表场景类型推荐集成方式成本特点典型收益来源表格数据离线高精度优先多模型加权平均 / Stacking训练成本中等推理成本随模型数线性上升模型差异度带来的方差下降表格数据在线低延迟单模型梯度提升 轻量融合成本低减少过拟合、稳定线上波动图像/多模态资源中等多折交叉验证 权重平均或快照集成一次训练换多个模型训练随机性带来的隐含多样性大模型微调多任务低秩分支切换 / 分支合并存储成本低训练成本低各任务专注度更高互不干扰大模型服务多领域路由 专家选择系统复杂度高按输入动态分配最合适专家这个表不是标准答案更像一个起步方向。关键是要先想清楚你的瓶颈到底是精度还是成本精度不够可以往多加模型成本吃不消就尽量选参数级整合或蒸馏。5.3 第三步用OOF预测做融合别自己骗自己无论在哪一层做集成评估方式都是核心。用K折交叉验证拿到每个基模型在“没见过”数据上的OOF预测是这个流程里最值得花时间的环节。以后不管用加权平均还是训练元模型都以OOF作为评估基准而不是重新划一个验证集或者直接看训练集指标。加权平均的权重怎么定最省事的做法是把权重设为与OOF指标成正比比如用准确率或AUC做归一化。更稳的方式是在OOF上用线性回归或非负最小二乘去学习权重但要注意元模型越简单越好因为复杂元模型在OOF上容易过拟合真实增益会被高估。5.4 一个可复用的简化骨架我在这里放一段伪代码帮大家把上面说的流程串起来核心就是“K折产出OOF → 学习权重 → 应用到新预测”# 伪代码示意三基模型OOF加权融合 oof_preds, valid_preds [], [] for model in [model_a, model_b, model_c]: oof, valid fit_predict_with_cv(model, X, y, X_valid, n_folds5) oof_preds.append(oof) valid_preds.append(valid) # 在OOF上寻找最优融合权重网格搜索或线性回归均可 best_weights optimize_weights(oof_preds, y, methodnonnegative) # 将权重应用到新样本的预测 final_valid sum(w * p for w, p in zip(best_weights, valid_preds))这段代码最需要注意的就是fit_predict_with_cv不能把全量训练集的预测结果当作OOF必须保证每个样本的预测都来自“没见过这个样本的那一折模型”。很多项目最后线上效果和离线对不上十有八九是这里出了数据泄漏。5.5 什么时候应该放弃集成上面这套流程跑完之后如果发现集成增益长期低于成本直接放弃这不是丢人的事。集成不是万金油它的适用条件是“模型有差异”和“单模不低于可用线”。当数据量很小、信号太弱、或者模型之间趋于同质化时集成只是把噪声也平均进去了效果自然不好。我自己遇到过不少项目最后最优方案就是单模型加一个简单的后处理。与其硬上集成不如把时间花在更高质量的数据和更合理的评估上这个判断力比任何技巧都值钱。6. 常见问题与排查心得6.1 传统集成场景的典型问题速查表现常见原因解决方向两个模型融合后没提升相关性太高几乎没有互补信息换算法族、换特征子集、换数据分布后重新训练Stacking在线上不如离线生成元训练特征时发生了泄漏严格使用K折OOF禁止训练集全量预测进入元模型OOF指标很好验证集却差元模型过拟合OOF噪声缩小元模型复杂度或改用简单加权平均融合权重换个数据就变权重空间存在多组接近最优方案使用正则化回归、约束非负或直接采用归一化AUC权重这张表我建议贴在你工位旁边因为这些问题基本每年都会遇到一遍。尤其是“线上不如离线”几乎一半的Stacking翻车都和K折没做对有关。6.2 权重平均与快照集成里的几个坑到了深度学习阶段新问题也来了。首先是权重平均不是随便平均的不同初始化、不同结构的模型权重直接平均往往会让性能崩掉有效率的方式是让同结构模型在同一个初始化下用不同数据顺序或不同数据增强训练得到几个检查点再做平均。快照集成也有自己的问题。如果学习率循环周期太短保存下来的快照可能都落在同一个局部极小点附近多样性不足集成就形同虚设。我一般会先跑一小段热身把学习率循环做得足够长再检查不同快照在验证集上的预测相关性相关性低于某个阈值才算真正制造出了多样性。另一个常见的坑是有人把每个epoch的检查点全部保存下来做平均。这会让训练早期的欠拟合模型把平均结果拉低反而比最后几个检查点的平均更差。经验做法是只取训练后期、损失开始进入平台期的那一段。6.3 大模型时代的新集成陷阱与我的体会到了大模型时代坑的位置又变了。靠评测集选权重或挑路由很容易把评测集本身变成优化目标最后指标虚高换个真实场景立刻打回原形。模型合并时如果两个任务方向相互冲突直接相加会导致灾难性遗忘我见过一个还算稳妥的做法是先把合并系数调低一点点往上加同时盯住各个下游任务的表现出现某指标下滑就回落。还有路由系统的问题路由网络对某类输入置信度低的时候硬分配专家会让系统整体表现反而差于始终用一个通用模型。所以做动态组合之前至少要有一个“兜底模型”低置信度直接走通用路径。我个人这几年最大的体会是模型集成的本质始终是“用多样性和组合成本去换稳定性和精度”。十年前用十个决策树今天用两三个低秩分支形式上完全不同但底层思考方式是一样的先看清楚差异再评估成本最后才决定要不要融合、在哪个层面融合。这个判断框架我觉得比任何具体方法都更耐用。