Overfitting
機械学習における過学習(オーバーフィッティング)の原因と症状を探求します。高バリアンスを防ぎ、Ultralytics YOLO26を使用して汎化性能を向上させる方法を学びましょう。
機械学習における過学習(オーバーフィッティング)とは、モデルがトレーニングデータに適合しすぎてしまい、基盤となるデータ分布ではなく、ノイズやランダムな変動まで捉えてしまう現象です。過学習したモデルは、未知の新しいデータに適用できる一般的なパターンを学習するのではなく、トレーニングセット内の特定の例を事実上記憶してしまいます。その結果、トレーニングデータに対しては優れたパフォーマンスを発揮しますが、現実世界のシナリオに対する汎化性能が低くなります。これは「高バリアンス」とも呼ばれ、トレーニングに使用した特定のデータセットによってモデルの予測が大きく変化することを意味します。
Link to this sectionなぜ過学習が起こるのか#
過学習の主な原因は、利用可能なデータ量に対してモデルが過度に複雑であることです。ニューラルネットワークが大きすぎる、つまり層やパラメータが多すぎる場合、トレーニング例を簡単に記憶できてしまいます。その他の要因には以下が含まれます。
- トレーニングデータが不十分: 小規模なデータセットには、より広範な母集団には存在しない擬似相関が含まれている可能性があります。限られたデータで学習されたモデルは、こうした偶発的なパターンを学習しやすくなります。
- データのノイズと外れ値: トレーニングデータに高レベルのノイズや非典型的な外れ値が含まれていると、モデルが誤った方向に誘導され、真のシグナルではなく異常値に適合するように内部パラメータを調整してしまう可能性があります。
- 学習期間が長すぎる: 学習するエポック数が多すぎると、モデルはトレーニングセット内のノイズに適合するまで重みを調整し続けてしまいます。これは、バリデーションデータを使用して監視されることが一般的です。
Link to this section過学習と未学習(アンダーフィッティング)の比較#
過学習を未学習と区別することは重要です。過学習が過剰な詳細(ノイズを含む)の学習を伴うのに対し、未学習はモデルが単純すぎてデータの構造を全く捉えられない場合に発生します。未学習のモデルは、トレーニングデータと新しいデータの両方でパフォーマンスが低く、多くの場合「高バイアス」となります。これら両極端のバランスをとることは、バイアス・バリアンスのトレードオフとして知られています。
Link to this section過学習を防ぐ方法#
エンジニアは、過学習を抑制しモデルの堅牢性を高めるために、いくつかの手法を用いています。
- 正則化: L1/L2正則化やドロップアウト層の追加といった手法は、トレーニング中にペナルティやランダム性を導入し、モデルが特定の機能に過度に依存するのを防ぎます。
- 早期終了(アーリーストッピング): バリデーションセット上の損失関数を監視することで、トレーニングの精度が向上し続けていても、未知のデータに対するパフォーマンスが向上しなくなった時点でトレーニングを停止できます。
- データ拡張(データオーギュメンテーション): データ拡張を使用してトレーニングセットのサイズと多様性を人工的に増やすことで、モデルが正確な画像を記憶しにくくします。
- 交差検証(クロスバリデーション): k分割交差検証のような手法を使用することで、モデルが異なるデータサブセットでテストされることが保証され、パフォーマンスのより信頼性の高い推定値が得られます。
Link to this section現実世界の例#
AIを本番環境にデプロイする際、過学習は深刻な結果を招く可能性があります。
- 医療診断: 医療分野におけるAIにおいて、皮膚がんを検出するために学習されたモデルは、トレーニング画像に含まれる照明条件や定規のマーキングに対して過学習してしまうことがあります。異なる照明や機器を備えた診療所にデプロイされた場合、無関係な背景の手がかりに依存していたため、モデルが悪性病変を正しく特定できない可能性があります。
- 金融予測: 株価予測モデルは、一度限りの経済危機のような特定の再現性のないイベントによって引き起こされた過去の市場トレンドに過学習する可能性があります。そのようなモデルは、根本的な市場力学を学習するのではなく、過去の異常値を記憶しているため、将来の株価変動を正確に予測できない可能性が高いです。
Link to this sectionコード例: YOLO26における早期終了#
Ultralytics Platformまたはローカルトレーニングスクリプトを使用する場合、早期終了の許容値(patience)を設定することで過学習を防ぐことができます。これにより、指定されたエポック数だけバリデーションの適合度が向上しない場合にトレーニングを停止します。
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)Link to this section関連概念#
- 汎化: モデルが新しく未知のデータに適応し、良好なパフォーマンスを発揮する能力。過学習の対極にある概念です。
- 交差検証: 統計分析の結果がどの程度独立したデータセットに汎化するかを評価するための手法。
- 正則化: 与えられたトレーニングセットに適切に関数を適合させ、過学習を回避するためにエラーを削減する手法。






