本文へ移動

ITパスポート試験

かがくしゅう

過学習

Overfitting

過学習は、モデルが訓練データに対しては小さな誤差で予測できるのに、学習に使っていない新しいデータでの誤差(テスト誤差)との差が大きくなりすぎた状態です。多様な関数に当てはまる能力(容量)が大きすぎるモデルが、新しいデータでは役に立たない訓練データ特有の性質まで覚え込むことで起こります。

詳しい説明

訓練データでは誤差が小さいのに新しいデータでは大きい状態

過学習(overfitting、オーバーフィッティング)は、機械学習のモデルが、学習に使ったデータ(訓練データ)に対しては小さな誤差で予測できるのに、学習に使っていない新しいデータに対しては誤差が大きくなってしまう状態を指します。イアン・グッドフェロー(Ian Goodfellow)、ヨシュア・ベンジオ(Yoshua Bengio)、アーロン・クールヴィル(Aaron Courville)による教科書「Deep Learning」(2016年)の第5章は、過学習を「訓練誤差とテスト誤差の差が大きすぎるときに起こる」ものと定義しています。

この定義は、誤差の大きさそのものではなく、2つの誤差の差を見ています。訓練誤差が小さいというだけでは、過学習とは言えません。訓練誤差が小さく、新しいデータでの誤差がそれより大きく離れているときに、過学習と呼びます。

訓練誤差とテスト誤差という2つの物差し

訓練誤差は、訓練データに対してモデルが出す誤差です。学習では、この訓練誤差が小さくなるようにパラメータ(重みなど、学習によって調整される値)を動かします。

ところが、機械学習で本当に小さくしたいのは、実際に使う場面で出会う新しい入力に対する誤差です。教科書はこれを汎化誤差(テスト誤差とも呼びます)と呼び、「新しい入力に対する誤差の期待値」と定義しています。ここでの期待値は、実際の運用で出会うと想定される入力の分布にわたってとったものです。汎化誤差は直接には測れないので、訓練データとは別に集めたデータ(テストデータ)での成績で見積もります。

線形回帰(入力の一次式で数値を予測するモデル)を例に、教科書は訓練誤差とテスト誤差を次のように書いています。

左が訓練誤差、右がテスト誤差です。 は学習で決めた重み、 は入力を並べた行列、 は正解の値を並べたもの、 はデータの件数です。どちらも予測と正解の差を二乗して平均した値で、違うのはどのデータで計算するかだけです。学習の手続きが直接小さくできるのは左の式だけで、右の式は学習中には見えません。

訓練データしか見ていないのにテストデータでの成績を論じられるのは、教科書が「i.i.d.仮定」と呼ぶ前提を置くからです。これは、各データが互いに独立に生成され、訓練データとテストデータが同じ確率分布から取り出されている、という仮定です。教科書は、この前提のもとで訓練誤差とテスト誤差の関係を数学的に調べられると説明しています。

過少適合と過学習の違い

教科書は、機械学習の手法がどれだけうまく働くかは次の2つの能力で決まるとしています。1つ目は訓練誤差を小さくすること、2つ目は訓練誤差とテスト誤差の差を小さくすることです。1つ目ができない状態を過少適合(underfitting)、2つ目ができない状態を過学習と呼びます。

見るところ過少適合過学習
教科書の定義訓練データに対して十分に小さな誤差を出せない訓練誤差とテスト誤差の差が大きすぎる
訓練誤差大きい小さい
訓練誤差とテスト誤差の差定義では問わない大きすぎる
起こりやすいモデル容量が小さすぎるモデル容量が大きすぎるモデル

表の最後の行にある容量については、次の節で説明します。

容量が大きすぎると起きる理由

教科書は、モデルが過少適合と過学習のどちらに寄りやすいかは、モデルの容量(capacity)を変えることで制御できるとしています。容量とは、おおまかには「多様な関数に当てはまる能力」のことです。容量が小さいモデルは、訓練データに当てはめることにさえ苦労することがあります。容量が大きいモデルは、テストデータでは役に立たない訓練データ特有の性質まで覚え込んでしまい、過学習を起こすことがあります。

教科書はこれを多項式の例で示しています。 をランダムに選び、 を二次関数で計算して作ったデータ(本当の関係が二次関数だと分かっている合成データ)に、3つのモデルを当てはめます。

当てはめたモデル訓練データに対する様子教科書の判定
一次関数データにある曲がり具合をとらえられない過少適合
二次関数見たことのない点にもよく当てはまる過少適合も過学習もほとんど無い
9次の多項式すべての訓練データの点をちょうど通るが、本当の関数には無い深い谷や急な上昇がある過学習

