Ensemble
集成学习通过装袋、提升或堆叠来组合多个模型的预测,从而获得比任何单个模型都更低的误差。
集成学习会针对同一任务训练多个模型,并通过投票、平均或学习得到的组合器来合并预测,生成一个通常比任何单个模型更准确、更稳定的输出。之所以有效,是因为不同模型会犯不同的错误;将它们组合起来可以抵消各自的一部分误差。1995 年,Anders Krogh 和 Jesper Vedelsby 针对平均回归模型精确地证明了这一点:集成模型的平方误差等于成员模型的平均误差减去它们与集成模型之间的平均分歧,因此平均集成的效果不会差于成员模型的平均水平,而让效果进一步提升的关键是成员模型之间的多样性。
装袋法、提升法与堆叠法#
机器学习中的大多数集成方法都属于三个类别,它们对偏差-方差权衡的不同方面发挥作用。
装袋法(bootstrap 聚合的简称)由 Leo Breiman 于 1996 年提出。它会在训练集上有放回地抽取自助采样数据,分别训练每个成员模型,再对结果取平均或投票,主要用于降低方差。它适用于深度决策树等不稳定的学习器;Breiman 于 2001 年提出的随机森林则在每次分裂时加入随机特征子集,让树之间的差异更大。
提升法按顺序训练成员模型,每个模型都专注于集成模型目前未能正确处理的部分,主要用于降低偏差。Yoav Freund 和 Robert Schapire 提出的 AdaBoost 会在训练下一个弱学习器前,提高被错误分类样本的权重。Jerome Friedman 的梯度提升会让每棵新树拟合损失函数的梯度;XGBoost、LightGBM和CatBoost都采用了这一方法,在许多表格数据集上仍是效果最强的模型。
堆叠法(也称堆叠泛化)由 David Wolpert 于 1992 年提出。元模型(通常是逻辑回归)会根据各个基础模型在留出折上的预测,学习如何组合不同类型的基础模型,并提高留出预测最可靠的模型的权重。
这个 scikit-learn 示例在乳腺癌诊断数据集上使用 5 折交叉验证,对比单棵树与三个类别各自的一种集成方法:
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier, StackingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
X, y = load_breast_cancer(return_X_y=True) # 569 tumors, 30 measurements each
forest = RandomForestClassifier(n_estimators=200, random_state=0)
boosting = GradientBoostingClassifier(random_state=0)
models = {
"Single decision tree": DecisionTreeClassifier(random_state=0),
"Bagging (random forest)": forest,
"Boosting (gradient boosting)": boosting,
# Stacking: a logistic regression learns how to combine the forest and the boosted trees
"Stacking": StackingClassifier([("forest", forest), ("boosting", boosting)], LogisticRegression()),
}
for name, model in models.items():
print(f"{name}: {cross_val_score(model, X, y, cv=5).mean():.3f}")单棵树的得分为 0.917,随机森林为 0.960,梯度提升为 0.963,堆叠模型也为 0.963。每种集成方法都将树模型的错误率大致减半。堆叠模型的表现与效果更强的成员模型持平,因为森林误分类的 23 个肿瘤中,有 16 个也被提升树误分类,这让元模型几乎没有可利用的分歧。
深度学习与视觉中的集成方法#
深度集成会使用不同的随机初始化训练多个神经网络,并对它们的输出取平均。2017 年,DeepMind 的 Balaji Lakshminarayanan 和同事发现,这既能提升准确率,也能改进不确定性量化,因为当输入与训练数据不同时,各成员模型之间的分歧最大。在目标检测中,多个检测器的边界框会汇总并通过非极大值抑制(NMS)或加权框融合进行合并;加权框融合会对重叠框取平均,而不是只保留置信度最高的框。不同架构的集成常见于医学图像分析和竞赛提交中,因为这些场景对准确率的要求高于对推理成本的要求。
集成中的每个成员都会增加成本,这限制了集成方法在边缘 AI设备上的应用。知识蒸馏的提出部分就是为了解决这个问题:Geoffrey Hinton、Oriol Vinyals 和 Jeff Dean 训练单个模型来匹配集成模型的平均输出。Dropout是一种成本更低的相关方法,因为使用 Dropout 进行训练,相当于近似平均指数级数量的精简子网络。
集成模型、模型汤与专家混合模型#
模型集成通常指在推理时组合分别训练的网络,这是深度学习中最常见的集成学习形式。模型汤和其他模型合并方法会对权重取平均而非对预测取平均,因此成本与单个模型相同,但只适用于从同一组预训练权重微调得到的模型。专家混合模型(MoE)会联合训练多个专家,并配备一个将每个输入路由给其中少数专家的路由器,让专家分别专精于不同领域,而不是每个专家都处理整个任务。
正如 Pavel Izmailov 和同事在 2018 年展示的那样,在单次训练过程中对权重取平均,可以用单个模型的成本近似获得该次训练各个检查点组成的集成效果。 Ultralytics YOLO 训练会在每次 YOLO26 训练中使用这一方法:训练过程会保留权重的指数移动平均值,每次优化器更新后都会更新,并逐渐将衰减率提高到 0.9999;随后会对这个平均权重进行验证并保存到 best.pt 和 last.pt,而不是保存原始权重。










