学習曲線シミュレーター 戻る
機械学習

学習曲線シミュレーター — 過学習・学習不足の診断

機械学習モデルが「過学習」しているのか「学習不足」なのかを、学習曲線(学習データ量に対する学習誤差と検証誤差のグラフ)で診断するツールです。モデルの複雑さ・データ数・ノイズ・正則化を変え、2本の曲線が収束するかどうかをリアルタイムで観察できます。

パラメータ設定
真の関数
データを生成する元の関数 f(x)
モデルの複雑さ(多項式次数)
フィットする多項式の次数。大きいほど複雑
学習データ数
学習曲線の右端=最大データ量
データのノイズ標準偏差
観測値に乗るガウスノイズの大きさ σ
正則化の強さ λ
リッジ正則化。大きいほど過学習を抑える
計算結果
学習誤差(最終)
検証誤差(最終)
汎化ギャップ
診断
推奨対策
モデル複雑さ
データとモデルのフィット

太い水色の曲線が真の関数、点が学習データ、橙色の曲線がフィットしたモデル。過学習するとモデルがノイズを縫って波打ち、学習不足だと真の曲線に追従できません。

学習曲線 — 学習データ数に対する誤差
検証誤差 vs モデル複雑さ(U字カーブ)
理論・主要公式

$$E_{val}\;=\;\underbrace{\text{bias}^2}_{\text{学習不足で大}}+\underbrace{\text{variance}}_{\text{過学習で大}}+\sigma^2$$

検証誤差はバイアスの2乗・バリアンス・既約誤差 σ² の和に分解されます。学習誤差と検証誤差のギャップが小さいのに誤差が高ければ学習不足、ギャップが大きければ過学習のサインです。

$$\hat{w}\;=\;\big(X^{\!\top}X+\lambda I\big)^{-1}X^{\!\top}y$$

リッジ正則化付き最小二乗の正規方程式。X はヴァンデルモンド計画行列、λ は正則化の強さ。λ を上げると重み w が小さく抑えられ、過学習が緩和されます。

$$\text{MSE}\;=\;\frac{1}{m}\sum_{i=1}^{m}\big(\hat{f}(x_i)-y_i\big)^2$$

学習誤差は学習に使った m 点で、検証誤差は固定の検証データで評価した平均二乗誤差です。

学習曲線とは

🙋
「学習曲線」ってよく聞くんですけど、結局なにを描いたグラフなんですか?
🎓
ざっくり言うと「データを増やしたとき、モデルの誤差がどう変わるか」を描いたグラフだよ。横軸が学習に使ったデータの数、縦軸が誤差。線は2本あって、ひとつは学習データそのものでの誤差、もうひとつは別に取っておいた検証データでの誤差だ。データが少ないうちはモデルが学習データを丸暗記できるから学習誤差はほぼ0、でも検証誤差は大きい。データを増やすと学習誤差は少し上がり、検証誤差は下がってくる。この2本の動きを見るのが学習曲線なんだ。
🙋
2本の線を見ると、何が分かるんですか?
🎓
これがすごく便利なんだ。応用機械学習でいちばん役に立つ診断ツール、と言う人もいる。ポイントは「2本の最終的な高さ」と「2本のすき間(ギャップ)」。両方とも高い位置でぴったり重なっていたら、モデルが単純すぎて真の関係を表せていない——学習不足だ。逆に学習誤差はほぼ0なのに検証誤差だけ高くて、すき間がいつまでも閉じないなら——過学習。モデルがノイズまで暗記している状態だね。
🙋
学習不足のときって、データをもっと集めれば直りそうな気がするんですけど…?
🎓
そこが学習曲線を見る最大のメリットなんだ。学習不足(高バイアス)だと、2本の線はもう「低い場所」じゃなく「高い場所」で重なってプラトーに達している。データをいくら足しても、両方の線はその高い天井に張り付いたまま。つまりデータ集めは無駄になる。直したいなら、モデルを複雑にする・特徴量を足す・正則化を弱める、のどれかだ。例えば住宅価格予測で、面積だけで線形回帰したら精度が頭打ち——これは典型的な高バイアスで、立地や築年数といった特徴量を足すのが正解なんだよ。
🙋
じゃあ逆に、過学習のときはデータを増やすのが効くんですね。次数を15まで上げると検証誤差がはね上がります。
🎓
そう。過学習(高バリアンス)はデータ不足が効いていることが多いから、データを増やすと検証誤差が下がってギャップが閉じてくる。それ以外には、正則化 λ を強める、いっそモデルの次数を下げる、という手もある。実際このツールで次数15・データ20点にすると、学習誤差はほぼ0なのに検証誤差が爆発する——15次多項式が20点のノイズを完全に縫っているんだ。そこからデータを増やすと、多項式が暴れる余地がなくなって落ち着いてくるよ。
🙋
「検証誤差 vs モデル複雑さ」のグラフがU字になってますね。これは何を意味してるんですか?
🎓
それがバイアス・バリアンスのトレードオフそのものだよ。複雑さが小さい左側はバイアスが大きくて誤差が高い=学習不足。複雑さを上げると検証誤差が下がっていって、ある谷でいちばん良くなる。さらに上げるとバリアンスが増えて誤差がまた上がる=過学習。だからモデル選択って「U字の谷を探す作業」なんだ。実務では交差検証でこの谷を数値的に見つける。谷の位置がちょうど良い複雑さで、それより右はノイズを暗記し始めているサインだね。