教科書は、9次の多項式が過学習する理由を次のように説明しています。9次の多項式は、正しい二次関数を表すこともできます。しかし、パラメータの数が訓練データの件数より多いので、訓練データの点をちょうど通る関数を無数に表せてしまいます。まったく違う解がこれほど多くある中から、新しいデータにもよく当てはまる解を選べる見込みは小さい、というのが教科書の説明です。二次関数のモデルは課題の本当の構造にちょうど合っているので、新しいデータにもよく当てはまります。

容量を増やしたときの2つの誤差の動き

教科書は、容量と誤差の典型的な関係を図で示しています。容量が小さい左端では、訓練誤差も汎化誤差もどちらも大きく、ここが過少適合の領域です。容量を増やしていくと訓練誤差は下がりますが、訓練誤差と汎化誤差の差は広がっていきます。やがて差の広がりが訓練誤差の下がり方を上回り、容量が最適な容量を超えた過学習の領域に入ります。

この関係から、訓練誤差だけを見ていても過学習には気づけないことが分かります。容量を増やせば訓練誤差は下がり続けるので、訓練誤差のグラフは過学習の領域に入ってからもよくなっているように見えるからです。過学習を見つけるには、学習に使っていないデータでの誤差を並べて見る必要があります。

訓練データの量と差の関係

誤差の差は、容量だけでなく訓練データの件数とも関係します。教科書によると、統計的学習理論(学習の性能を確率と統計の道具で分析する分野)の結果として、訓練誤差と汎化誤差の差の上限は、容量が大きくなるほど大きくなり、訓練データの件数が増えるほど小さくなることが示されています。ただし教科書は、この上限は緩すぎることが多く、深層学習のモデルでは容量を求めること自体が難しいため、深層学習の実務ではほとんど使われないとも書いています。

教科書は、訓練データの件数を変えた実験も示しています。二次関数のモデルでは、訓練データが増えるほど訓練誤差は上がります。データが多いほど全部に当てはめるのが難しくなるからです。同時にテスト誤差は下がります。訓練データと矛盾しない誤った仮説が減るからです。教科書はまた、期待される汎化誤差は訓練データの件数が増えても増えることはないと述べています。

容量が最適でも、訓練誤差と汎化誤差の差が大きく残ることがあります。教科書は、その場合は訓練データをさらに集めることで差を縮められる可能性があると書いています。

容量を調整する正則化

容量は、モデルの種類を選ぶことだけで決まるわけではありません。教科書は、学習アルゴリズムに加える変更のうち、訓練誤差ではなく汎化誤差を減らすことを意図したものを正則化(regularization)と呼んでいます。

教科書が挙げる例は、線形回帰に重み減衰(weight decay)を加えたものです。訓練データでの平均二乗誤差に、重みの二乗の和を小さくしたいという好みを表す項を足して、その合計を最小にします。

は訓練データでの平均二乗誤差、 は重みの二乗の和、 は好みの強さを表す値で、学習の前に決めておきます。 なら好みは何も加わらず、 を大きくするほど重みは小さくなるよう強く押されます。

教科書は、さきほどの二次関数から作ったデータに9次の多項式だけを当てはめ、 を変えた結果を示しています。 がとても大きいと、傾きの無い定数の関数しか学べず、過少適合になります。 が中くらいだと、正しい大まかな形の曲線が得られます。 が0に近いと、9次の多項式は大きく過学習します。モデルは同じ9次の多項式のままでも、 の大きさで過少適合と過学習のどちらに寄るかを調整できるということです。

過学習を見つけるための検証データ

過学習かどうかを判断したり、 のような値(ハイパーパラメータ。学習の前に人が決める設定値)を選んだりするには、学習に使っていないデータでの誤差が必要です。教科書は、このために訓練データを2つに分け、片方でパラメータを学習し、もう片方を検証データ(validation set)として使うと説明しています。検証データは、学習中または学習後に汎化誤差を見積もり、ハイパーパラメータを決め直すために使います。教科書によると、訓練データのおよそ80%を学習に、20%を検証に使うのが典型です。

ここで教科書は、テストデータをモデルに関する選択に一切使ってはいけないと強調しています。ハイパーパラメータの選択も含みます。そのため検証データは、テストデータからではなく訓練データから作ります。また、検証データはハイパーパラメータを選ぶのに使われているので、検証データでの誤差は汎化誤差を低めに見積もることになります。ただし、低めに見積もる程度は、訓練誤差よりは小さいのが普通です。すべての選択を終えたあとに、テストデータで汎化誤差を見積もります。

試験で問われること

ITパスポート試験

  • 過学習は訓練データに特化しすぎて未知のデータに対応できなくなる現象であることを押さえる
  • 未知のデータに対する汎用性が低下することを理解する

最終更新日: 2026/09/23