損失関数についてClaude Opus 4.5に説明してもらいました。
自分は間違いを指摘したり、構成を整理しました。
損失関数の基礎
損失関数
損失(予測と目標の差)が小さいほど予測が正確です。学習とは、この損失を最小化するように重みを調整することです。
損失関数(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)
平均二乗誤差(Mean Squared Error, MSE)は、回帰問題で最もよく使われる損失関数です。全サンプルにわたる二乗誤差の平均を計算します。
MSEの役割
MSEは回帰問題において中心的な役割を果たします。その役割を詳しく見ていきましょう。
MSEの3つの役割
- 予測精度の評価:モデルがどれだけ正確に予測できているかを測定
- 学習の指針:最小化すべき目標として、重みの更新方向を決定
- モデル比較:異なるモデルの性能を公平に比較する基準
予測精度の評価指標
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 : \(\displaystyle \text{MSE}_A = \frac{1}{5}\bigl[(1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2\bigr] = \frac{5}{5} = 1.0\)
- モデルB : \(\displaystyle \text{MSE}_B = \frac{1}{5}\bigl[(2)^2 + (2)^2 + (3)^2 + (1)^2 + (3)^2\bigr] = \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}\displaystyle\sum_{i=1}^{n}\bigl(f(\mathbf{x}_i; \mathbf{w}) – y_i\bigr)^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}\) を掛けることがあります:
なぜ 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}\) を使うのか?
機械学習の文献では、「平均二乗誤差」と呼びながら、実際には以下の形式がよく使われます:
これには以下の理由があります:
理由1:オンライン学習(確率的勾配降下法)
確率的勾配降下法(SGD)では、1サンプルずつ重みを更新します。この場合、\(n=1\) なので「平均」の概念がなくなり、単純に:
$$E = \frac{1}{2}(t – y)^2$$
となります。\(\displaystyle\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\) の調整で吸収されます。
用語の混乱に注意
厳密には:
- 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}\displaystyle\sum_{i=1}^{3}(\hat{y}_i – y_i)^2$$
\begin{align}
&= \frac{1}{3}\Bigl[(0.8-1.0)^2 + (0.3-0.0)^2 + (0.6-1.0)^2\Bigr] \\[8pt]
&= \frac{1}{3}\Bigl[0.04 + 0.09 + 0.16\Bigr] \\[8pt]
&= \frac{0.29}{3} = 0.0967
\end{align}
MSEの形状
MSEは \(\hat{y}\) に関して放物線(二次関数)の形状を持ちます:
- \(\hat{y} = y\) で最小値 0
- \(\hat{y}\) が \(y\) から離れるほど急激に増加
- 滑らかで連続的な勾配を持つ(微分可能で凸関数)

多次元出力への拡張
ニューラルネットワークの出力が \(K\) 次元ベクトルの場合(例:10クラス分類)、MSEは:
MSEの勾配
\(n\) サンプルに対するMSEの勾配は:
具体例: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}\displaystyle\sum_{i=1}^{4}(\hat{y}_i – y_i)^2$$
4つの入力パターン全てに対する二乗誤差の合計
選択肢2:二値交差エントロピー損失
$$L_{\text{BCE}} = -\displaystyle\sum_{i=1}^{4}\Bigl[y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i)\Bigr]$$
分類問題ではこちらが一般的に推奨される
具体例:学習初期の損失計算(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 |
損失計算:
\begin{align}
L &= \frac{1}{2}(0.2704 + 0.2704 + 0.2401 + 0.2401) \\[6pt]
&= \frac{1}{2} \times 1.021 = 0.5105
\end{align}
初期状態では、ネットワークはほぼランダムな出力(約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 |
損失計算:
\begin{align}
L &= \frac{1}{2}(0.0004 + 0.0009 + 0.0004 + 0.0009) \\[6pt]
&= \frac{1}{2} \times 0.0026 = 0.0013
\end{align}
学習によりネットワークは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の損失関数:カテゴリカル交差エントロピー
多クラス分類では、ソフトマックス関数と交差エントロピー損失を組み合わせます。
One-Hotベクトルでは正解クラスのみ1なので、実質的には:
$$L = -\frac{1}{n}\displaystyle\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枚に対して):
\begin{align}
L &= -\displaystyle\sum_{k=0}^{9} y_k \log(\hat{y}_k) \\[6pt]
&= -\bigl[0 \cdot \log(0.01) + \cdots + 1 \cdot \log(0.75) + \cdots + 0 \cdot \log(0.01)\bigr] \\[6pt]
&= -\log(0.75) = 0.288
\end{align}
正解クラス「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}\displaystyle\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は \(\displaystyle\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