よくある質問

学習曲線とは、学習データの量(横軸)に対して学習誤差と検証誤差(縦軸)をプロットしたグラフです。データを増やしていくと、学習誤差はほぼ0から上昇してプラトーに近づき、検証誤差は高い値から下降してプラトーに近づきます。応用機械学習で最も役立つ診断ツールと言われるのは、この2本の曲線の最終的な高さとギャップを見るだけで、モデルが学習不足なのか過学習なのか、データを増やせば改善するのかが一目で分かるからです。
高バイアスは、学習誤差と検証誤差がどちらも高い水準で、その差(汎化ギャップ)が小さい状態です。曲線がほぼ重なったまま高止まりします。これはモデルが単純すぎて真の関係を表現できていないサインで、データを増やしても改善しません。高バリアンスは、学習誤差はとても小さいのに検証誤差が大きく、ギャップが閉じない状態です。モデルが学習データのノイズを暗記してしまっています。本ツールはこの2つを自動で判定します。
いいえ、解決しません。高バイアスのモデルは、学習曲線の2本がすでに低い位置ではなく高い位置で重なってプラトーに達しています。データをさらに足しても両方の曲線はその高いプラトーに張り付いたままです。学習不足の対策は、モデルの複雑さを上げる(多項式次数を増やす)、特徴量を追加する、正則化を弱める、です。逆に過学習(高バリアンス)であれば、データを増やすことは有効な対策の一つになります。
過学習(高バリアンス)の対策は主に3つです。(1) 学習データを増やす——検証誤差が下がりギャップが閉じていきます。(2) 正則化を強める——本ツールの λ を上げると重みの大きさが抑えられ、ノイズへの過剰適合が緩和されます。(3) モデルを単純にする——多項式次数を下げます。「検証誤差 vs モデル複雑さ」のU字カーブで谷の位置を探すと、ちょうど良い複雑さが分かります。複雑さが谷より右に行くほど過学習が進みます。

実世界での応用

「データを増やすべきか」の意思決定:機械学習プロジェクトで最も高くつく判断のひとつが「もっとデータを集めるか、それともモデルを変えるか」です。データ収集には時間とコストがかかります。学習曲線を描けば、検証誤差がまだ下降中ならデータ追加が有効、すでに学習誤差と重なってプラトーに達しているならデータ追加は無駄、と即座に判断できます。やみくもにラベル付けを発注する前に、まず学習曲線を見るのが鉄則です。

