Model Ensemble
Ансамбль моделей объединяет предсказания нескольких моделей в один более точный и надёжный результат. Разбираем голосование, усреднение, объединение BBox и компромиссы.
Ансамбль моделей объединяет прогнозы нескольких обученных моделей в единый результат с помощью голосования, усреднения или обучаемого комбинирования, чтобы ошибки отдельных моделей компенсировали друг друга. Если участники ансамбля допускают разные ошибки, он точнее и надёжнее лучшей отдельной модели; поэтому ансамбли лидируют в соревнованиях по машинному обучению: в 2009 году Netflix Prize выиграла команда, объединившая прогнозы множества моделей, а победившая в 2012 году задача ImageNet по глубокому обучению усреднила прогнозы семи свёрточных сетей и достигла ошибки top-5 в 15.3%. Недостаток — вычислительные затраты: каждый участник обрабатывает каждый входной объект, поэтому использование памяти и задержка инференса растут с размером ансамбля.
Как работают ансамбли моделей#
Ансамбль полезен лишь тогда, когда его участники допускают разные ошибки. Усреднение выходов моделей с независимыми ошибками уменьшает дисперсию объединённого прогноза, тогда как от комбинирования моделей, ошибающихся на одних и тех же входных данных, мало пользы. Бэггинг обеспечивает такое разнообразие, обучая каждого участника на случайной выборке из обучающих данных, как в случайном лесе деревьев решений; бустинг обучает каждую новую модель исправлять ошибки предыдущих, как в XGBoost и LightGBM. Глубокие ансамбли обучают копии одной нейронной сети с разными случайными начальными значениями; разброс их прогнозов также характеризует неопределённость модели. Комбинирование разных архитектур, например свёрточной нейронной сети и визуального трансформера, даёт участников с разными индуктивными смещениями и менее коррелированными ошибками.
Правило комбинирования зависит от того, какие выходные данные выдают участники:
Больше всего выигрывают модели с высокой дисперсией, например непрореженные деревья решений. В этом примере scikit-learn обучает пять деревьев, различающихся только случайным начальным значением, и усредняет предсказанные ими вероятности:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)
# Five decision trees that differ only in their random seed, which changes the features each split considers
trees = [DecisionTreeClassifier(max_features="sqrt", random_state=seed) for seed in range(5)]
for tree in trees:
tree.fit(X_train, y_train)
print("Single trees:", ", ".join(f"{tree.score(X_test, y_test):.3f}" for tree in trees))
# Ensemble: average the predicted class probabilities and pick the most likely class
probabilities = np.mean([tree.predict_proba(X_test) for tree in trees], axis=0)
accuracy = (probabilities.argmax(axis=1) == y_test).mean()
print(f"Ensemble of 5: {accuracy:.3f}")На 899 отложенных изображениях цифр отдельные деревья показывают результаты от 0.736 до 0.805, а ансамбль всех пяти — 0.901, что выше результата любого участника, поскольку деревья ошибаются на разных изображениях.
Ансамблирование детекторов объектов#
Ансамбли детекторов объектов также должны объединять рамки: несколько моделей обычно находят один и тот же объект в немного разных позициях. Самый простой способ — собрать рамки всех моделей и применить подавление немаксимумов (NMS), которое оставляет рамку с наибольшей уверенностью в каждой группе перекрывающихся рамок. При взвешенном объединении рамок вместо этого усредняются координаты перекрывающихся рамок с учётом уверенности, поэтому каждая модель влияет на итоговую позицию. Ultralytics YOLO26 использует близкий подход к ансамблированию при прогнозировании: с параметром augment=True детектор обрабатывает изображение в исходном масштабе, а также при масштабе 83% и 67%; копия с масштабом 83% отражается по горизонтали, после чего три набора рамок объединяются с помощью NMS. В этом примере два YOLO26 разного размера объединяются таким же образом:
import torch
from torchvision.ops import batched_nms
from ultralytics import YOLO
# Two YOLO26 models of different sizes make different mistakes
models = [YOLO("yolo26n.pt"), YOLO("yolo26s.pt")]
results = [model("https://ultralytics.com/images/bus.jpg")[0] for model in models]
# Pool the boxes from both models
boxes = torch.cat([result.boxes.xyxy for result in results])
scores = torch.cat([result.boxes.conf for result in results])
classes = torch.cat([result.boxes.cls for result in results])
# Keep the highest-scoring box in each overlapping group of the same class
keep = batched_nms(boxes, scores, classes, iou_threshold=0.5)
print(f"{len(boxes)} boxes from both models, {len(keep)} after fusion")Рамки, обнаруженные обеими моделями, сливаются в одну; объекты, найденные только одной моделью, сохраняются после объединения — так ансамбль детекторов повышает полноту.
Применение#
- Анализ медицинских изображений: Диагностические модели объединяют несколько сетей для повышения чувствительности, а расхождение между результатами участников указывает на случаи, которые должен проверить рентгенолог.
- Соревнования и бенчмарки: В решениях-победителях на Kaggle и подобных рейтинговых площадках обычно усредняются модели, обученные с разными архитектурами, начальными значениями и разделениями данных, поскольку прирост точности оправдывает дополнительные вычисления.
- Автономные автомобили: Системы восприятия объединяют модели с разными сильными сторонами, например детектор на основе камеры и детектор на основе лидара, чтобы объект, пропущенный одной моделью, могла обнаружить другая.
Ансамбль моделей и связанные понятия#
- Ансамблевое обучение: Синоним общего метода. Термин «ансамбль моделей» обычно обозначает получившийся объединённый набор моделей.
- Объединение моделей: Усредняет веса совместимых моделей в одной сети, которая затем работает с вычислительными затратами одной модели.
- Смесь экспертов (MoE): Обучаемый маршрутизатор направляет каждый входной объект лишь нескольким экспертным подсетям, увеличивая ёмкость модели без запуска каждого эксперта на каждом входном объекте.
- Дистилляция знаний: Обучает одну ученическую модель имитировать учителя, которым может быть целый ансамбль. В статье Джеффри Хинтона, Ориола Виньялса и Джеффа Дина о дистилляции 2015 года ансамбль моделей распознавания речи сжали в одну модель, сохранившую большую часть улучшения качества ансамбля.










