ひとことで言うと
推定量 の平均二乗誤差(MSE)は、バイアスの2乗とバリアンスの和にきれいに分解できます。。ここで は真のパラメータ、 はデータから作った推定量で、期待値はデータセットの引き直しについて取ります。
的当てで言うなら、バイアスは「狙いが的の中心からどれだけずれているか」、バリアンスは「同じ狙い方でも矢がどれだけ散らばるか」です。狙いを中心に合わせても矢が広範囲に散れば命中率は上がりません。逆に、狙いを少しずらしてでも散らばりを抑えたほうが的に近い矢が増えることもあります。MSEはこの2つを同じ単位(距離の2乗)で足し合わせたものです。
なぜ必要か
不偏性()は推定量の良さを保証しません。バイアスが0でもバリアンスが大きければ、個々の推定は真値から大きく外れます。逆に、わずかにバイアスを持たせる代わりにバリアンスを大きく削れるなら、MSEで見るとそちらのほうが優れた推定量になります。
正則化(重み減衰など)はまさにこの取引をしています。パラメータを0に近づける制約はバイアスを増やしますが、訓練データの引き直しに対する推定の暴れ(バリアンス)を抑えます。「正則化は精度を犠牲にする妥協」ではなく、MSEという1つの指標の上でバイアスとバリアンスを交換する操作だと捉えると、いつ効いていつ効かないかが読めるようになります。
| 推定量の性質 | 個々の推定 | MSEでの評価 |
|---|---|---|
| 不偏・高バリアンス | 平均すれば真値だが、1回ごとの推定は大きく散らばる | バリアンスの分だけ悪化しうる |
| 有バイアス・低バリアンス(正則化後) | 常に一定方向へずれるが、ばらつきは小さい | バイアス²の増加をバリアンスの削減が上回れば改善 |
仕組み
、 です。期待値 は、サイズ のデータセットを何度も引き直したときの分布について取ります。1回の学習で得られる は1つの値ですが、データセットを引き直すたびに違う値が出る確率変数である点が出発点です。
MSEを と の和に分けて展開すると、交差項は で消え、次だけが残ります。
この分解はモデルの容量(capacity)と直結します。容量を上げるほど訓練データへの当てはめは自由になり、バイアスは下がりバリアンスは上がる方向に動きます。逆に容量を絞ると、モデル族が真の関数を表現しきれずバイアスが下がりきらない代わりに、データセットが変わっても推定はあまり動かずバリアンスは低いまま。汎化誤差をMSEで測ると、容量に対してU字を描くのはこの2つが逆向きに動くためです。
| 容量 | バイアス | バリアンス |
|---|---|---|
| 小さい(未学習寄り) | 大きい | 小さい |
| 大きい(過学習寄り) | 小さい | 大きい |
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| MSEの分解式を選ばせる | (バイアスは2乗) | バイアスを2乗せずに足す/符号付きバイアスをそのまま加算 |
| 不偏推定量の優位性を問う | 不偏(バイアス0)でも、バリアンスが大きければMSEで劣ることがある | 「不偏推定量は常に最良」という誤った一般化 |
| 期待値を何について取るかを問う | データセット(サンプル)の引き直しについての期待値 | 1つのデータセット内の個々の観測についての期待値 |
| 容量とバイアス・バリアンスの関係 | 容量を上げるとバイアスは減りバリアンスは増える | 両方が単調に減る/両方が単調に増える |
| 正則化の効果の説明 | バイアスを増やす代わりにバリアンスを減らす取引 | 「正則化はバイアスもバリアンスも両方減らす」 |
実装で確かめる
真値 (ノイズ標準偏差3、)の平均推定で、標本平均(不偏)と、それを0.4倍に縮小した推定量(バイアス付き)を2万回のデータセット引き直しで比較します。
import numpy as np
rng = np.random.default_rng(0)
theta_true, sigma, n, c = 1.0, 3.0, 5, 0.4
data = rng.normal(theta_true, sigma, size=(20000, n))
unbiased = data.mean(axis=1) # 標本平均:不偏推定量
biased = c * unbiased # 0.4倍に縮小:バイアスを持つ推定量
for name, est in [("unbiased", unbiased), ("biased(c=0.4)", biased)]:
bias = est.mean() - theta_true
var = est.var()
mse = ((est - theta_true) ** 2).mean()
print(f"{name}: bias^2={bias**2:.3f} var={var:.3f} MSE={mse:.3f} (bias^2+var={bias**2+var:.3f})")
実行結果は次の通りです。
unbiased: bias^2=0.000 var=1.792 MSE=1.792 (bias^2+var=1.792)
biased(c=0.4): bias^2=0.361 var=0.287 MSE=0.648 (bias^2+var=0.648)
分解式(bias^2+var)が直接計算したMSEと一致していること、そしてバイアスを持つ推定量のほうがMSEで不偏推定量に勝っていることの両方が確認できます。 が0に近くノイズが大きい(=サンプルからの情報が乏しい)ほど、0への縮小がバリアンスを削る効果がバイアスの増加を上回ります。
この縮小係数 は真値 を知っている前提で選んだ都合の良い値です。実務では は未知なので、正則化の強さ( など)は交差検証で決めます。「バイアスを増やせば必ずMSEが下がる」わけではなく、ここでの逆転は とノイズの大きさの関係に依存します。
取り違えやすいもの
| 用語 | バイアス・バリアンスとの関係 |
|---|---|
| 過学習・未学習 | バイアス・バリアンスが引き起こす現象側の呼び名。バリアンス過多が過学習、バイアス過多が未学習に対応する |
| 汎化誤差 | テストデータでの期待損失。MSEで測る場合、バイアス²とバリアンスの和で説明できる成分を持つ |
| ノイズ項(既約誤差) | データ生成過程そのものが持つばらつき。モデルの容量をいくら変えても消えない。今回の分解には含めていない |
| 不偏性(consistency とは別) | バイアスが0であること。一致性( で真値に確率収束)とは別の性質で、不偏かつ非一致、あるいはその逆もあり得る |
| 正則化強度 | バイアスとバリアンスの配分を動かすつまみ。 で正則化なし(バリアンス側に寄る) |
想起チェック
MSEをバイアスとバリアンスに分解する式を書け
。バイアスは2乗してから足す点に注意します。
「不偏推定量は常にMSEで最良である」は正しいか
正しくありません。バイアスが0でもバリアンスが大きければMSEは悪化します。わずかにバイアスを持たせてバリアンスを大きく削れる推定量のほうがMSEで勝ることがあります。
モデルの容量を上げると、バイアスとバリアンスはそれぞれどう動くか
バイアスは下がり、バリアンスは上がります。汎化誤差をMSEで測るとこの逆向きの動きがU字カーブを作ります。
正則化はバイアスとバリアンスに何をしているか
バイアスを増やす代わりにバリアンスを減らす取引をしています。効果的な正則化は、バリアンスの削減がバイアスの増加を上回るように働きます。