機械学習における過学習の原因と症状を探る。Ultralytics を用いて、高い分散を防止し汎化性能を向上させる方法を学ぶ。
機械学習において過学習は、モデルが訓練データを過剰に学習し、基礎となるデータ分布ではなくノイズやランダムな変動を捉えてしまう場合に発生する。 過学習したモデルは、新規の未見データに適用できる一般的なパターンを学習する代わりに、 訓練セット内の特定の例を事実上暗記してしまう。その結果、訓練データでは優れた性能を発揮するが、 実世界のシナリオへの汎化性能は低下する。これはしばしば「高分散」と表現され、 訓練に使用した特定のデータセットによってモデルの予測が大きく変動することを意味する。
過学習の主な原因は、利用可能なデータ量に対してモデルの複雑さが過剰であることである。ニューラルネットワークが大きすぎる場合——つまり層やパラメータが多すぎる場合——は、学習例を容易に記憶してしまう。その他の要因には以下が含まれる:
過学習と過少学習を区別することが重要です。過学習は細部(ノイズを含む)を過剰に学習する現象である一方、過少学習はモデルが単純すぎてデータの根本的な構造を全く捉えられない場合に発生します。過少学習モデルは学習データと新規データの両方で性能が低く、しばしば高いバイアスを引き起こします。この二つの極端な状態のバランスを取ることは、バイアス・分散のトレードオフとして知られています。
エンジニアは過学習を軽減しモデルの頑健性を向上させるために、いくつかの手法を用いる:
過学習は、AIを本番環境に導入する際に深刻な結果をもたらす可能性があります:
Ultralytics ローカルのUltralytics スクリプトを使用すると、 早期停止閾値を設定することで過学習を防止できます。これにより、検証用適合度が設定されたエポック数分間 改善しない場合にトレーニングが停止します。
from ultralytics import YOLO
# Load the YOLO26 model (latest generation)
model = YOLO("yolo26n.pt")
# Train with early stopping enabled (patience=50 epochs)
# If validation metrics don't improve for 50 epochs, training stops.
results = model.train(data="coco8.yaml", epochs=100, patience=50)
未来の機械学習で、新たな一歩を踏み出しましょう。