機械学習の「過学習(overfitting)」とは、モデルが訓練データに過度に適応しすぎて、未知のデータに対して正しく予測できなくなる現象を指します。
言い換えると、訓練データに含まれる「本質的なパターン」ではなく、「偶然のノイズや例外的な傾向」まで学んでしまい、現実世界での汎化性能(generalization ability)が損なわれた状態です。
過学習の仕組み
機械学習モデルは、訓練データから「入力(特徴量)」と「出力(目的変数)」の関係を学びます。
理想的には、データ全体に共通する規則を抽出して、未知のデータにも対応できることが目標です。
しかし、モデルが複雑すぎたり、データ量が少なすぎたりすると、モデルは訓練データを“暗記”するように振る舞うことがあります。
その結果、訓練データの精度は非常に高くなる一方で、新しいデータでは予測が大きく外れる、これが過学習です。
たとえば、非常に深いニューラルネットワークや高次の多項式回帰モデルでは、訓練データの全ての点を通るような関数を作れてしまうため、ノイズまで「重要なパターン」と誤認します。
過学習が起きる主な原因
過学習はさまざまな要因が複合して発生します。
代表的なものを見ていきましょう。
モデルが複雑すぎる
パラメータ数が多く表現力が高すぎると、モデルは訓練データを完璧に再現できてしまい、一般化性能が低下します。
訓練データが少ない
データが少ないと、モデルは本質的なパターンを見つけにくく、たまたまの偏りに過敏に反応します。
データにノイズが多い
誤ったラベルや外れ値が多いデータを学習すると、モデルはそれを「正しい情報」として吸収し、ノイズを再現するようになります。
正則化(Regularization)の不足
L1・L2正則化、Dropout、重み減衰などの制約を設けないと、モデルは自由に振る舞いすぎ、訓練データに過剰適合しやすくなります。
検証手法が不適切
検証データを分けずに訓練データで性能を評価すると、過学習が発生しても気づけません。
過学習を防ぐというより、「見抜けなくなる原因」です。
過学習の見分け方
過学習は、訓練データと検証データの誤差(loss)や精度(accuracy)のギャップを観察することで発見できます。
| データ | 誤差 | 精度 | 状態 |
|---|---|---|---|
| 訓練データ | 小さい | 高い | モデルが暗記している |
| 検証データ | 大きい | 低い | 汎化できていない |
学習曲線を見ると、訓練誤差が下がり続けるのに対し、検証誤差が途中から上昇に転じるパターンが典型的です。
補足すると、
- 訓練誤差も検証誤差も高い → 未学習(underfitting)
- 訓練誤差は低いが検証誤差が高い → 過学習(overfitting)
と整理すると理解が明確になります。
過学習を防ぐ方法
過学習は完全には避けられませんが、次のような手法で大幅に軽減できます。
データ拡張(Data Augmentation)
画像や音声などでは、データを回転・反転・ノイズ付加などで人工的に増やすことで、モデルがより多様なパターンを学び、汎化性能を高められます。
正則化(Regularization)
モデルの自由度を制御する代表的な方法です。
- L1正則化(Lasso):不要な特徴量の重みを0にしやすくする
- L2正則化(Ridge):過度な重みの偏りを抑える
- Dropout:学習中に一部ノードをランダムに無効化して過学習を防ぐ
早期終了(Early Stopping)
検証誤差が増え始めた時点で学習を止めることで、過度な最適化を防ぎます。
実務では非常に効果的な方法です。
交差検証(Cross Validation)
過学習を直接防ぐわけではありませんが、汎化性能をより正確に測定し、過学習しているモデルを発見するための評価手法です。
モデル選択やハイパーパラメータ調整の際に有効です。
シンプルなモデルを選ぶ
モデルが複雑であるほど過学習しやすいため、まずは線形モデルや浅い決定木などシンプルなモデルから始めるのが良い戦略です。
特徴選択(Feature Selection)
不要な特徴量を削除してモデルを簡潔にすることで、ノイズに引きずられにくくなります。
ただし、削りすぎは性能低下を招くため、慎重な選択が必要です。
まとめ
過学習とは、
「訓練データでは賢いが、現実のデータではバカになる状態」
とも言えます。
モデルを評価するときは、訓練精度の高さよりも、未知データでの汎化性能を重視すべきです。
データ拡張・正則化・早期終了などの手法を適切に組み合わせることで、過学習を防ぎ、より実用的なモデルに仕上げることができます。
以上、機械学習の過学習についてでした。
最後までお読みいただき、ありがとうございました。
