過学習Overfitting

練習問題の答えだけ覚えて新しい問題が解けない状態

ポイント
  • 過学習は、AIが練習データの答えをまるごと覚えて、初めて見るデータの前で崩れてしまう状態です。
  • ですからデータを三つに分けます。学ぶ問題集が訓練データ、途中の小テストが検証データ、最後の試験用紙がテストデータです。
  • 訓練の誤差は下がり続けるのに検証の誤差がまた上がり始める地点が、丸暗記が始まった合図です。
  • モデルがデータに比べて複雑すぎるとき、データが少ないとき、同じデータをくり返し見すぎたときに起きます。
  • 早期終了・正則化・ドロップアウト・データ拡張で防ぎます。目標は訓練の点数ではなく、初めて見るデータでも通用する汎化です。
目次

1たとえで理解する

過去問題集を答えまで丸暗記した場合を思い浮かべてください。問題集の中では、番号を見ただけで答えが出ます。3番は2番、7番は4番。回を重ねるほど誤りの数は0に近づき、自信も一緒に上がります。ところが試験会場で条件が一つだけ変わった問題に出会うと、手も足も出ません。問題を解く原理の代わりに、問題と答えの組を覚えていたからです。**覚えたことと理解したことは、問題集の中では区別がつきません。**問題集を閉じて、初めて見る問題を差し出してはじめて分かれます。AIの過学習は、まさにこの状態です。練習に使ったデータではほぼ満点なのに、初めて見るデータの前で点数がすとんと落ちます。

2くわしく

問題集、小テスト、試験用紙

AIを学習させるとき、持っているデータを一つのかたまりのまま使いません。だいたい8対1対1の割合で三つに分けます。訓練データは、モデルが実際に見て学ぶ問題集です。検証データは学習の途中で受ける小テストです。いつ止めるか、層をいくつ積むかといった決定は、この点数を見て下します。テストデータは、すべて終わったあとに一度だけ取り出す試験用紙です。

なぜわざわざこう分けるのでしょうか。訓練データで採点するのは、模範解答を開いたまま採点するのと同じだからです。丸暗記したモデルでも満点が出ます。ところが検証データだけを見ながら設定を何十回も直していると、今度は開発者のほうが検証データに合わせてモデルを作り込んでしまいます。ですから、最後まで一度も見ていない試験用紙を別に残しておきます。

点数が分かれる瞬間

学習が進むあいだ、訓練の誤差と検証の誤差を並べて描いてみると、過学習が目に見えます。誤差はまちがいの度合いです。はじめは二つとも仲良く下がっていきます。モデルが本物の規則を学んでいるということです。

そのうち、ある地点で分かれます。訓練の誤差は底へ向かって下がり続けるのに、検証の誤差だけがそっと向きを変えて上がり始めます。ここからモデルは、規則ではなく訓練データにしかない偶然の特徴を学んでいます。二本の線が開き始めた幅が、そのまま過学習の大きさです。

なぜ覚えるほうへ傾くのでしょうか

一つ目は、モデルがデータに比べて複雑すぎるときです。調節できる値が何百万個もあるのに例が数百枚しかなければ、共通の規則を探すより例を一つずつしまい込むほうが、誤差を下げる近道になります。

二つ目は、データが少ないか、片方に偏っているときです。学習に使った猫の写真がすべてソファの上で撮られていたら、モデルはソファの模様まで猫の条件として覚えます。芝生に座った猫に出会うと自信をなくします。

三つ目は、同じデータを長くくり返して見るときです。はじめの数周は実力がぐんぐん伸びます。そのあとは、写真に混じったしみや照明のような雑音まで規則として受け入れ始めます。

覚えさせないための四つの方法

早期終了は、検証の点数がそれ以上良くならなければ学習をその場で止める方法です。二本の線が分かれる地点が、ちょうど止まる場所です。正則化は、特定の値が大きくなりすぎたら罰点を与えて、モデルが一つの手がかりだけに大きく寄りかからないよう抑えます。

ドロップアウトは、学習のたびにニューロンの一部をでたらめに切ってしまいます。どのニューロンが抜けるかわからないので、特定のニューロン一つに答えを預けて覚えておくことができません。データ拡張は、写真を裏返し、回し、明るさを変えて問題集そのものを増やします。もちろんいちばん確かなのは、新しいデータをもっと集めることです。

反対側の失敗と本当の目標

反対の方向に倒れることもあります。モデルが単純すぎて訓練データすら当てられない状態を、学習不足といいます。このときは訓練の点数からして低いので、見分けるのは簡単です。もっと大きくするか、もっと長く学習させれば直ります。

良いモデルは、この二つのあいだのどこかにあります。訓練の点数と検証の点数が並んで高い地点です。私たちが欲しいのは問題集をうまく解く力ではなく、初めて見る問題を解く力です。その力を汎化と呼びます。

3もう少し正確に

過学習(Overfitting)は、モデルが訓練データの雑音まで学んでしまい、訓練の誤差は低いのに初めて見るデータの誤差は高くなった状態です。この二つの差を汎化ギャップと呼びます。訓練の点数が高いこと自体は欠点ではなく、ギャップが開くことが問題です。ですからこのギャップを測るには、学習に一度も使っていないデータが必ず要ります。

たとえとずれるところもあります。人は覚えようと決心しますが、モデルにそうした意図はありません。誤差を下げよという指示に従っているだけで、与えられた条件のもとでは丸暗記が誤差を下げる近道になるため、そちらへ流れていくだけです。もう一つ、とても大きなモデルでは、パラメータを増やし続けると検証の性能が悪くなってからまた良くなる二重降下という現象が観察されることもあります。過学習はモデルが大きければ必ずかかる呪いではなく、モデルの大きさとデータの量と学習時間のあいだの、釣り合いの問題です。

4やってみる

5よくある誤解

  • 訓練の正解率が高いほど良いモデルだと思われがちですが、実際は訓練の点数と検証の点数の差が大きいほど、過学習を疑うべきです。

  • 長く学習させるほど賢くなると思われがちですが、実際はある地点を超えると雑音まで覚えてしまい、初めて見るデータでの性能がかえって落ちます。

  • データをもっと集めれば必ず解決すると思われがちですが、実際は新しく集めたデータが既存のデータと似ているだけでは役に立ちません。量とともに多様さが増える必要があります。

7ひとこと要約

つまり過学習はAIが練習問題の答えを覚えてしまった状態で、初めて見る問題で途中途中テストしながら止め時を知ることが解決策です。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02