モデル選択とハイパーパラメータ調整:「検証誤差 vs モデル複雑さ」のU字カーブは、決定木の深さ、ニューラルネットの層数・ユニット数、多項式の次数、正則化の強さなど、あらゆるハイパーパラメータ選択の縮図です。実務では交差検証でこの谷を数値的に探します。谷より単純側はバイアス過大、複雑側はバリアンス過大で、最良の汎化性能は谷で得られます。

ディープラーニングの学習診断:ニューラルネットの訓練でも、学習損失と検証損失を学習量(エポック数やデータ量)に対してプロットします。検証損失が下げ止まって上昇に転じたらそこが過学習の開始点で、early stopping(早期終了)の判断に使います。学習曲線は TensorBoard や Weights & Biases のような実験管理ツールで常時監視される、最も基本的な可視化です。

データ品質・リーク検出のサニティチェック:学習曲線が想定と大きく違う形になったら、データ側の異常を疑います。検証誤差が学習誤差より低い、あるいは両方が不自然に小さい場合はデータリーク(検証データの情報が学習に漏れている)の典型的なサインです。曲線の形そのものが、モデルだけでなくデータパイプラインのバグを映す鏡になります。

よくある誤解と注意点

まず多いのが、「学習誤差が小さいから良いモデルだ」という誤解です。学習誤差はモデルが学習データをどれだけ覚えたかを示すだけで、未知データへの性能とは別物です。15次多項式に20点を与えれば学習誤差はほぼ0になりますが、それは丸暗記の結果で、検証誤差はむしろ爆発します。評価すべきは常に検証誤差(汎化誤差)であり、学習誤差は単独では何の保証にもなりません。学習誤差と検証誤差は必ずセットで、ギャップごと見るのが正しい読み方です。

次に、「過学習も学習不足も、とりあえずデータを増やせばよい」という思い込み。データ追加が効くのは過学習(高バリアンス)の場合だけです。学習不足(高バイアス)のモデルは表現力そのものが足りないので、データを10倍にしても高いプラトーから動きません。学習曲線で2本がどこで重なっているか——低い位置か高い位置か——を確認せずにデータ収集に走ると、コストだけかかって精度が1ミリも上がらない、という失敗になります。診断を先に、対策は後です。

最後に、「検証データを何度も見てチューニングを繰り返すと、検証データに対して過学習する」という落とし穴。検証誤差を見ながらハイパーパラメータを延々と調整すると、検証データの偶然のクセに合わせ込んでしまい、本当の未知データでは性能が出ません。これを防ぐため、実務では学習・検証・テストの3分割にし、テストデータは最終評価の一度だけ使います。学習曲線も、検証データを使い込みすぎていないかという視点で読む必要があります。

使い方ガイド

  1. 多項式次数(degNum)を1~10の範囲で設定し、モデル複雑さを制御します
  2. 訓練データサイズ(sizeNum)を50~500サンプル間で変更し、データ量が汎化性能に与える影響を観察します
  3. ノイズレベル(noiseNum)と正則化係数ラムダ(lamNum)を調整し、訓練誤差と検証誤差の変化をリアルタイムで確認します
  4. 汎化ギャップ(検証誤差−訓練誤差)が0.05未満なら適切な学習状態、0.1以上なら過学習が発生しています

具体的な計算例

多項式次数6、訓練データ200サンプル、ノイズ標準偏差0.3、ラムダ0.01の条件下:訓練誤差MSE=0.018、検証誤差MSE=0.067、汎化ギャップ=0.049(良好)。次数を10に上げ、ラムダ=0.001に低下させると、訓練誤差MSE=0.006だが検証誤差MSE=0.156に悪化し、汎化ギャップ=0.15(過学習)と診断されます。ラムダを0.05に増加させると検証誤差MSE=0.074に改善されます。

実務での注意点