Ensemble
アンサンブル学習は、バギング、ブースティング、スタッキングによって複数モデルの予測を組み合わせ、単独のモデルよりも誤差を小さくします。
アンサンブル学習では、同じタスク向けに複数のモデルを学習し、投票、平均化、学習済みの統合器などによって予測をまとめ、通常は単独のモデルより高精度で安定した出力を得ます。モデルごとに異なる誤りをするため、組み合わせることでそれぞれの誤差の一部を相殺できます。Anders KroghとJesper Vedelsbyは1995年、平均化した回帰モデルについてこの性質を厳密に示しました。アンサンブルの二乗誤差は、各モデルの平均誤差からアンサンブルとの平均不一致度を引いた値に等しいため、平均化アンサンブルが構成モデルの平均より悪くなることはありません。性能向上の鍵はモデル間の多様性です。
バギング、ブースティング、スタッキング#
機械学習のアンサンブルの大部分は3つの系統に分類され、それぞれがバイアス・バリアンスのトレードオフの異なる側面に作用します。
バギングはbootstrap aggregatingの略で、Leo Breimanが1996年に提唱しました。各モデルを、学習セットから復元抽出したブートストラップサンプルで独立に学習し、結果を平均または投票で統合することで、主に分散を低減します。深い決定木のように不安定な学習器に適しています。Breimanが2001年に発表したランダムフォレストでは、各分岐で特徴量のランダムなサブセットを追加し、木同士の類似性をさらに低くしています。
ブースティングでは、モデルを順番に学習させます。各モデルは、ここまでのアンサンブルが誤った例に重点を置き、主にバイアスを低減します。Yoav FreundとRobert SchapireによるAdaBoostは、次の弱学習器を学習する前に、誤分類された例の重みを増やします。Jerome Friedmanの勾配ブースティングは、新しい木を損失関数の勾配に適合させる手法です。これを基盤とするXGBoost、LightGBM、CatBoostは、多くの表形式データセットで依然として最も強力なモデルです。
スタッキング、またはstacked generalizationは、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個をブースティングした木も誤分類しており、メタモデルが利用できる予測の不一致が少ないためです。
ディープラーニングとビジョンにおけるアンサンブル#
ディープアンサンブルでは、異なるランダム初期化から複数のニューラルネットワークを学習し、出力を平均します。DeepMindのBalaji Lakshminarayananらは2017年、学習データとは異なる入力でモデル間の予測が最も食い違うため、この手法が精度と不確実性定量化の両方を改善することを示しました。物体検出では、複数の検出器から得たバウンディングボックスを集約し、非最大抑制(NMS)またはWeighted Boxes Fusionで統合します。Weighted Boxes Fusionは最も信頼度の高いボックスだけを残すのではなく、重なり合うボックスを平均します。推論コストより精度が重視される医用画像解析やコンペティションでは、異なるアーキテクチャのアンサンブルがよく使われます。
モデルを追加するたびにコストが増えるため、エッジAIデバイスではアンサンブルの利用が制限されます。知識蒸留は、これを解決する方法の一つとして導入されました。Geoffrey Hinton、Oriol Vinyals、Jeff Deanは、アンサンブルの平均出力に一致する単一モデルを学習しました。ドロップアウトは、指数関数的な数の間引かれたサブネットワークを平均することに相当する学習を実現する、より低コストな関連手法です。
アンサンブル、モデルスープ、Mixture of Experts#
モデルアンサンブルは通常、推論時に個別に学習したネットワークを組み合わせることを指し、ディープラーニングで最も一般的なアンサンブル学習の形態です。モデルスープなどのモデルマージ手法では、予測ではなく重みを平均します。これにより単一モデルのコストに抑えられますが、同じ事前学習済み重みからファインチューニングしたモデルに限って機能します。Mixture of Experts(MoE)では、ルーターが各入力を少数のエキスパートに振り分けながら、エキスパートを共同で学習します。そのため、各エキスパートがタスク全体を解くのではなく、専門化できます。
Pavel Izmailovらが2018年に示したように、1回の学習過程で重みを平均すると、1つのモデルのコストでその学習過程のチェックポイントをアンサンブルした場合に近い効果が得られます。Ultralytics YOLOの学習では、すべてのYOLO26の学習実行でこの手法を適用します。オプティマイザーステップごとに、最終的に0.9999へ近づくよう増加する減衰率で重みの指数移動平均を更新し、生の重みではなく平均重みをbest.ptとlast.ptで検証・保存します。










