バイアスとバリアンス(複雑度と汎化)
モデルを複雑にするほど訓練誤差は下がるが、テスト誤差は U 字を描く。
3
0.20
15
真の関数
フィット d 次
訓練点
訓練誤差
テスト誤差
—
訓練誤差 (MSE)
—
テスト誤差 (MSE)
—
バイアス²(平均ずれ)
—
バリアンス(ばらつき)
—
最適次数 d*
—
ノイズ床 σ²
—
左:1 次元回帰のフィット
右:次数 d に対する誤差曲線
真の関数
左はフィット曲線、右は次数 d を横軸にした訓練誤差(赤)とテスト誤差(緑)。次数を上げると訓練誤差は単調に下がりますが、テスト誤差はU 字を描きます。
「重ね描き ON」で別々のデータセットで引いた複数のフィットを薄く重ねます。低次数はどのデータでもほぼ同じ曲線(=ばらつき小=高バイアス)、高次数はデータごとに大暴れ(=高バリアンス)になる様子を見比べてください。
f(x) = sin(2πx) にノイズを足して訓練点を作り、d 次多項式を最小二乗で当てはめます(多項式は手段で、主題は誤差の中身)。左はフィット曲線、右は次数 d を横軸にした訓練誤差(赤)とテスト誤差(緑)。次数を上げると訓練誤差は単調に下がりますが、テスト誤差はU 字を描きます。
「重ね描き ON」で別々のデータセットで引いた複数のフィットを薄く重ねます。低次数はどのデータでもほぼ同じ曲線(=ばらつき小=高バイアス)、高次数はデータごとに大暴れ(=高バリアンス)になる様子を見比べてください。
いま何が起きている?
ここがポイント
- 単純すぎ = 高バイアス(過少適合) ── 表現力が足りず、どんなデータでも真の関数を捉えられない。訓練誤差もテスト誤差も高い。
- 複雑すぎ = 高バリアンス(過剰適合) ── ノイズまで暗記し、データが少し変わるとフィットが激変。訓練誤差は 0 に近づくのにテスト誤差は跳ね上がる。
- テスト誤差が最小の最適複雑度 d* が存在 ── U 字の底。ここがバイアスとバリアンスの釣り合う点。
- 誤差 = バイアス² + バリアンス + ノイズ ── テスト誤差はこの 3 つに分解できる。ノイズ σ² はどんなモデルでも消せない床。次数を変えるとバイアス²とバリアンスが逆方向に動く。