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






