誤差 | 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$ に対しても観測のたびにばらつきうる確率変数
分解前の式
\[\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になりうる) |
y(x;D) の意味
セミコロン ; は、「変数」と「パラメータ・条件」を区別するための表記です。数学や統計学、機械学習でよく使われる慣習的な記法です。
y(x; D)
- $x$(セミコロンの前):関数の「本来の入力変数」。予測したい対象そのもの。
- $D$(セミコロンの後):その関数が「どの訓練データセットから学習されたか」という条件・パラメータ。$x$ が変わるたびに変わるものではなく、モデルを訓練する段階で1回だけ決まるもの。
なぜこの表記が必要か
もし単に $y(x, D)$ とカンマで書いてしまうと、$x$ と $D$ が同じ立場の「2つの独立変数」であるかのように見えてしまいます。しかしバイアス・バリアンス分解の文脈では、両者の役割は本質的に異なります。
| 記号 | 役割 | 「動く」タイミング |
|---|---|---|
| $x$ | 予測したい入力点 | 予測のたびに変わる(テスト時にいろいろな $x$ に対して予測する) |
| $D$ | 学習に使った訓練データセット | モデルを訓練するときに1回だけ固定される。$D$ が違えば別のモデル $y(\cdot; D)$ になる |
セミコロンを使うことで、「$D$ はこの関数の”設定”であり、$x$ こそが関数の本来の引数である」ということが視覚的に明確になります。
具体例
例えば、線形回帰でパラメータ $w$ を最小二乗法で推定する場合、
y(x; D) = w_0(D) + w_1(D)\, x
のように、係数 $w_0, w_1$ は訓練データ $D$ から決まる値であり、$x$ が入力されるたびに再計算されるものではありません。この「$D$ に応じてモデル全体(パラメータ)が決まり、$x$ はその決まったモデルへの入力である」という階層構造を表すのがセミコロンの役割です。
バイアス・バリアンス分解での重要性
この表記があるからこそ、以下の操作の意味が明確になります。
E_D[y(x;D)]
訓練データを様々に変えたときの、この点 $x$ における予測の平均。
E_D\Big[\big(y(x;D) - E_D[y(x;D)]\big)^2\Big]
バリアンス:同じ $x$ でも $D$ が違えば予測がどうばらつくか。
つまり「$x$ を固定したまま $D$ についてだけ期待値・分散をとる」という操作の意味が明確になります。もし $y(x)$ とだけ書いていたら、何に関して期待値をとっているのか(データについてなのか、$x$ についてなのか)が曖昧になってしまいます。
目的関数(Objective Function)
定義
学習アルゴリズムが実際に最小化(または最大化)しようとする関数。 損失関数に正則化項などを加えたもの全体を指すことが多い。
関連用語の整理
| 用語 | 役割 |
|---|---|
| 損失関数(loss function) | 1つのデータ点に対する予測と正解のズレを測る関数(例:交差エントロピー、二乗誤差) |
| コスト関数(cost function) | 損失関数をデータセット全体で平均・合計したもの |
| 目的関数(objective function) | 損失関数 + 正則化項など、最適化のターゲットとなる関数全体 |
基本式
目的関数 = 損失関数(誤差) + 正則化項
例(L2正則化の場合):
目的関数 = 交差エントロピー(予測, 正解) ← 損失関数(誤差そのもの)
+ λ × Σ W² ← 正則化項(誤差ではない)
なぜ「誤差」だけでなく「目的関数」と呼ぶのか
LLM の文脈における目的関数
- 事前学習(pretraining)における目的関数は、基本的に「交差エントロピー誤差の平均」
- ファインチューニングや RLHF の段階では、報酬モデルのスコアや KL ダイバージェンス項など、別の目的関数が追加・置換される
正則化(Regularization)
定義
モデルが訓練データに過剰に適合(オーバーフィッティング)しないように、 意図的に制約やペナルティを加えてモデルを「シンプルに保つ」ための手法。
基本的な考え方
損失関数に「パラメータの大きさに対するペナルティ項」を加える。
最終的な目的関数 = 訓練データへの誤差 + λ × ペナルティ項
この λ(ラムダ、正則化係数)を調整することで、正則化の強さをコントロールする。
- λを大きくする → ペナルティが強く効く → パラメータが小さく抑えられる → モデルが単純になる(正則化を強める)
- λを小さくする(0に近づける) → ペナルティがほぼ効かない → パラメータが自由に動ける → モデルが複雑になれる(正則化を弱める)
代表的な種類
- L2正則化(Ridge): パラメータの二乗和にペナルティをかける。パラメータ全体を滑らかに小さくする。最も一般的。
- L1正則化(Lasso): パラメータの絶対値の和にペナルティをかける。一部のパラメータを完全に0にする性質があり、特徴量選択にも使える。
- Elastic Net: L1とL2を組み合わせたもの。
- Dropout: 学習時に一部のニューロンをランダムに無効化する(ニューラルネットワーク特有)。
- 重み減衰(weight decay): パラメータ更新の式に直接組み込む手法。現代的な実装(AdamW等)ではL2正則化とは別物として区別される。
- データ拡張(augmentation): 入力データ側を加工することで汎化性能を高める。
- 早期終了(early stopping): 学習を打ち切るタイミングの工夫。
- ラベルスムージング: 正解ラベルの確率分布自体を緩める手法。
損失関数への「足し算」になるか
| 種類 | 損失に「足し算」される? |
|---|---|
| L1 / L2正則化 | される(λ × Σ W² のような項を損失に追加) |
| Dropout | されない。ランダムにニューロンを無効化する操作自体が正則化効果を生む |
| Weight decay(AdamW等) | されない。パラメータ更新の式に直接組み込む |
| データ拡張 | されない。入力データ側を加工する |
| 早期終了 | されない。学習を打ち切るタイミングの工夫 |
| ラベルスムージング | 「足し算」というより「入力の加工」に近い |
共通しているのは「モデルがオーバーフィッティングしにくくなるよう、 何らかの制約や工夫を加える」という目的の部分。
バイアス・バリアンスとの関係
- バリアンスが大きい(オーバーフィッティング)場合: λ を大きくして正則化を強め、モデルを単純に保つことでバリアンスを抑える。
- バイアスが大きい(アンダーフィッティング)場合: 正則化が強すぎる可能性があるため、λ を小さくして正則化を弱め、モデルがより自由にパターンを学習できるようにする。