過学習と汎化
過学習とは
過学習(オーバーフィッティング)は、モデルが訓練データに合わせすぎて、新しいデータに対応できなくなる現象です。
例えるなら「過去問の答えを丸暗記した受験生」です。過去問なら満点でも、少し問題文が変わった本番では点が取れません。[[機械学習の基礎]] で最初につまずきやすい落とし穴がこれです。
反対に、モデルが単純すぎてデータの傾向すらつかめていない状態は未学習(アンダーフィッティング)と呼びます。
汎化とは
汎化(はんか)は、学習に使っていない未知のデータでもうまく予測できる能力のことです。機械学習のゴールは「訓練データで高得点を取ること」ではなく「汎化性能を高めること」だと覚えておきましょう。
| 状態 | 訓練データの成績 | 未知データの成績 | 原因 |
|---|---|---|---|
| 未学習 | 悪い | 悪い | モデルが単純すぎる・学習不足 |
| ちょうどよい | 良い | 良い | 傾向をとらえられている |
| 過学習 | 非常に良い | 悪い | モデルが複雑すぎる・データが少ない |
過学習の見つけ方
訓練データと検証データのスコアを、学習の進み具合にそって両方記録します。
- 両方のスコアが一緒に上がっている間は順調
- 訓練のスコアだけ上がり続け、検証のスコアが下がり始めたら過学習の始まり
つまり過学習は、[[モデル評価と指標]] のように学習に使っていないデータで測って初めて気づけます。訓練データだけを見ていると、成績が上がっているように錯覚します。
過学習を防ぐ方法
| 対策 | 内容 |
|---|---|
| データを増やす | 最も効果的。画像なら回転・反転などの水増しも有効 |
| モデルを小さくする | パラメータが多すぎると丸暗記しやすくなる |
| 正則化 | パラメータが極端な値になりにくいよう罰則を加える |
| ドロップアウト | 学習中にランダムに一部のニューロンを無効化する |
| 早期終了 | 検証スコアが悪化し始めた時点で学習を打ち切る |
| 交差検証 | データを分割して複数回評価し、たまたま良い結果を排除する |
ドロップアウトは [[ニューラルネットワーク]] 特有の手法で、[[ディープラーニング]] のように層が深く複雑なモデルほど過学習しやすいため、標準的に使われます。
初学者向けポイント
- 「訓練データで100点」は喜ぶところではなく、疑うところ
- データが少ないのに複雑なモデルを使うのが、過学習の典型パターン
- ノイズや誤ったラベルが多いデータほど、モデルはそのノイズごと暗記してしまう
関連技術とのつながり
- [[機械学習の基礎]] — 学習の目的は暗記ではなく汎化
- [[モデル評価と指標]] — 過学習は未知データでの評価によって検出する
- [[ニューラルネットワーク]] — ドロップアウトや正則化を適用する対象
- [[ディープラーニング]] — 表現力が高いぶん過学習対策が必須になる
Q: 過学習の状態を正しく説明しているのはどれ?
- [x] 訓練データでは非常に良い成績だが、未知のデータで成績が悪い
- [ ] 訓練データでも未知のデータでも成績が悪い
- [ ] 学習に時間がかかりすぎて終わらない
解説: 訓練データへの当てはめが行きすぎ、汎化性能を失った状態が過学習です。両方悪い場合は未学習です。
Q: 過学習に気づくために必要なことはどれ?
- [ ] 訓練データのスコアだけを注意深く見る
- [x] 学習に使っていない検証データのスコアも一緒に見る
- [ ] 学習時間を計測する
解説: 訓練スコアだけ上がり検証スコアが下がる、という乖離で過学習を検出します。
Q: 過学習の対策として挙げられていないものはどれ?
- [ ] ドロップアウト
- [ ] 早期終了
- [x] 訓練データとテストデータを混ぜて学習させる
解説: データを混ぜると未知データでの性能が測れなくなり、過学習の検出自体ができなくなります。