過学習と汎化
訓練データを“覚えすぎて”未知データで外す現象が過学習。本当に欲しいのは、見たことのないデータでも当たる「汎化」性能。
- 1.過学習(overfitting)=訓練データに合わせすぎて、未知データでは精度が落ちる状態。逆に単純すぎて訓練データにも合わないのが未学習。
- 2.本当に測りたいのは「初見のデータでの性能(汎化)」。だから訓練・検証・テストにデータを分け、テストは最後まで見ない。
- 3.対策の定番は 正則化・ドロップアウト・データ拡張・早期終了。狙いはどれも「モデルを必要以上に賢く(複雑に)させない」こと。
機械学習の目的は、過去のデータを暗記することではありません。まだ見ていないデータに対してうまく予測することです。訓練データでの成績がどれだけ良くても、本番(未知データ)で外れたら意味がない——この当たり前を、技術的にどう担保するかが今回のテーマです。
なぜ「訓練データの正解率」を信じてはいけないか
モデルは、与えられたデータに合うようパラメータを調整します。表現力(=複雑さ)が高いモデルなら、訓練データをほぼ完璧に説明することすら可能です。ところがそのとき、モデルはデータの「本質的な規則」だけでなく、たまたま紛れ込んだノイズや偶然の偏りまで覚え込んでしまいます。
例:テストの点数を「勉強時間」から予測したい
本当の関係(ざっくり): 点数 ≒ 勉強時間 × 8 + 30
手元のデータ: 実際は測定ゆれ(その日の体調・運)でブレている
× 過学習したモデル:データ点を1つ残らず通る、ぐにゃぐにゃの曲線
→ 手元のデータには完璧。でも新しい人の点数は当たらない
○ ちょうど良いモデル:おおまかな右肩上がりの傾向だけを捉える
→ 個々はズレても、新しい人にもそこそこ当たる
訓練データを通り過ぎる曲線がぐにゃぐにゃなほど、その曲線は「この生徒たちの偶然」に引きずられています。暗記の精度が上がるほど、応用が利かなくなるわけです。
過学習と未学習(アンダーフィッティング)
過学習の反対が未学習(アンダーフィッティング)です。モデルが単純すぎて、訓練データの傾向すら捉えきれていない状態を指します。ちょうど良い地点は、そのあいだにあります。
| 未学習 (underfitting) | ちょうど良い | 過学習 (overfitting) | |
|---|---|---|---|
| モデルの複雑さ | 単純すぎる | 適切 | 複雑すぎる |
| 訓練データの誤差 | 大きい | 小さい | とても小さい(ほぼ0) |
| 未知データの誤差 | 大きい | 小さい | 大きい |
| たとえ | 勉強不足で全滅 | 要点を理解 | 過去問を丸暗記して応用不可 |
| 主な原因 | 表現力不足・学習不足 | — | 表現力過多・データ不足・回しすぎ |
見るべきは「訓練の誤差と、未知データの誤差のギャップ」です。両方とも悪ければ未学習、訓練だけ良くて未知データが悪ければ過学習、というのが切り分けの基本になります。
学習を進めるうちに、訓練データの精度は上がり続けるのに検証データの精度が途中から下がり始める——この「乖離が開く瞬間」が過学習の合図です。訓練の数字だけ見ていると気づけません。
汎化を測るための「データ分割」
未知データでの性能を学習中に推し量るため、手元のデータを役割ごとに分けます。これが訓練 / 検証 / テストの3分割です。
| データセット | 役割 | 学習に使う? | イメージ |
|---|---|---|---|
| 訓練 (train) | モデルのパラメータを学習する | 使う | 授業・問題演習 |
| 検証 (validation) | ハイパーパラメータ調整・過学習の監視 | 間接的に使う | 模試(手応えを見る) |
| テスト (test) | 最終的な汎化性能を一度だけ測る | 使わない | 本番の入試 |
ポイントは、テストデータは最後の評価まで絶対に触らないこと。チューニングの過程でテストを覗くと、知らぬ間にテストに合わせ込んでしまい(=リークし)、「本番の難易度」を正しく測れなくなります。
検証データを見ながら何十通りも設定を試すと、今度は検証データに対して過学習します。だからこそ、最終判定は手をつけていないテストで行います。データが少ないときは、分け方を変えて何度も評価する**交差検証(クロスバリデーション)**が有効です。
バイアスとバリアンス:過学習を読み解く2つの軸
過学習・未学習は、バイアスとバリアンスという2つの誤差で説明できます。射的の的に例えると直感的です。
- バイアス(偏り):的の中心から系統的にズレる量。高いと未学習——モデルが単純すぎて的を外す。
- バリアンス(ばらつき):データが少し変わると予測が大きく暴れる度合い。高いと過学習——データのノイズに過敏に反応する。
射的の的でイメージ
高バイアス・低バリアンス … 端っこに固まる → 未学習(一貫して外す)
低バイアス・高バリアンス … 中心まわりに散らばる → 過学習(運次第で当たり外れ)
低バイアス・低バリアンス … 中心に集まる → 理想
両者は基本的にトレードオフの関係にあります。モデルを複雑にするとバイアスは下がりますが、バリアンスは上がる。この綱引きのちょうど良い点を探すのが、過学習対策の本質です。
過学習を抑える定番の手立て
打ち手は色々ありますが、狙いはほぼ共通で「モデルを必要以上に複雑にさせない/一部に頼り切らせない」ことです。代表的なものを並べます。
| 手法 | やること | 効くしくみ |
|---|---|---|
| 正則化 (L1/L2) | パラメータが大きくなりすぎると罰則を与える | モデルを“なめらか”に保ち、極端な暗記を抑える |
| ドロップアウト | 学習のたびに一部のニューロンをランダムに無効化 | 特定の経路への依存を防ぎ、頑健な特徴を学ばせる |
| データ拡張 | 回転・反転・ノイズ付与などで訓練データを水増し | “見たことのある状況”を増やし、丸暗記を困難にする |
| 早期終了 (early stopping) | 検証精度が悪化し始めたら学習を打ち切る | 暗記モードに入る直前で止める |
| データを増やす | そもそも訓練データの量・多様性を増やす | ノイズの影響が相対的に薄まり、本質が浮かぶ |
| モデルを小さくする | 層・パラメータ数を減らす | 暗記する“器”自体を小さくする |
凝った正則化を入れる前に、データを増やす・水増しするのが最も素直で効きます。学習を回しすぎているだけのことも多く、その場合は早期終了が手軽で強力。複雑な対策は、シンプルな手を打った後で十分です。
正則化を少しだけ言葉で補うと、「予測の誤差を小さくする」目標に「パラメータを大きくしすぎない」という second の目標を足すイメージです。L2 正則化(重み減衰)は重みを全体的に小さく丸め、L1 正則化は不要な重みをゼロに寄せて実質的に特徴を選別します。
よくある誤解
訓練データでの精度が 100% に張り付いたら、まず疑うべきは過学習やデータリーク(テスト相当の情報が訓練に混入)です。未知データでの数字を見るまで、性能を判断してはいけません。「テストでも 100%」なら、今度は評価データが簡単すぎる/漏れている可能性を疑います。
もう一つ。過学習は「ディープラーニング特有の問題」ではありません。あらゆる機械学習モデルに共通する、汎化をめぐる普遍的なテーマです(→ 機械学習、深掘りは ディープラーニング や ニューラルネットワーク を参照)。大規模言語モデルでも、特定のデータに合わせ込む ファインチューニング の場面で同じ配慮が要ります。
まとめ
- 目的は訓練データの暗記ではなく、未知データで当てる=汎化。
- 訓練だけ良く未知データで悪いのが過学習、両方悪いのが未学習。ギャップを見る。
- だから 訓練 / 検証 / テストに分け、テストは最後まで触らない。
- 過学習=高バリアンス、未学習=高バイアス。両者のちょうど良い点を探す。
- 対策は 正則化・ドロップアウト・データ拡張・早期終了など。まずはデータを増やす・回しすぎないから。
AI/機械学習 Article
過学習と汎化を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
機械学習
比較で見る軸
難易度: intermediate / カテゴリ: AI/機械学習 / タグ数: 4
導入後に効く点
本当に測りたいのは「初見のデータでの性能(汎化)」。だから訓練・検証・テストにデータを分け、テストは最後まで見ない。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- AI/機械学習
- タグ数
- 4
判断チェックリスト
- 自社の用途が「機械学習 / 過学習」に近いか確認する。
- 強みである「過学習(overfitting)=訓練データに合わせすぎて、未知データでは精度が落ちる状態。逆に単純すぎて訓練データにも合わないのが未学習。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。