🧠 STEP 5: 損失関数の理解
ニューラルネットワークが「何を学習するか」を決める重要な関数を理解しよう
📋 このステップで学ぶこと
- 損失関数とは何か?なぜ必要なのか?
- 平均二乗誤差(MSE):回帰問題の損失関数
- 交差エントロピー誤差:分類問題の損失関数
- 二値分類と多クラス分類の違い
- 損失関数の選び方
🎯 1. 損失関数とは何か?
1-1. 損失関数の基本
損失関数(Loss Function)とは、予測値と正解値がどれだけ離れているかを数値化する関数です。
「誤差関数」「コスト関数」とも呼ばれます。
学校のテストを考えてみましょう。
- 正解:先生が用意した模範解答
- 予測:あなたが書いた解答
- 損失:模範解答との「ずれ」(減点)
テストの点数が低い(損失が大きい)と、勉強法を見直しますよね?
ニューラルネットワークも同じで、損失を見て「重み」を調整します。
1-2. なぜ損失関数が必要なのか?
ニューラルネットワークの学習は、「損失を最小化する」ことです。
損失関数がなければ、「何を改善すべきか」がわかりません。
- 誤差の定量化:予測がどれだけ間違っているかを「数値」で表す
- 学習の指標:何を最小化すべきかを明確にする
- 重みの更新方向を決定:損失を減らす方向に重みを調整
1-3. 損失関数の選び方で結果が変わる
例えば、同じデータでも:
・MSE(平均二乗誤差)を使う → 大きな誤差を特に嫌う
・MAE(平均絶対誤差)を使う → すべての誤差を平等に扱う
問題の種類に合った損失関数を選ぶことが重要です。
📐 2. 平均二乗誤差(MSE)
2-1. MSEとは?
平均二乗誤差(Mean Squared Error: MSE)は、回帰問題で最もよく使われる損失関数です。
MSE = (1/n) × Σ(正解値 – 予測値)²
記号の意味:
- n:データの数
- Σ:合計を取る
- (正解値 – 予測値)²:誤差の2乗
2-2. MSEの計算手順
MSEは3つのステップで計算します。
2-3. 具体例で理解しよう
3軒の住宅価格を予測したとします。
| 住宅 | 正解価格 | 予測価格 | 誤差 | 誤差² |
|---|---|---|---|---|
| A | 100万円 | 110万円 | -10 | 100 |
| B | 200万円 | 190万円 | +10 | 100 |
| C | 300万円 | 320万円 | -20 | 400 |
誤差²の合計 = 100 + 100 + 400 = 600
データ数 = 3
MSE = 600 ÷ 3 = 200
→ 平均的に「200万円²」の誤差があることを意味します
2-4. なぜ「2乗」するのか?
理由1:正負を消す
誤差には「+10万円」「-10万円」のように正負があります。
そのまま足すと相殺されてしまいます(+10 + (-10) = 0)。
2乗すれば、どちらも正の値になります(100 + 100 = 200)。
理由2:大きな誤差を重視する
2乗すると、大きな誤差はさらに大きくなります。
誤差10 → 100、誤差20 → 400(4倍ではなく、実質2倍の重み)
→ 大きな間違いを特に嫌うようになります。
理由3:微分しやすい
2乗関数は微分が簡単(勾配降下法で使いやすい)。
2-5. Pythonで実装してみよう
def mean_squared_error(y_true, y_pred):
MSEを計算する関数を定義。y_trueは正解値、y_predは予測値。
(y_true – y_pred) ** 2
各データの誤差を2乗。**2は「2乗」を意味する。
np.mean(…)
平均を計算。これで「平均二乗誤差」の完成。
例1(完璧な予測): MSE = 0.0 例2(少しずれ): MSE = 200.0 例3(大きくずれ): MSE = 2500.0
2-6. RMSE(平均二乗誤差平方根)
MSEの問題点は、単位が「元データの2乗」になることです。
これを解決するのがRMSE(Root Mean Squared Error)です。
上の例2の場合:
MSE = 200
RMSE = √200 ≈ 14.1万円
→ 「平均的に14.1万円ずれている」と解釈できます。
→ 元のデータと同じ単位なので、直感的にわかりやすい!
MSE = 200.0 RMSE = 14.1万円
🎲 3. 交差エントロピー誤差(Cross-Entropy)
3-1. なぜ分類問題にはMSEを使わないのか?
分類問題では、出力は確率として解釈されます。
確率の誤差を測るには、MSEより交差エントロピーの方が適切です。
例:正解が「猫(1)」、予測確率が0.9の場合
MSE = (1 – 0.9)² = 0.01 ← 小さな損失
例:正解が「猫(1)」、予測確率が0.1の場合
MSE = (1 – 0.1)² = 0.81 ← それほど大きくない
→ 「自信を持って間違えた」場合のペナルティが十分に大きくない!
3-2. 交差エントロピーとは?
交差エントロピー(Cross-Entropy)は、2つの確率分布の違いを測る指標です。
「正解の確率分布」と「予測の確率分布」がどれだけ似ているかを測ります。
- 完璧な予測:交差エントロピー = 0(最小)
- 間違った予測:交差エントロピーが大きくなる
- 自信を持って間違えた:交差エントロピーが非常に大きくなる
→ 「間違いに厳しい」損失関数です!
3-3. 対数(log)の意味
交差エントロピーでは対数(log)を使います。なぜでしょうか?
以下の図は横スクロールできます。
3-4. 二値分類の交差エントロピー(Binary Cross-Entropy)
二値分類(2クラス)で使う交差エントロピーです。
BCE = -[y × log(p) + (1-y) × log(1-p)]
記号の意味:
- y:正解ラベル(0または1)
- p:予測確率(0〜1)
- log:自然対数
3-5. 計算例で理解しよう
ケース1:正解が猫(y=1)、予測確率90%(p=0.9)
BCE = -[1 × log(0.9) + 0 × log(0.1)]
= -log(0.9)
≈ 0.105(小さい損失 ✅)
ケース2:正解が猫(y=1)、予測確率50%(p=0.5)
BCE = -[1 × log(0.5) + 0 × log(0.5)]
= -log(0.5)
≈ 0.693(中程度の損失)
ケース3:正解が猫(y=1)、予測確率10%(p=0.1)
BCE = -[1 × log(0.1) + 0 × log(0.9)]
= -log(0.1)
≈ 2.303(大きな損失 ❌)
3-6. Pythonで実装(二値分類)
epsilon = 1e-15
非常に小さな値。log(0)は無限大になるのを防ぐため。
np.clip(y_pred, epsilon, 1 – epsilon)
予測値をepsilon〜(1-epsilon)の範囲に制限。
-np.mean(y_true * np.log(y_pred) + …)
交差エントロピーの式をそのまま実装。
=== 二値交差エントロピーの計算 === 正解:猫(y=1) 予測確率 90%: BCE = 0.105 予測確率 50%: BCE = 0.693 予測確率 10%: BCE = 2.303
予測確率90% → 損失0.105
予測確率50% → 損失0.693(約6.6倍)
予測確率10% → 損失2.303(約22倍)
→ 「自信を持って間違えた」場合に厳しいペナルティ!
→ これにより、モデルは正しいクラスの確率を高めることを学習します。
3-7. 多クラス分類の交差エントロピー(Categorical Cross-Entropy)
多クラス分類(3クラス以上)で使う交差エントロピーです。
CCE = -Σ yi × log(pi)
記号の意味:
- yi:正解ラベル(one-hotエンコーディング)
- pi:各クラスの予測確率
- Σ:すべてのクラスで合計
3-8. One-hotエンコーディングとは?
正解クラスだけ1、それ以外は0で表す方法です。
3-9. 計算例(多クラス分類)
正解:猫 → y = [1, 0, 0]
ケース1:自信を持って正解
予測:[0.8, 0.15, 0.05](猫80%、犬15%、鳥5%)
CCE = -[1×log(0.8) + 0×log(0.15) + 0×log(0.05)]
= -log(0.8) ≈ 0.223
ケース2:自信を持って間違い
予測:[0.1, 0.8, 0.1](猫10%、犬80%、鳥10%)
CCE = -[1×log(0.1) + 0×log(0.8) + 0×log(0.1)]
= -log(0.1) ≈ 2.303
3-10. Pythonで実装(多クラス分類)
=== カテゴリカル交差エントロピーの計算 === 正解:猫 クラス:[猫, 犬, 鳥] 予測 [0.8, 0.15, 0.05]: CCE = 0.223 予測 [0.5, 0.3, 0.2]: CCE = 0.693 予測 [0.1, 0.8, 0.1]: CCE = 2.303
🔄 4. 二値分類と多クラス分類の比較
4-1. 二値分類(Binary Classification)
例:
- スパムメール判定(スパム / 正常)
- 病気診断(陽性 / 陰性)
- 画像分類(猫 / 犬)
設定:
- 出力層:1ユニット(Sigmoid活性化)
- 損失関数:Binary Cross-Entropy
- 出力:0〜1の1つの値(確率)
4-2. 多クラス分類(Multi-Class Classification)
例:
- 手書き数字認識(0〜9の10クラス)
- 動物分類(猫、犬、鳥、馬、…)
- 感情分析(喜び、怒り、悲しみ、…)
設定:
- 出力層:クラス数のユニット(Softmax活性化)
- 損失関数:Categorical Cross-Entropy
- 出力:各クラスの確率(合計1)
4-3. 比較表
| 項目 | 二値分類 | 多クラス分類 |
|---|---|---|
| クラス数 | 2つ | 3つ以上 |
| 出力層ユニット数 | 1 | クラス数 |
| 活性化関数 | Sigmoid | Softmax |
| 損失関数 | Binary CE | Categorical CE |
| 出力の形式 | 0〜1の1つの値 | 各クラスの確率(合計1) |
4-4. 図で理解する
以下の図は横スクロールできます。
🎯 5. 損失関数の選び方
5-1. 問題タイプ別の選択ガイド
Q: 何を予測する問題ですか?
A1: 連続的な数値(価格、温度など)
→ 回帰問題 → MSE(またはMAE、RMSE)
A2: カテゴリ(クラス)
→ 分類問題 → Q2へ
Q2: クラス数はいくつ?
2クラス → Binary Cross-Entropy(出力層:Sigmoid)
3クラス以上 → Categorical Cross-Entropy(出力層:Softmax)
5-2. TensorFlow/Kerasでの設定例
以下は、TensorFlow/Kerasで各問題タイプを設定する例です。
(詳しい使い方はSTEP 6以降で学習します)
以下のコードは横スクロールできます。
5-3. まとめチャート
- 問題タイプで決まる:回帰か分類か、何クラスか
- 出力層と損失関数はセット:活性化関数と損失関数は対応している
- 標準的な組み合わせを使う:特別な理由がない限り、上記の組み合わせを使用
📝 STEP 5 のまとめ
- 損失関数は、予測値と正解値の誤差を定量化する関数
- MSE(平均二乗誤差)は回帰問題で使用、大きな誤差を重視
- 交差エントロピーは分類問題で使用、間違いに厳しいペナルティ
- 二値分類:Sigmoid + Binary Cross-Entropy
- 多クラス分類:Softmax + Categorical Cross-Entropy
- 損失関数の選択は問題タイプで決まる
損失関数は、ニューラルネットワークが「何を学習するか」を決める重要な要素です。
基本ルール:
・回帰 → MSE
・二値分類(2クラス)→ Binary Cross-Entropy
・多クラス分類(3クラス以上)→ Categorical Cross-Entropy
次のSTEP 6では、TensorFlow/Kerasのインストールと環境構築を学び、
実際にディープラーニングモデルを動かす準備をしましょう!
📝 練習問題
損失関数の役割
損失関数の説明として正しいものを選んでください。
- A. 活性化関数の一種である
- B. 予測値と正解値の誤差を定量化する
- C. データを正規化する関数である
- D. 重みの初期値を決める関数である
なぜBが正解なのか?
損失関数は、予測値と正解値がどれだけ離れているかを数値化する関数です。
この「誤差」を基に、ニューラルネットワークは重みを調整して学習します。
他の選択肢の解説:
Aが間違い:活性化関数(Sigmoid、ReLUなど)と損失関数は全く別のものです。
・活性化関数:各ニューロンの出力を変換
・損失関数:予測全体の誤差を計算
Cが間違い:データの正規化は前処理の一部であり、損失関数とは関係ありません。
Dが間違い:重みの初期値を決めるのは「重みの初期化」であり、損失関数とは別です。
MSEの適用
次の問題のうち、MSE(平均二乗誤差)を使うのに最も適切なものを選んでください。
- A. メール分類(スパム / 正常)
- B. 住宅価格の予測
- C. 手書き数字認識(0〜9)
- D. 動物分類(猫、犬、鳥)
なぜBが正解なのか?
MSE(平均二乗誤差)は回帰問題で使用します。
回帰問題とは、連続的な数値を予測する問題です。
住宅価格(100万円、200万円、…)は連続的な数値なので、MSEが適切です。
他の選択肢の解説:
A、C、Dはすべて「分類問題」です。分類問題には交差エントロピーを使います。
- A(メール分類):2クラス → Binary Cross-Entropy
- C(手書き数字):10クラス → Categorical Cross-Entropy
- D(動物分類):3クラス → Categorical Cross-Entropy
見分け方のコツ:
・「〜の値を予測」→ 回帰問題 → MSE
・「〜に分類」「〜かどうか判定」→ 分類問題 → Cross-Entropy
損失関数と活性化関数の組み合わせ
3クラス分類(猫、犬、鳥)を行う場合、出力層の設定として正しいものを選んでください。
- A. Dense(1, activation=’sigmoid’) + ‘binary_crossentropy’
- B. Dense(3, activation=’softmax’) + ‘categorical_crossentropy’
- C. Dense(3, activation=’relu’) + ‘mse’
- D. Dense(1) + ‘mse’
なぜBが正解なのか?
3クラス分類は多クラス分類なので、以下の設定が必要です:
- 出力層のユニット数:クラス数(3)
- 活性化関数:Softmax(各クラスの確率を出力)
- 損失関数:Categorical Cross-Entropy
他の選択肢の解説:
Aが間違い:これは二値分類(2クラス)の設定です。
出力が1ユニットなので、「猫か猫でないか」しか判定できません。
Cが間違い:ReLUは隠れ層で使う活性化関数です。
出力層の分類問題では使いません。また、MSEは回帰問題用です。
Dが間違い:これは回帰問題の設定です。
分類問題には使えません。
覚え方:
交差エントロピーの理解
二値分類で、正解が1(猫)のとき、以下の予測のうち最も損失が大きいものを選んでください。
- A. 予測確率 = 0.9
- B. 予測確率 = 0.7
- C. 予測確率 = 0.5
- D. 予測確率 = 0.1
なぜDが最も損失が大きいのか?
交差エントロピーでは、正解クラスの予測確率が低いほど損失が大きくなります。
正解が1(猫)なのに、予測確率が0.1(10%)ということは、
「90%の確率で猫ではない」と自信を持って間違えている状態です。
各選択肢の損失を計算:
グラフで理解:
なぜこの特性が重要か?
「間違いに厳しい」ことで、モデルは正しいクラスの確率を高めることを強く学習します。
MSEでは損失が0.81(= (1-0.1)²)ですが、交差エントロピーでは2.303と、
約2.8倍のペナルティが課されます。
これが分類問題で交差エントロピーが適している理由です。
学習メモ
ディープラーニング基礎 - Step 5