← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:学習問題の定式化(仮説・損失・経験リスク) | 数理:点推定(推定量の良さ:不偏性・一致性・有効性・十分性)(統計・推定量のMSE分解)

要点(BLUF)

1. 汎化誤差とは

訓練データに当てはめた誤差(訓練誤差)ではなく、まだ見ていないデータでの平均的な誤差を汎化誤差と呼びます(=期待リスク R(f^)R(\hat f)学習問題の定式化(仮説・損失・経験リスク))。学習の目的はこれを下げることです。

データが y=g(x)+εy = g(x) + \varepsilongg は真の関数、ε\varepsilon はノイズで E[ε]=0, Var(ε)=σ2\mathbb{E}[\varepsilon]=0,\ \mathrm{Var}(\varepsilon)=\sigma^2)で生成されるとします。訓練データ DD はランダムなので、そこから学んだ予測器 f^\hat f もランダムです。

2. バイアスバリアンス分解(導出)

固定した点 xx での、データとモデルのランダム性にわたる期待二乗誤差を考えます:

E[(yf^(x))2]\mathbb{E}\big[(y - \hat f(x))^2\big]

予測の平均を fˉ(x)=ED[f^(x)]\bar f(x) = \mathbb{E}_D[\hat f(x)] と置きます。y=g(x)+εy = g(x) + \varepsilon を代入し、ε\varepsilonf^\hat f が独立・E[ε]=0\mathbb{E}[\varepsilon]=0 を使うと、

E[(yf^(x))2]=σ2既約誤差+(fˉ(x)g(x))2バイアス2+ED[(f^(x)fˉ(x))2]バリアンス\mathbb{E}\big[(y - \hat f(x))^2\big] = \underbrace{\sigma^2}_{\text{既約誤差}} + \underbrace{\big(\bar f(x) - g(x)\big)^2}_{\text{バイアス}^2} + \underbrace{\mathbb{E}_D\big[(\hat f(x) - \bar f(x))^2\big]}_{\text{バリアンス}}

導出の骨子:(yf^)2=(ε+(gfˉ)+(fˉf^))2(y-\hat f)^2 = (\varepsilon + (g-\bar f) + (\bar f - \hat f))^2 と分けて期待値を取ると、交差項がすべて 0 になり(E[ε]=0\mathbb{E}[\varepsilon]=0fˉf^\bar f - \hat f の期待値が 0、εf^\varepsilon \perp \hat f)、3つの二乗項だけが残ります。

要するに:どんなに頑張っても消せないノイズ σ2\sigma^2 に加え、「平均的にズレているか(バイアス)」と「データ次第で暴れるか(バリアンス)」の2つが誤差を作ります。

これは統計の「推定量の平均二乗誤差 = バイアス² + 分散」(→ 点推定(推定量の良さ:不偏性・一致性・有効性・十分性))と同じ構造です。ML では予測誤差に既約ノイズ σ2\sigma^2 が加わる点が違いです。

3. 複雑さとの綱引き

モデルの複雑さを上げていくと、バイアス²は単調に減り、バリアンスは増えるため、汎化誤差は U 字 を描きます。

xychart-beta
    title "モデルの複雑さと誤差の分解"
    x-axis ["単純", "やや単純", "適度", "やや複雑", "複雑"]
    y-axis "誤差" 0 --> 100
    line [80, 45, 22, 12, 8]
    line [5, 12, 25, 48, 80]
    line [85, 57, 47, 60, 88]

上から:バイアス²(右下がり)/バリアンス(右上がり)/総誤差(U字)。U字の谷が「ちょうどよい複雑さ」。

4. どう制御するか

対応するシミュレーション

simulations/bias_variance.py:真の関数 sin(2πx)\sin(2\pi x) にノイズを足した訓練セットを多数生成し、次数の異なる多項式回帰を学習して、テスト点ごとにバイアス²・バリアンス・総誤差を数値分解します。次数を上げるとバイアスは下がるがバリアンスが急増し、合計(汎化誤差)が次数3あたりを底とする U 字を描くことを、誤差対次数のグラフ(対数軸)で再現します。

次数を上げるとバイアス²は下がりバリアンスが増え、総誤差(汎化誤差)がU字を描く

⚠️ よくある誤解

関連ノート