大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

Softmax と交差エントロピー

Softmax は生のスコアを指数化し、その総和で割って、非負で合計 1 の確率分布に変えます。交差エントロピーは正解クラスの −log p_y で評価し、softmax 入力への勾配は p − y になります。

Softmax は滑らかな argmax で、スコア差を指数的な確率比に変えます。交差エントロピーは正解の確率がゼロに近づくと上限なく増え、逆伝播で softmax の飽和因子を打ち消します。本課の手書き 3 は 99.86% の確信度で 2 と誤認されます。同じ予測に対する正解クラスの修正勾配は、交差エントロピーの方が二乗誤差より 361 倍大きくなります。

スコア、確率、勾配

分類器が各クラスに出す生のスコアを logit と呼びます。正負どちらも取り、確率の制約はありません。本例は 10 個中 8 個が負で、合計は −29.52 です。

計算は、最大値 c を引き、指数を取り、総和を求め、割ります。任意の定数について softmax(s) = softmax(s − c) です。分子と分母の e^(−c) が相殺されます。最大値を引くと指数の入力がすべて 0 以下になり、指数のオーバーフローを防げます。800 をそのまま指数化すると inf / inf = NaN になります。数学上の確率は変わりませんが、浮動小数点の丸めやアンダーフローは残ります。

交差エントロピーの一般形は −Σ yᵢ log pᵢ です。one-hot ターゲットでは正解クラスだけが 1 なので −log p_y になり、p_y → 0 で上限なく増えます。対数、除算、指数を連鎖律で微分すると:

∂L/∂s = p − y

s は softmax に渡す値です。通常は元の logit z です。温度 T で割ってから渡す場合、元のスコアへの勾配は (p − y) / T になります。温度は p 自体も変えるため、外側の倍率だけの変化ではありません。

ステップ実行

既定値は MNIST テスト画像の 3、ネットワークは 784 → 25 → 25 → 10、温度は T = 1.0 です。

  1. logit:z₂ = 10.00、次点は z₃ = 3.42、残りは −1.79 から −18.15 です。
  2. 平行移動:全値から 10.00 を引くとクラス 2 は 0、クラス 3 は −6.578 です。確率を変えずに指数のオーバーフローを防ぎます。
  3. 指数化:クラス 2 は e⁰ = 1、クラス 3 は e^(−6.578) = 0.0014。差は約 719 倍の比になり、8 個の指数は 1e-5 未満です。
  4. 総和:Σ = 1.0014。最大値を引いた後の和が 1 に近いことは、一つのクラスへの集中を示します。
  5. 除算:p₂ = 0.9986、p₃ = 0.0014、残り 8 クラスの合計は 1.57e-5 です。表示値は丸めており、元の確率の合計は浮動小数点誤差を除いて 1 です。
  6. 判定:予測は確信度 99.86% の 2、正解ラベルは 3 です。
  7. 二つの損失:交差エントロピーは −log p₃ = 6.5794 nat。本課で MSE と呼ぶ ½Σ(pᵢ − yᵢ)² は 0.9972 です。one-hot と確率分布に対するこの二乗誤差の上限は 1.0 なので、その約 99.7% に達しています。交差エントロピーには上限がなく、「最悪値」とは呼べません。
  8. 同じヤコビ行列を通す:J = diag(p) − p pᵀ とすると、両者とも ∂L/∂s = J · ∂L/∂p です。交差エントロピーの入力勾配は正解クラスだけ −1/p₃ = −720.11、他は 0 です。J の第 3 列の p₃ を打ち消し、(−1/p₃)·p₃(1 − p₃) = p₃ − 1 = −0.9986 になります。二乗誤差は通常の大きさの p − y を渡すため、結果 p₃·((p₃ − 1) − pᵀ(p − y)) に p₃ が残ります。
  9. スコア勾配を比較:交差エントロピーは正解に −0.9986、誤った首位に +0.9986 を返し、勾配降下は 3 を上げて 2 を下げます。二乗誤差の正解勾配は約 0.0014 × (−1.9944) = −0.0028 で、約 361 倍弱くなります。

分類で交差エントロピーを使う理由

二乗誤差は飽和した誤予測に高い損失を与えても、更新信号は小さくなります。本例の二乗誤差は 0.9972、勾配の大きさは 0.0028 です。ほぼ完全に正しい別の例では、表示損失 0.0000、勾配 9.6e-22 です。交差エントロピーの勾配が収まる軸ではどちらも平らに見えますが、誤予測の勾配が数学上ゼロという意味ではありません。

再学習せず固定 logit の温度を T = 3.0 に上げると、正解確率は 0.0014 から 0.0935 へ、勾配比は 361 から 6.4 へ変わります。差は飽和に関係します。ただし、確信度の高い正解例では、温度を上げることで表示上なかった差が現れる場合もあり、常に差が縮むわけではありません。

素朴な grad_mse = J @ (p - t) は密な C × C 行列を作り、時間・空間とも O(C²) です。外積 p pᵀ が全要素を埋めるので J は対角行列ではありません。語彙 50,000 なら 25 億要素です。ただし本課は次の等価式を使います。

J(p − y) = p ⊙ ((p − y) − pᵀ(p − y))

これは時間・空間とも O(C) で J を作りません。二乗の計算量は素朴な実装の問題ですが、softmax の飽和による減衰はこの書き換えでは消えません。線形出力の回帰で使う二乗誤差には、同じ出力飽和の機構はありません。

境界ケース

  • p_y がゼロへアンダーフロー:直接対数を取ると無限大です。PyTorch cross_entropy や TensorFlow softmax_cross_entropy_with_logits などの log-sum-exp に融合した実装を使い、微小確率を経由しない計算にします。非有限入力への対処は別に必要です。
  • 最大値を引かない:数学上の確率は同じです。本例の最大値は 10 で e^10 ≈ 22026 なので問題化しませんが、float64 は e^710 付近で指数の範囲を超えます。
  • 正解確率が 1 に丸められる:交差エントロピー損失は 0.0000 と表示され、T = 1 では勾配は約 2.5e-11 です。両方の勾配が 1e-6 未満のとき、本課は CE/MSE 比を非表示にし、微小数同士の商による見かけの差を避けます。
  • ソフトターゲット:ラベル平滑化や蒸留の正規化済み分布でも p − y は成立します。ただし複数項が残るため −log p_y だけにはできません。

よくある間違い

  • softmax を二度適用する:PyTorch の交差エントロピーや logits 入力と指定された API にはスコアを渡します。確率を渡すと再変換され、勾配も変わります。すべての API が既定で logits を受け取るわけではないので契約を確認します。
  • nat を bit と読む:自然対数の単位は nat です。ln 10 ≈ 2.3 は 10 クラスの一様予測の損失ですが、同じ損失だけでモデルの全挙動は分かりません。bit へは ln 2 で割ります。
  • スコア差を確率比と思う:差 6.578 は約 719 倍であり、6.6 倍ではありません。
  • 確率軸を自動拡大する:集中した分布と平坦な分布を比較するには [0, 1] に固定します。
  • 二乗誤差は分類に使えないと結論する:確率を評価する損失として定義できます。ここで扱うのは softmax と組み合わせたときの飽和による最適化の問題です。

モデルの範囲

ミニバッチではなく 1 例を計算し、勾配は logit で止めます。重みへの続きは逆伝播を参照してください。温度は学習済みネットワークの固定スコアを変換するだけです。確率と二つの勾配ベクトルは、実際のモデルとテスト画像から計算しています。