誤差 | Deep Learning の基礎
誤差の分解
機械学習における汎化誤差(Expected Loss = Generalization Error)は 3 つに分解できます。
テストデータに対する期待二乗誤差を例に説明します。
- $x$:説明変数(入力データ)
- 予測の対象となる特徴量
- $y(x)$:予測モデル
- 訓練データ $D$ から学習された関数で、入力 $x$ に対する予測値を出力する
- データセット $D$ に依存するため、依存性を明示する場合は $y(x; D)$ と書く。訓練データが変われば $y(x)$ 自体も変わりうる
- $h(x)$:理想的な予測モデル(真の関数)
- ノイズを除いた、$x$ が与えられたときの目的変数の期待値 $h(x) = E[t\vert{}x]$ として定義される
- データセットに依存しない、唯一の正解の関数
- $t$:目的変数の真値(観測値)
- 理想モデル $h(x)$ にノイズが加わったもので、同じ $x$ に対しても観測のたびにばらつきうる確率変数
$y(x; D)$
バイアス-バリアンス分解の文脈における $y(x; D)$ は次のように考えます。
- $x$:予測したい入力点(テスト点)。$D$ とは独立に決められるもの
- $D$:訓練に使うデータセットで真の分布から複数回サンプリングされうる
つまり、 同じ $x$ に対して、異なる訓練データセット $D_1, D_2, D_3, \dots$ で学習したモデルが、それぞれ異なる予測値 $y(x; D_1), y(x; D_2), \dots$ を出力します。
$x$ は固定して、$D$ の方を色々変えるイメージです。
具体的なイメージ
例えば、真の分布からデータセットを100回サンプリングしたとします。
\[D_1, D_2, \dots, D_{100}\]それぞれで学習したモデルに、同じテスト点 $x_0$ を入力すると 100 個の予測値が得られます。
\[y(x_0; D_1),\ y(x_0; D_2),\ \dots,\ y(x_0; D_{100})\]これらのばらつきが「バリアンス(分散)」であり、これらの平均と真の値とのズレが「バイアス」です。
分解前の式
\[\mathbb{E}[L] = \int \big( y(x) - h(x) \big)^2 p(x)\,dx \;+\; \iint \big( h(x) - t \big)^2\, p(x,t)\,dx\,dt\]分解後の式
\[\mathbb{E}[L] = \underbrace{\int \Big( \mathbb{E}_D[y(x;D)] - h(x) \Big)^2 p(x)\,dx}_{\text{Bias}^2} \;+\; \underbrace{\int \mathbb{E}_D\Big[ \big( y(x;D) - \mathbb{E}_D[y(x;D)] \big)^2 \Big]\, p(x)\,dx}_{\text{Variance}} \;+\; \underbrace{\iint \big( h(x) - t \big)^2\, p(x,t)\,dx\,dt}_{\text{Noise}}\]バイアス(Bias)
- モデルの予測の平均値と、真の関数とのずれの大きさ
- モデルが単純すぎる(表現力が足りない)ときに大きくなる
- 例:本質的に非線形な関係を線形回帰で近似しようとすると、バイアスが大きくなる
- アンダーフィッティングと関連が深い
- アンダーフィッティング(過小適合):モデルが単純すぎて、データの背後にあるパターンを十分に学習できていない状態です
バリアンス(Variance:分散)
- 訓練データを変えたときに、モデルの予測がどれだけばらつくか
- モデルが複雑すぎる(訓練データに過剰に適応してしまう)ときに大きくなる
- 例:高次多項式回帰や深すぎる決定木は、訓練データの細かいノイズまで学習してしまいばらつきが大きくなる
- オーバーフィッティングと関連が深い オーバーフィッティング(過剰適合):モデルが複雑すぎて、訓練データのノイズや細かい変動まで学習してしまっている状態です
ノイズ(Noise / 既約誤差)
- データ自体に本質的に含まれるランダムな誤差
- 測定誤差や、説明変数だけでは説明しきれない要因によるもの
- どんなに優れたモデルを使っても減らすことができない誤差(既約誤差、irreducible error)
トレードオフの関係
バイアスとバリアンスにはトレードオフの関係があります。
| モデルの複雑さ | バイアス | バリアンス | 状態 |
|---|---|---|---|
| 低い(単純) | 大 | 小 | アンダーフィッティング |
| 高い(複雑) | 小 | 大 | オーバーフィッティング |
| 適切 | バランス | バランス | 汎化性能が良い |
図で表すと、モデルの複雑さを横軸、誤差を縦軸にとったとき、バイアスは複雑さとともに減少し、バリアンスは複雑さとともに増加する、U字型の総誤差曲線を描くのが典型的なイメージです。

