過学習と汎化

過学習とは

過学習(オーバーフィッティング)は、モデルが訓練データに合わせすぎて、新しいデータに対応できなくなる現象です。

例えるなら「過去問の答えを丸暗記した受験生」です。過去問なら満点でも、少し問題文が変わった本番では点が取れません。[[機械学習の基礎]] で最初につまずきやすい落とし穴がこれです。

反対に、モデルが単純すぎてデータの傾向すらつかめていない状態は未学習(アンダーフィッティング)と呼びます。

汎化とは

汎化(はんか)は、学習に使っていない未知のデータでもうまく予測できる能力のことです。機械学習のゴールは「訓練データで高得点を取ること」ではなく「汎化性能を高めること」だと覚えておきましょう。

状態訓練データの成績未知データの成績原因
未学習悪い悪いモデルが単純すぎる・学習不足
ちょうどよい良い良い傾向をとらえられている
過学習非常に良い悪いモデルが複雑すぎる・データが少ない

過学習の見つけ方

訓練データと検証データのスコアを、学習の進み具合にそって両方記録します。

  • 両方のスコアが一緒に上がっている間は順調
  • 訓練のスコアだけ上がり続け、検証のスコアが下がり始めたら過学習の始まり

つまり過学習は、[[モデル評価と指標]] のように学習に使っていないデータで測って初めて気づけます。訓練データだけを見ていると、成績が上がっているように錯覚します。

過学習を防ぐ方法

対策内容
データを増やす最も効果的。画像なら回転・反転などの水増しも有効
モデルを小さくするパラメータが多すぎると丸暗記しやすくなる
正則化パラメータが極端な値になりにくいよう罰則を加える
ドロップアウト学習中にランダムに一部のニューロンを無効化する
早期終了検証スコアが悪化し始めた時点で学習を打ち切る
交差検証データを分割して複数回評価し、たまたま良い結果を排除する

ドロップアウトは [[ニューラルネットワーク]] 特有の手法で、[[ディープラーニング]] のように層が深く複雑なモデルほど過学習しやすいため、標準的に使われます。

初学者向けポイント

  • 「訓練データで100点」は喜ぶところではなく、疑うところ
  • データが少ないのに複雑なモデルを使うのが、過学習の典型パターン
  • ノイズや誤ったラベルが多いデータほど、モデルはそのノイズごと暗記してしまう

関連技術とのつながり

  • [[機械学習の基礎]] — 学習の目的は暗記ではなく汎化
  • [[モデル評価と指標]] — 過学習は未知データでの評価によって検出する
  • [[ニューラルネットワーク]] — ドロップアウトや正則化を適用する対象
  • [[ディープラーニング]] — 表現力が高いぶん過学習対策が必須になる
Q: 過学習の状態を正しく説明しているのはどれ?
- [x] 訓練データでは非常に良い成績だが、未知のデータで成績が悪い
- [ ] 訓練データでも未知のデータでも成績が悪い
- [ ] 学習に時間がかかりすぎて終わらない
解説: 訓練データへの当てはめが行きすぎ、汎化性能を失った状態が過学習です。両方悪い場合は未学習です。

Q: 過学習に気づくために必要なことはどれ?
- [ ] 訓練データのスコアだけを注意深く見る
- [x] 学習に使っていない検証データのスコアも一緒に見る
- [ ] 学習時間を計測する
解説: 訓練スコアだけ上がり検証スコアが下がる、という乖離で過学習を検出します。

Q: 過学習の対策として挙げられていないものはどれ?
- [ ] ドロップアウト
- [ ] 早期終了
- [x] 訓練データとテストデータを混ぜて学習させる
解説: データを混ぜると未知データでの性能が測れなくなり、過学習の検出自体ができなくなります。