損失関数についてClaude Opus 4.5に説明してもらいました。
自分は間違いを指摘したり、構成を整理しました。
損失関数の基礎
損失関数
具体例:損失関数の動作
ネットワークが「猫」の画像に対して予測を行う場合
| 予測 | 目標(正解) | 損失 | 意味 |
|---|---|---|---|
| 猫: 0.95 | 猫: 1.0 | 0.05 | 良い予測 → 小さな損失 |
| 猫: 0.50 | 猫: 1.0 | 0.69 | 曖昧な予測 → 中程度の損失 |
| 猫: 0.05 | 猫: 1.0 | 3.00 | 悪い予測 → 大きな損失 |
損失が小さいほど予測が正確です。学習とは、この損失を最小化するように重みを調整することです。
損失関数(Loss Function)は、ニューラルネットワークの予測値と実際の正解値との「ずれ」を数値化する関数です。
損失関数の役割
ニューラルネットワークの学習は、損失関数を最小化する最適化問題として定式化されます。
$$\min_{\mathbf{w}} L(\hat{\mathbf{y}}, \mathbf{y}) = \min_{\mathbf{w}} L(f(\mathbf{x}; \mathbf{w}), \mathbf{y})$$
ここで \(\mathbf{w}\) はネットワークの重みパラメータ、\(f(\mathbf{x}; \mathbf{w})\) は入力 \(\mathbf{x}\) に対するネットワークの出力です。
学習の本質
ニューラルネットワークの学習とは、損失関数を最小化するような重み \(\mathbf{w}\) を見つけることです。勾配降下法では、損失関数の勾配 \(\frac{\partial L}{\partial \mathbf{w}}\) を計算し、勾配の逆方向に重みを更新します。
損失関数の定義
損失関数 \(L\) は、予測値 \(\hat{y}\) と目標値 \(y\) を入力として受け取り、非負の実数を出力する関数です。
$$L: (\hat{y}, y) \rightarrow \mathbb{R}^+$$
損失関数は以下の性質を持ちます。
- \(L(\hat{y}, y) \geq 0\)(常に非負)
- \(\hat{y} = y\) のとき \(L(\hat{y}, y) = 0\)(完全一致で損失ゼロ)
- \(\hat{y}\) と \(y\) の差が大きいほど \(L(\hat{y}, y)\) も大きい
損失関数は誤差関数とも言います。
平均二乗誤差 (MSE: Mean Squared Error)
具体例:住宅価格予測でのMSE
3軒の住宅価格を予測した場合:
| 住宅 | 予測価格 \(\hat{y}\) | 実際価格 \(y\) | 誤差 \((\hat{y}-y)\) | 二乗誤差 |
|---|---|---|---|---|
| A | 3000万円 | 3200万円 | -200万円 | 40000 |
| B | 2500万円 | 2400万円 | +100万円 | 10000 |
| C | 4000万円 | 4500万円 | -500万円 | 250000 |
MSE = (40000 + 10000 + 250000) / 3 = 100000(万円²)
平均二乗誤差(Mean Squared Error, MSE)は、回帰問題で最もよく使われる損失関数です。全サンプルにわたる二乗誤差の平均を計算します。
$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i – y_i)^2$$
\(n\): サンプル数、\(\hat{y}_i\): 第\(i\)サンプルの予測値、\(y_i\): 第\(i\)サンプルの目標値
MSEの役割
MSEは回帰問題において中心的な役割を果たします。その役割を詳しく見ていきましょう。
MSEの3つの役割
- 予測精度の評価:モデルがどれだけ正確に予測できているかを測定
- 学習の指針:最小化すべき目標として、重みの更新方向を決定
- モデル比較:異なるモデルの性能を公平に比較する基準
役割1:予測精度の評価指標
MSEは、モデルの予測がどれだけ正解に近いかを単一の数値で表現します。
具体例:2つのモデルの比較
同じ5つのサンプルに対する2つのモデルの予測:
| サンプル | 正解 \(y\) | モデルA \(\hat{y}_A\) | モデルB \(\hat{y}_B\) |
|---|---|---|---|
| 1 | 10 | 9 | 8 |
| 2 | 20 | 21 | 22 |
| 3 | 15 | 14 | 18 |
| 4 | 25 | 26 | 24 |
| 5 | 30 | 29 | 27 |
MSE計算:
- モデルA:\(\frac{1}{5}[(1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2] = \frac{5}{5} = 1.0\)
- モデルB:\(\frac{1}{5}[(2)^2 + (2)^2 + (3)^2 + (1)^2 + (3)^2] = \frac{27}{5} = 5.4\)
MSEが小さいモデルAの方が優れた予測をしています。
役割2:学習の目標関数
ニューラルネットワークの学習では、MSEを最小化する目標として使用します。
最適化問題としての定式化
重み \(\mathbf{w}\) を持つモデル \(f(\mathbf{x}; \mathbf{w})\) に対して:
$$\mathbf{w}^* = \arg\min_{\mathbf{w}} \frac{1}{n}\sum_{i=1}^{n}(f(\mathbf{x}_i; \mathbf{w}) – y_i)^2$$
勾配降下法により、MSEが減少する方向に重みを更新します:
$$\mathbf{w} \leftarrow \mathbf{w} – \eta \frac{\partial \text{MSE}}{\partial \mathbf{w}}$$
役割3:統計学的な正当性(最尤推定との関係)
MSEには深い統計学的な意味があります。
ガウス分布と最尤推定
観測値 \(y\) が予測値 \(\hat{y}\) を中心とするガウス分布に従うと仮定:
$$p(y | \hat{y}) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(y – \hat{y})^2}{2\sigma^2}\right)$$
このとき、負の対数尤度を最小化することは、MSEを最小化することと等価です:
$$-\log p(y | \hat{y}) = \frac{(y – \hat{y})^2}{2\sigma^2} + \text{const}$$
つまり、MSEの最小化 = 最尤推定(ガウスノイズの仮定下)
直感的な意味
「データに正規分布のノイズが含まれる」という仮定の下では、MSEを最小化することが統計学的に最も合理的な推定方法です。これがMSEが広く使われる理由の一つです。
なぜ「二乗」なのか?
誤差を測る方法は他にもありますが、なぜ「二乗」が選ばれるのでしょうか?
二乗誤差を使う4つの理由
- 正負の誤差を同等に扱う:過大予測も過小予測も同じ重みで評価
- 大きな誤差をより強く罰する:外れ値に敏感に反応
- 微分可能で滑らか:勾配降下法で最適化しやすい
- 解析的に扱いやすい:線形回帰では閉形式の解が存在
具体例:二乗 vs 絶対値
誤差が \((-2, -1, 0, +1, +3)\) の5サンプルの場合:
| 指標 | 計算 | 結果 |
|---|---|---|
| 平均絶対誤差(MAE) | \(\frac{1}{5}(2 + 1 + 0 + 1 + 3)\) | 1.4 |
| 平均二乗誤差(MSE) | \(\frac{1}{5}(4 + 1 + 0 + 1 + 9)\) | 3.0 |
MSEでは大きな誤差(3)の影響が \(3^2 = 9\) と増幅されます。
外れ値への注意
MSEは大きな誤差を二乗するため、外れ値に敏感です。
- 1つの大きな誤差がMSE全体を支配することがある
- 外れ値が多いデータでは、平均絶対誤差(MAE)やHuber損失を検討
| 損失関数 | 数式 | 特徴 | 適した場面 |
|---|---|---|---|
| MSE | \((\hat{y} – y)^2\) | 大きな誤差を強く罰する | 正規分布ノイズ、外れ値が少ない |
| MAE | \(|\hat{y} – y|\) | 全ての誤差を均等に扱う | 外れ値が多い、ロバストな推定 |
| Huber | MSEとMAEの組み合わせ | 小誤差はMSE、大誤差はMAE | 外れ値に頑健かつ滑らか |
ニューラルネットワークでのMSEの変形
ニューラルネットワークの学習では、微分計算を簡単にするために、係数 \(\frac{1}{2}\) を掛けることがあります:
$$L = \frac{1}{2n}\sum_{i=1}^{n}(\hat{y}_i – y_i)^2$$
または、単一サンプルの場合:\(L = \frac{1}{2}(\hat{y} – y)^2\)
なぜ 1/2 を掛けるのか?
係数 \(\frac{1}{2}\) は数学的な便宜のためです。微分すると:
$$\frac{\partial L}{\partial \hat{y}_i} = \frac{\partial}{\partial \hat{y}_i}\left[\frac{1}{2}(\hat{y}_i – y_i)^2\right] = (\hat{y}_i – y_i)$$
\(\frac{1}{2}\) があることで、微分時に現れる係数 2 が打ち消され、結果が単純な \((\hat{y}_i – y_i)\) になります。
なぜ「平均」なのに \(\frac{1}{n}\) ではなく \(\frac{1}{2}\) を使うのか?
機械学習の文献では、「平均二乗誤差」と呼びながら、実際には以下の形式がよく使われます:
$$E = \frac{1}{2}\sum_{i=1}^{n}(t_i – y_i)^2$$
\(\frac{1}{n}\) ではなく \(\frac{1}{2}\) を使用
これには以下の理由があります:
理由1:オンライン学習(確率的勾配降下法)
確率的勾配降下法(SGD)では、1サンプルずつ重みを更新します。この場合、\(n=1\) なので「平均」の概念がなくなり、単純に:
$$E = \frac{1}{2}(t – y)^2$$
となります。\(\frac{1}{2}\) は微分時の係数2を打ち消すためだけに存在します。
理由2:定数係数は最適化に影響しない
損失関数 \(L\) と \(cL\)(\(c > 0\))は同じ点で最小値を取ります:
$$\arg\min_{\mathbf{w}} L(\mathbf{w}) = \arg\min_{\mathbf{w}} cL(\mathbf{w})$$
したがって、\(\frac{1}{n}\) でも \(\frac{1}{2}\) でも \(\frac{1}{2n}\) でも、最適な重みは変わりません。違いは学習率 \(\eta\) の調整で吸収されます。
理由3:歴史的・慣習的な理由
ニューラルネットワークの初期の文献(Rumelhart et al., 1986 など)では、逆伝播の導出を簡潔にするために \(\frac{1}{2}\) が採用されました。この慣習が現在も続いています。
用語の混乱に注意
厳密には:
- MSE(Mean Squared Error):\(\displaystyle \frac{1}{n}\sum_{i=1}^{n}(t_i – y_i)^2\)(統計学的定義)
- SSE(Sum of Squared Errors):\(\displaystyle \sum_{i=1}^{n}(t_i – y_i)^2\)
- 機械学習での「二乗誤差損失」:\(\displaystyle \frac{1}{2}\sum_{i=1}^{n}(t_i – y_i)^2\) または \(\displaystyle \frac{1}{2n}\sum_{i=1}^{n}(t_i – y_i)^2\)
文献によって定義が異なるため、使用する際は係数を確認することが重要です。
実用上の注意
最適化の観点では、定数係数は損失関数を最小化するパラメータに影響しません。\(\frac{1}{2}\) の有無は、学習率の調整で吸収されます。しかし、勾配計算を簡潔にするため、多くの教科書やフレームワークでは \(\frac{1}{2}\) を含めた形式を使用します。
MSEの数学的性質
具体例:3サンプルのMSE計算
予測値 \(\hat{\mathbf{y}} = (0.8, 0.3, 0.6)\)、目標値 \(\mathbf{y} = (1.0, 0.0, 1.0)\) の場合:
$$\text{MSE} = \frac{1}{3}\sum_{i=1}^{3}(\hat{y}_i – y_i)^2$$
$$= \frac{1}{3}\left[(0.8-1.0)^2 + (0.3-0.0)^2 + (0.6-1.0)^2\right]$$
$$= \frac{1}{3}\left[0.04 + 0.09 + 0.16\right] = \frac{0.29}{3} = 0.0967$$
MSEの形状
MSEは \(\hat{y}\) に関して放物線(二次関数)の形状を持ちます:
- \(\hat{y} = y\) で最小値 0
- \(\hat{y}\) が \(y\) から離れるほど急激に増加
- 滑らかで連続的な勾配を持つ(微分可能で凸関数)
多次元出力への拡張
ニューラルネットワークの出力が \(K\) 次元ベクトルの場合(例:10クラス分類)、MSEは:
$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}\sum_{k=1}^{K}(\hat{y}_{ik} – y_{ik})^2$$
\(K\): 出力次元数、\(\hat{y}_{ik}\): サンプル\(i\)のクラス\(k\)に対する予測
MSEの勾配
\(n\) サンプルに対するMSEの勾配は:
$$\frac{\partial \text{MSE}}{\partial \hat{y}_i} = \frac{2}{n}(\hat{y}_i – y_i)$$
係数 \(\frac{1}{2}\) 付きの場合は \(\frac{1}{n}(\hat{y}_i – y_i)\)
具体例:XORとMNISTの損失関数
損失関数の理解を深めるために、2つの代表的な問題での損失関数を詳しく見ていきます。
XOR問題と2-2-1ネットワーク
XOR(排他的論理和)は、ニューラルネットワークの学習能力を示す古典的な問題です。
XOR問題の定義
| 入力 \(x_1\) | 入力 \(x_2\) | 出力 \(y\)(XOR) |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
XORは線形分離不可能なため、単層パーセプトロンでは学習できません。隠れ層を持つネットワークが必要です。
2-2-1ネットワークの構造
ネットワーク構成
- 入力層:2ユニット(\(x_1, x_2\))
- 隠れ層:2ユニット(\(h_1, h_2\))、活性化関数はシグモイド
- 出力層:1ユニット(\(\hat{y}\))、活性化関数はシグモイド
順伝播の計算:
$$h_1 = \sigma(w_{11}x_1 + w_{12}x_2 + b_1)$$
$$h_2 = \sigma(w_{21}x_1 + w_{22}x_2 + b_2)$$
$$\hat{y} = \sigma(v_1 h_1 + v_2 h_2 + c)$$
ここで \(\sigma(z) = \frac{1}{1+e^{-z}}\) はシグモイド関数
XOR学習の損失関数
XORは二値分類問題なので、以下の損失関数が使用できます。
選択肢1:二乗誤差損失(MSE)
$$L_{\text{MSE}} = \frac{1}{2}\sum_{i=1}^{4}(\hat{y}_i – y_i)^2$$
4つの入力パターン全てに対する二乗誤差の合計
選択肢2:二値交差エントロピー損失
$$L_{\text{BCE}} = -\sum_{i=1}^{4}\left[y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i)\right]$$
分類問題ではこちらが一般的に推奨される
具体例:学習初期の損失計算(MSE)
ランダムな初期重みで、ネットワークが以下の出力を生成したとします:
| 入力 \((x_1, x_2)\) | 正解 \(y\) | 予測 \(\hat{y}\) | 誤差 \((\hat{y}-y)\) | 二乗誤差 |
|---|---|---|---|---|
| (0, 0) | 0 | 0.52 | 0.52 | 0.2704 |
| (0, 1) | 1 | 0.48 | -0.52 | 0.2704 |
| (1, 0) | 1 | 0.51 | -0.49 | 0.2401 |
| (1, 1) | 0 | 0.49 | 0.49 | 0.2401 |
損失計算:
$$L = \frac{1}{2}(0.2704 + 0.2704 + 0.2401 + 0.2401) = \frac{1}{2} \times 1.021 = 0.5105$$
初期状態では、ネットワークはほぼランダムな出力(約0.5)をしており、損失は大きい。
具体例:学習後の損失計算(MSE)
十分な学習後、ネットワークが以下の出力を生成したとします:
| 入力 \((x_1, x_2)\) | 正解 \(y\) | 予測 \(\hat{y}\) | 誤差 \((\hat{y}-y)\) | 二乗誤差 |
|---|---|---|---|---|
| (0, 0) | 0 | 0.02 | 0.02 | 0.0004 |
| (0, 1) | 1 | 0.97 | -0.03 | 0.0009 |
| (1, 0) | 1 | 0.98 | -0.02 | 0.0004 |
| (1, 1) | 0 | 0.03 | 0.03 | 0.0009 |
損失計算:
$$L = \frac{1}{2}(0.0004 + 0.0009 + 0.0004 + 0.0009) = \frac{1}{2} \times 0.0026 = 0.0013$$
学習によりネットワークはXORを正しく学習し、損失は約0.001まで減少。
XOR学習のポイント
- XORは4サンプルしかないため、バッチ学習(全データを一度に使用)が一般的
- 損失関数は4サンプル全ての誤差を合計
- MSEでも学習可能だが、交差エントロピーの方が収束が速い場合が多い
- 隠れ層がないと学習不可能(線形分離不可能性)
MNIST手書き数字認識の損失関数
MNISTは、0〜9の手書き数字を認識する10クラス分類問題です。
MNISTの問題設定
- 入力:28×28ピクセルのグレースケール画像 → 784次元ベクトル \(\mathbf{x} \in [0, 1]^{784}\)
- 出力:10クラスの確率分布 \(\hat{\mathbf{y}} \in [0, 1]^{10}\)、\(\sum_{k=0}^{9} \hat{y}_k = 1\)
- 正解:One-Hotベクトル \(\mathbf{y} \in \{0, 1\}^{10}\)
- 訓練データ:60,000枚
- テストデータ:10,000枚
MNISTの損失関数:カテゴリカル交差エントロピー
多クラス分類では、ソフトマックス関数と交差エントロピー損失を組み合わせます。
$$L = -\frac{1}{n}\sum_{i=1}^{n}\sum_{k=0}^{9} y_{ik} \log(\hat{y}_{ik})$$
\(n\): バッチサイズ、\(y_{ik}\): サンプル\(i\)のクラス\(k\)のOne-Hot値、\(\hat{y}_{ik}\): ソフトマックス出力
One-Hotベクトルでは正解クラスのみ1なので、実質的には:
$$L = -\frac{1}{n}\sum_{i=1}^{n} \log(\hat{y}_{i, c_i})$$
ここで \(c_i\) はサンプル \(i\) の正解クラス。つまり、正解クラスの予測確率の負の対数を最小化します。
具体例:1枚の画像「3」に対する損失計算
入力画像が数字「3」で、ネットワークの出力(ソフトマックス後)が:
| クラス | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| One-Hot \(y_k\) | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 予測 \(\hat{y}_k\) | 0.01 | 0.02 | 0.05 | 0.75 | 0.03 | 0.04 | 0.02 | 0.03 | 0.04 | 0.01 |
損失計算(この1枚に対して):
$$L = -\sum_{k=0}^{9} y_k \log(\hat{y}_k) = -[0 \cdot \log(0.01) + … + 1 \cdot \log(0.75) + … + 0 \cdot \log(0.01)]$$
$$= -\log(0.75) = 0.288$$
正解クラス「3」の確率が0.75と高いため、損失は比較的小さい。
具体例:誤分類の場合の損失
同じ画像「3」に対して、ネットワークが「8」と誤認識した場合:
| クラス | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| One-Hot \(y_k\) | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 予測 \(\hat{y}_k\) | 0.01 | 0.02 | 0.03 | 0.05 | 0.02 | 0.03 | 0.02 | 0.02 | 0.75 | 0.05 |
損失計算:
$$L = -\log(0.05) = 2.996$$
正解クラス「3」の確率がわずか0.05なので、損失は約3.0と非常に大きい。
ミニバッチ学習での損失
MNISTでは通常、ミニバッチ(例:32枚)単位で学習します。
具体例:バッチサイズ32での損失計算
32枚の画像に対する各サンプルの損失が以下の場合:
- サンプル1〜10:正しく高確率で予測、各損失 ≈ 0.1〜0.3
- サンプル11〜25:中程度の確率、各損失 ≈ 0.5〜1.0
- サンプル26〜32:低確率(誤分類傾向)、各損失 ≈ 1.5〜3.0
バッチ損失:
$$L_{\text{batch}} = \frac{1}{32}\sum_{i=1}^{32} L_i = \frac{1}{32}(2.0 + 11.25 + 14.0) = \frac{27.25}{32} = 0.852$$
なぜMNISTでMSEを使わないのか?
MNISTでMSEを使う問題点
MNISTでMSEを使うこともできますが、いくつかの問題があります:
問題1:確率的解釈の欠如
MSEは出力を確率分布として扱いません。ソフトマックスの「合計1」という制約と相性が悪い。
問題2:勾配消失
ソフトマックス + MSEの組み合わせでは、予測が極端(0や1に近い)なときに勾配が小さくなります。
問題3:学習の非効率
完全に間違った予測(正解クラスの確率が0.01など)でも、MSEの勾配は小さく、修正が遅い。
| 問題 | 推奨損失関数 | 出力層活性化 | 理由 |
|---|---|---|---|
| XOR(2-2-1) | 二値交差エントロピー またはMSE |
シグモイド | 二値分類、小規模データ |
| MNIST | カテゴリカル交差エントロピー | ソフトマックス | 多クラス分類、確率出力 |
損失関数選択のまとめ
- 回帰問題(連続値予測)→ MSE
- 二値分類(XORなど)→ 二値交差エントロピー(またはMSE)
- 多クラス分類(MNISTなど)→ カテゴリカル交差エントロピー
まとめ
本章のポイント
- 損失関数は予測と正解の「ずれ」を測定する関数
- MSEは \(\frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i – y_i)^2\) で定義され、回帰問題に適する
- 係数 \(\frac{1}{2}\) は微分計算を簡潔にするための便宜
- MSEは放物線形状を持ち、滑らかな勾配で最適化しやすい
- 損失関数の微分が勾配降下法の基礎となる
広告
さくらのレンタルサーバムームードメイン
Oisix(おいしっくす)
らでぃっしゅぼーや
珈琲きゃろっと
エプソムソルト
【FRONTIER】
AdGuard Ad Blocker
AdGuard VPN
AdGuard DNS