Ensemble
アンサンブル学習がどのように精度を向上させ過学習を低減するか解説します。Ultralytics YOLO26のような複数のモデルを組み合わせて、優れたコンピュータビジョンの結果を得る方法を学びましょう。
アンサンブル学習は、機械学習 (ML)における堅牢な戦略であり、しばしば「弱学習器」と呼ばれる複数の独立したモデルを組み合わせて、単一の予測出力を生成します。基本的な前提として、モデルのグループは、単一のモデル単独での動作よりも、高い精度と優れた汎化性能を達成できることが挙げられます。多様なアルゴリズムからの予測を集約することで、アンサンブル手法はトレーニングデータに対する過学習 (overfitting)のリスクを効果的に低減し、ランダムな誤差を平滑化し、システム全体の安定性を向上させます。このアプローチは、重要な決定を下す際に1人の個人の意見に頼るのではなく、専門家のパネルに相談することに似ています。
アンサンブル学習のメカニズム#
バイアス・バリアンスのトレードオフを操作する能力に、アンサンブル手法の効果の秘密があります。個々のモデルは、高いバリアンス(ノイズに対する感度)や高いバイアス(過度な単純化)に悩まされることがあります。アンサンブルは、特定の手法を通じてこれらの課題を軽減します。
- バギング (Bootstrap Aggregating): この手法には、データセットの異なるサブセットに対して同じアルゴリズムの複数のインスタンスをトレーニングすることが含まれます。最も有名な例はランダムフォレスト (Random Forest)アルゴリズムであり、多くの決定木 (decision trees)の決定を集約してバリアンスを低減します。
- ブースティング: バギングとは異なり、ブースティングはモデルを順次トレーニングします。それぞれの新しいモデルは、以前のモデルによって生じたエラーの修正に焦点を当てます。LightGBMやCatBoostのような人気のフレームワークは、これを利用して精度の高い予測システムを作成します。
- スタッキング (Stacked Generalization): これには、複数の異質なベースモデル(例:ニューラルネットワークとサポートベクターマシン)の予測を組み合わせるために、新しい「メタモデル」をトレーニングすることが含まれます。
コンピュータビジョンにおけるアンサンブル#
コンピュータビジョン (CV)の分野では、コンペティションや安全性が重要視されるアプリケーションでパフォーマンスを最大化するために、アンサンブルが頻繁に使用されます。物体検出の場合、これは通常、同じ画像に対してYOLO26の異なるバージョンなど、複数のモデルを実行することを伴います。その結果得られたバウンディングボックスは、非最大値抑制 (NMS)やWeighted Box Fusion (WBF)などの手法を使用して統合され、最も確率の高い物体の位置が導き出されます。
実社会での応用#
アンサンブル手法は、予測の信頼性が極めて重要な業界では一般的です。
-
医療診断と画像処理: ヘルスケアにおいて、偽陰性を回避することは極めて重要です。アンサンブルは、X線でトレーニングされた畳み込みニューラルネットワーク (CNN)と異常を検出するためのVision Transformer (ViT)を組み合わせる場合があります。モデル間の合意により、より高い信頼度スコアが得られ、放射線科医による腫瘍の検出や稀な疾患の診断を支援します。
-
金融不正検出: 金融機関は、トランザクションパターンを分析するためにアンサンブルを使用します。ロジスティック回帰モデルと勾配ブースティングマシンを組み合わせることで、単一のモデルでは見落とす可能性のある不正の微細な兆候を検出できる一方で、誤検知率を低く抑えることができます。
Pythonによるモデルアンサンブルの実装#
複数のトレーニング済みモデルをロードし、同じ入力に対する予測を生成することで、基本的な推論アンサンブルをシミュレートできます。Ultralytics Platformを使用すると、これらのバリアントを簡単にトレーニングできます。次の例は、2つの異なるUltralytics YOLOモデル(YOLO26nおよびYOLO26s)をロードして、画像上の検出を検証する方法を示しています。
from ultralytics import YOLO
# Load two distinct YOLO26 model variants
# 'n' (nano) is faster, 's' (small) is more accurate
model_nano = YOLO("yolo26n.pt")
model_small = YOLO("yolo26s.pt")
# Define the image source
source = "https://ultralytics.com/images/bus.jpg"
# Run inference with both models
results_n = model_nano(source)
results_s = model_small(source)
# Compare the number of objects detected by each model
print(f"Nano Model Found: {len(results_n[0].boxes)} objects")
print(f"Small Model Found: {len(results_s[0].boxes)} objects")アンサンブルとデータ拡張の違い#
アンサンブル学習とデータ拡張を区別することが重要です。
- アンサンブルはアーキテクチャと予測フェーズに焦点を当て、複数の学習済みモデルを組み合わせて結果を向上させます。
- データ拡張は、単一のより堅牢なモデルをトレーニングするために、(回転や反転などを介して)データセットの多様性を人工的に高める、トレーニングデータのフェーズに焦点を当てています。
データ拡張は単一のモデルの学習を助けますが、アンサンブル学習は複数のモデルが互いの出力を検証するのを助けます。インスタンスセグメンテーションや姿勢推定などのタスクで最高水準の結果を達成するために、両方の戦略が一緒に使用されることがよくあります。






