損失関数——「どれだけ間違っているか」を測る
採点が必要な理由
学習とは「良い重みを探すこと」だと第3回で学びました。でも「良い」とはどういう意味でしょうか?
答えは「正解との差が小さい」 ことです。この「正解との差」を数値で表す仕組みが損失関数(Loss Function) です。損失関数が出力する値を損失値(ロス) と呼び、この値を小さくすることが学習の目標になります。
損失関数の役割
予測値 ──┐
├──→ [損失関数] ──→ 損失値(数値)
正解値 ──┘ ↑できるだけ小さくしたい
損失値が大きい = 予測が外れている = 重みを修正する必要がある 損失値が小さい = 予測が当たっている = 重みはほぼ良い状態
平均二乗誤差(MSE)
Mean Squared Error(MSE)は、数値を予測する回帰タスクによく使われます。
MSE = (1/n) × Σ(予測値 - 正解値)²
具体例: 3つのデータで予測した場合
| サンプル | 予測値 | 正解値 | 差 | 差の2乗 |
|---|---|---|---|---|
| 1 | 100 | 110 | -10 | 100 |
| 2 | 95 | 90 | +5 | 25 |
| 3 | 200 | 190 | +10 | 100 |
MSE = (100 + 25 + 100) / 3 = 75
なぜ差を「2乗」するのか?
理由は2つあります。
① プラスとマイナスを打ち消させないため
差をそのまま足すと、「-10 と +10」が相殺されてゼロになってしまいます。2乗すると必ず正の値になり、大きな誤差が大きく評価されます。
② 大きな誤差をより重く罰するため
差が2倍になると2乗した値は4倍になります。大きなミスを厳しく評価することで、ひどい外れ値への感度が高まります。
クロスエントロピー損失
Cross-Entropy Loss は、分類タスク(犬か猫か、スパムか否か、など)によく使われます。
クロスエントロピー = -Σ(正解 × log(予測確率))
「log(対数)」が入っていて難しそうに見えますが、感覚はシンプルです。
なぜlogを使うのか
logの特徴を見てみましょう:
log(1.0) = 0 (完璧に予測できた → ペナルティ0)
log(0.9) ≈ -0.1 (少し外れた → 小さいペナルティ)
log(0.5) ≈ -0.7 (大きく外れた → 中程度のペナルティ)
log(0.1) ≈ -2.3 (ひどく外れた → 大きいペナルティ)
log(0.01)≈ -4.6 (最悪に外れた → 非常に大きいペナルティ)
予測確率が正解から遠ざかるほど、指数関数的にペナルティが大きくなるのがlogの効果です。「自信満々に間違えた」ときに特に大きく罰せられます。
具体例
猫の画像に対して「猫の確率」を予測した場合:
| モデル | 猫の確率(予測) | ロス |
|---|---|---|
| A | 0.9 | -log(0.9) ≈ 0.10 |
| B | 0.5 | -log(0.5) ≈ 0.69 |
| C | 0.1 | -log(0.1) ≈ 2.30 |
モデルAはほぼ正解(ロスが小さい)、モデルCは大きく外れている(ロスが大きい)という直感と一致します。
損失関数の選び方
| タスク | よく使う損失関数 |
|---|---|
| 回帰(数値を予測) | 平均二乗誤差(MSE) |
| 2クラス分類 | バイナリクロスエントロピー |
| 多クラス分類 | カテゴリカルクロスエントロピー |
| 物体検出 | 位置にMSE + 分類にクロスエントロピー |
損失関数と学習の関係
損失関数は学習のコンパスです。
重みをランダムに初期化
↓
順伝播で予測値を計算
↓
損失関数で「どれだけ外れたか」を計算
↓
「外れを減らす方向」に重みを修正(次回学習)
↓
繰り返す
この「重みをどの方向に修正するか」を計算するのが次回学ぶ誤差逆伝播です。損失値が学習の「燃料」になります。
まとめ
- 損失関数は「予測値と正解値のズレ」を1つの数値で表す仕組み
- MSE(平均二乗誤差)は回帰に使う。差を2乗することで正負の相殺を防ぎ、大きな誤差を重く評価する
- クロスエントロピーは分類に使う。logにより「確信を持って間違えた」ときに大きく罰せられる
- 損失値を最小にすることが学習の目標
次回は「損失を下げるために重みをどう修正するか」——誤差逆伝播の仕組みを学びます。