訓練データに適合しすぎて未知データへの予測精度が下がる現象
過学習(オーバーフィッティング)とは、モデルが訓練データ(=学習に使ったデータ)に合わせすぎてしまい、まだ見たことのない未知のデータに対する予測精度が下がってしまう現象のことです。
身近な例で言うと、過去問の答えを丸暗記した受験生に似ています。過去問(訓練データ)は完璧に解けるのに、少し角度を変えた本番の問題(未知データ)になると途端に解けなくなる。これはパターンの「本質」ではなく、過去問特有の細かい特徴やノイズまで覚えてしまったからです。
上のツールで複雑度のスライダーを上げてみてください。訓練誤差(青)はどんどん下がるのに、検証誤差(赤)はある点を境に逆に増えていきます。下の曲線も、複雑度が高いとすべての点を無理に通ろうとして不自然に波打つのが分かります。これが過学習の正体です。
過学習は、モデルの表現力に対してデータが足りないときに起きやすくなります。主な原因は次のとおりです。
・モデルが複雑すぎる:パラメータ(重み)が多すぎて、データの本質ではなく細部やノイズまで覚えてしまう
・訓練データが少ない:少ない例だけだと、たまたまの偏りを「ルール」だと勘違いする
・学習させすぎ(エポック過多):同じデータで繰り返し学習しすぎると、その細部に過剰適応する
・ノイズの多いデータ:誤差や例外まで丸ごと学んでしまう
ポイントは「訓練データだけで性能を測ってはいけない」ということです。だからこそ、学習に使わない検証データ(または訓練/テスト分割)で性能を確かめます。訓練データの正解率は高いのにテストデータで低い、という状況は過学習のサインと考えてよいでしょう。
過学習を防ぐには、モデルが細部を覚えすぎないように適度な制約をかけるか、学習に使えるデータを実質的に増やすのが基本方針です。代表的な対策は次のとおりです。
・正則化:重みが大きくなりすぎないよう損失に罰則を加える(L1/L2 正則化)。曲線が滑らかになる
・データ拡張:画像を回転・反転・拡大するなどして訓練データを水増しし、多様なパターンを学ばせる
・ドロップアウト:学習中にノードをランダムに無効化し、特定の経路に頼りすぎないようにする
・早期終了(アーリーストッピング):検証誤差が増え始めたら学習を止める
・モデルを単純にする:パラメータ数や層を減らす、データ量を増やす
上のグラフの「最適」の縦線が、検証誤差が最小になる「ちょうどよい複雑度」です。これらの対策は、この最適点付近にモデルを留めるための工夫だと考えると理解しやすいです。特に正則化は次の「正則化」のページでさらに詳しく扱います。