はじめに
機械学習モデルが訓練データでは高い成績を出すのに、初めて見るデータではうまく予測できないことがあります。学習を進めれば必ず性能がよくなるわけではありません。このような状態を理解する鍵が過学習です。
過学習とは、訓練データの細かな特徴まで覚え込み、未知のデータに対する予測性能が低下する状態です。この記事では、訓練と検証の結果をどう比較するか、なぜ起こるのか、改善するために何を見直せばよいかを整理します。
この記事で分かること
- 過学習が起きると訓練データと未知データで何が違うのか
- 訓練・検証データの成績から過学習の兆候を見分ける方法
- 正則化・モデルの簡略化・早期終了など、主な対策の考え方
過学習とは?
モデルは訓練データを使って、予測に役立つ規則性を学びます。しかし、訓練データにしか現れない偶然の特徴やノイズにまで合わせると、そのデータでは正しく予測できても、新しいデータには通用しにくくなります。これが過学習(オーバーフィッティング)です。
例えば、過去の顧客データから購入の有無を予測するモデルを考えます。訓練データの個々の顧客を覚えるような複雑な条件を作ると、訓練データの正解率だけは高くなるかもしれません。それでも、新しい顧客の予測が外れやすければ、モデルの目的を果たせません。
大切なのは、訓練データへの当てはまりと、未知のデータにも通用する性質(汎化性能)を区別することです。逆に、訓練データに対しても十分な規則性を学べず、訓練と検証の両方で成績が低い状態は、主に学習不足(アンダーフィッティング)を疑います。
過学習はどう見分ける?
過学習の兆候を調べる基本は、モデルを学習させたデータの成績と、学習に使っていない検証データの成績を比較することです。両方の成績が高いか、どの程度の差があるかを一緒に見ます。
例えば、同じ評価指標で測った場合の架空の結果を見てみましょう。
| 状態の例 | 訓練データの正解率 | 検証データの正解率 | 読み取り方 |
|---|---|---|---|
| 例A | 98% | 73% | 訓練だけ極端に高く、過学習を疑う |
| 例B | 87% | 85% | 差が小さく、検証でも良好。ただしこれだけで十分とは断定しない |
| 例C | 65% | 64% | 両方低く、学習不足などを疑う |
表1 数値は仕組みを説明するための架空例です。何%以上の差なら過学習、という共通の判定基準ではありません。
訓練の成績は上がり続けているのに、検証の成績が改善しない、または悪化する場合も注意が必要です。誤差の大きさを表す「損失」を追うなら、訓練損失が下がる一方で検証損失が上がり始める形は、過学習を示す典型的な兆候です。
ただし、訓練と検証でデータの性質が大きく違う場合や、評価データが少なすぎる場合にも差が出ます。成績差だけで原因を断定せず、データの分け方や代表性も確認することが重要です。正解率以外の指標を用いる場合も、訓練・検証の双方で同じ指標と評価条件を使います。
過学習はなぜ起こる?
主な原因の一つは、モデルがデータの量や問題の複雑さに対して必要以上に複雑になっていることです。複雑なモデルは細かな規則を表現できますが、その分、訓練データ固有の偶然にも合わせやすくなります。
また、訓練データが少ない、実際の利用場面を十分に代表していない、ノイズや偏りが多いといった状況でも、未知のデータで期待した性能が出ないことがあります。学習を長く続ければ解決するとは限らず、訓練データだけを見て調整を重ねると、かえって過学習が進む場合があります。
これらは重なって起こることもあります。まず検証結果とデータの状態を調べ、モデル側の複雑さを調整すべきか、データ側を見直すべきかを分けて考えます。
過学習を防ぐ・軽減する方法
過学習への対策は、訓練データの成績だけを高くすることではありません。未知のデータでも使える規則性を学べるようにすることを目標にします。
モデルを必要以上に複雑にしない
決定木なら木の深さを制限するなど、モデルが表現できる条件を適度に抑えます。複雑さを減らすと訓練データの成績は少し下がるかもしれませんが、検証データで改善することがあります。ただし、単純にしすぎると学習不足になるため、検証結果を見ながら調整します。
正則化を使う
正則化(regularization)は、学習時にモデルの複雑さへ制約やペナルティを与え、訓練データへの過度な適応を抑える考え方です。例えばL2正則化では、重みが大きくなりすぎることにペナルティを与えます。
似た言葉の正規化・標準化は、主に入力データの値の範囲や尺度を整える処理です。目的も仕組みも正則化とは異なるため、同じものとして扱わないようにします。正則化も強すぎれば学習不足につながるので、強さの調整が必要です。
学習の終了時点やデータ量を見直す
学習回数を増やすほど検証結果がよくなるとは限りません。検証損失が悪化し始めたら学習を止める早期終了(early stopping)は、過学習を抑えるための一つの方法です。使えるデータが限られる場合には、代表性を保った学習データを増やすことも選択肢になります。
どの対策が効果的かはモデルやデータによって異なります。対策前後を同じ検証条件で比較し、検証の成績が改善しているかを確かめましょう。
交差検証をすれば過学習は防げる?
交差検証はデータの検証部分を入れ替え、モデルの性能を複数回確かめる評価方法です。特定の一度の分割に依存せずモデルや設定を比較できますが、交差検証を実施するだけで、過学習が自動的になくなるわけではありません。
例えば複雑さの異なるモデルを交差検証で比べ、未知のデータに対してよさそうな設定を選ぶことはできます。それでも最終的な性能は、モデルの複雑さ、データの質、学習方法に依存します。さらに、同じ検証結果を何度も見ながら調整すると、検証データにまで合わせ込みすぎる場合があります。
学習・検証・最終テストデータの分け方や交差検証の詳しい手順は、関連記事の「ホールドアウト法と交差検証の違い」で解説しています。本記事では、交差検証は対策を選ぶための判断材料であり、対策そのものとは限らないと押さえておけば十分です。
まとめ
過学習とは、訓練データにはよく合う一方、未知のデータへの予測がうまくいかなくなる状態です。まず訓練と検証の成績を比較し、大きな差や検証損失の悪化がないかを調べます。ただし、データの偏りなどでも差は生じるため、原因を一つに決めつけないことが大切です。
過学習が疑われる場合は、モデルの簡略化、正則化、早期終了、適切なデータの追加などを検討します。訓練での点数を追うのではなく、検証で確かめながら未知データへの性能を改善することが基本です。