本文へスキップ
BecomeCoder

PyTorchコース · 第1章 AIはどうやって「学ぶ」のか · レッスン2

予測と誤差 ― 損失を数値で測る

ブラウザで完結

導入

「どれくらい外したか」を1つの数値にできなければ、AIは自分の良し悪しを判断できません。この「外れ具合」を表す数値が 損失(loss) です。まずは損失を自分で計算してみましょう。

説明

もっとも基本的な損失が 平均二乗誤差(MSE: Mean Squared Error) です。各データについて「予測 − 正解」を求め、2乗して、平均を取ります。

$$\text{MSE} = \frac{1}{n}\sum_{i=1}^{n}(\hat{y}_i - y_i)^2$$

2乗するのは、(1)プラスとマイナスの誤差が打ち消し合わないように、(2)大きく外したときのペナルティを強くするため、の2つの狙いがあります。

flowchart LR
  yhat["予測 ŷ"] --> diff["差 = ŷ − y"]
  y["正解 y"] --> diff
  diff --> sq["2乗"]
  sq --> mean["平均"]
  mean --> loss["損失(1つの数値)"]

やってみよう

下のエディタには、正解 y と、2つの予測(pred_a:まあまあ/pred_b:ひどい)に対する MSE を計算するコードが入っています。実行して、予測が悪いほど損失が大きくなることを確かめましょう。数値をいじって、どうすれば損失が 0 に近づくかも試してください。

import numpy as np

# 正解の値
y = np.array([3.0, 5.0, 7.0, 9.0])

# 2つの予測
pred_a = np.array([2.8, 5.2, 6.9, 9.3])   # まあまあ良い予測
pred_b = np.array([1.0, 8.0, 4.0, 2.0])   # ひどい予測

def mse(pred, target):
    return np.mean((pred - target) ** 2)

print("予測Aの損失:", mse(pred_a, y))
print("予測Bの損失:", mse(pred_b, y))
print("完璧な予測の損失:", mse(y, y))

演習

pred_a の数値を書き換えて、損失を 0.01 より小さくしてみましょう。どの向きに動かせば損失が減るか、体で覚えるのが狙いです。

ヒント1を見る

損失を最小にする予測は「正解そのもの」です。各要素を y の値(3, 5, 7, 9)に近づけましょう。

ヒント2を見る

例えば pred_a = np.array([3.0, 5.0, 7.0, 9.0]) なら損失は 0 になります。少しずらすとどうなるかも見てみましょう。

まとめ

  • 損失は「予測が正解からどれだけ外れたか」を表す1つの数値。
  • 基本は MSE(平均二乗誤差):差を2乗して平均する。
  • 学習のゴールは、この損失をできるだけ小さくすること。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。