実務での対処法
この図が示す通り、モデルの複雑さを闇雲に上げても下げても最適にはならず、検証データ(バリデーションセット)での誤差を見ながら、この谷底(緑の点)に近づけていくのが一般的なアプローチです。正則化(L1/L2)、早期終了(early stopping)、交差検証などは、この最適な複雑さを見つけるための代表的な手法です。
- バイアスが大きい場合:モデルを複雑にする(特徴量追加、より柔軟なモデル、正則化を弱める)
- バリアンスが大きい場合:正則化を強める、データを増やす、モデルを単純化する、アンサンブル学習(バギングなど)を使う
- ノイズ:データ収集プロセスの改善以外では基本的に減らせない
理想的な予測モデル $h(x)$
予想モデル($y(x)$)と理想的な予測モデル $h(x)$ の関係は、$h(x)$ はデータが生成される仕組み(真の関数)として先験的に存在するもので $y(x)$ の収束してほしい先です。
\[h(x) \;\; \xleftarrow{\text{理想的にはここに収束してほしい}} \;\; E_D[y(x;D)]\]両者のズレがバイアスです。
$h(x)$ とノイズ
\[t = h(x) + \varepsilon\]- $h(x)$ は「$x$ が与えられたときに、$t$ が平均的にとる値」を完全に正確に出力するモデル。この意味では「間違いのないモデル」
- 個々の観測値 $t$ は $h(x)$ ぴったりにはならず、ノイズ $\varepsilon$ の分だけ $h(x)$ からズレる。このズレは $h(x)$ の「間違い」ではなく、現象そのものが持つ本質的な不確実性(ノイズ)。
サイコロの例
- $h(x) = 3.5$(サイコロの目の期待値)は完全に正しいモデル。何度計算しても $3.5$ という値自体は間違えようがない。
- しかし実際に振ったときの出目 $t$ は $1〜6$ のどれかであり、$h(x)=3.5$ と一致することは絶対にない。
- このズレ $(t - h(x))$ は $h(x)$ が「間違っている」からではなく、サイコロという現象自体が持つランダム性(ノイズ)による。
サイコロの例:ノイズは予測方法を変えても消えない
- ノイズとは $x$ を固定しても $t$ が本質的に持つばらつきのこと
- 期待値 $3.5$ を出すモデル → 個々の出目とズレる(誤差として直接見える)
- $4$ が出ると一つの数字に賭けるモデル → 当たる確率 $1/6$、外れる確率 $5/6$(ノイズは「外れる確率」という形で現れる)
- 予測の仕方を変えても、現象そのものが持つランダム性は変わらない
t = h(x) + \varepsilon
$h(x)$ をどう使う(期待値として出力するか、特定の値に賭けるか)を変えても、$\varepsilon$(ノイズ)自体は消えない。
ノイズが本当に0になる条件
予測方法の工夫ではなく、入力 $x$ に含まれる情報量を増やすことでのみノイズは減る。
- 現状:$x$ = 「サイコロを振る」だけ → 出目は完全にランダム(ノイズ大)
- $x$ に「力・角度・初速・空気抵抗など物理条件すべて」が含まれれば → 出目を一意に計算でき、以下が成り立つ
h(x) = t \quad \Longrightarrow \quad \text{Noise} = 0
まとめ
| 状況 | ノイズは消えるか |
|---|---|
| 予測方法を変える(期待値 → 個別の値を当てにいく) | 消えない(外れる確率として表面化するだけ) |
| 入力 $x$ の情報量を増やし $t$ を一意に決められるようにする | 減る(極限では0になりうる) |