交差エントロピー vs MSE 損失シミュレーター 戻る
機械学習

交差エントロピー vs MSE 損失シミュレーター

二値分類で「なぜ交差エントロピーを使い、平均二乗誤差(MSE)を使わないのか」を体感するツールです。シグモイドへの入力ロジット z と正解ラベル y を変えると、両方の損失と勾配がリアルタイムで分かり、確信を持って間違えたときにMSEの勾配が消える様子を可視化できます。

パラメータ設定
ロジット z(シグモイド入力)
モデルの生出力。p = σ(z) でシグモイドを通り予測確率になる
正解ラベル y
この入力が属する真のクラス(0 または 1)
計算結果
予測確率 p
交差エントロピー損失 CE
MSE損失
CE勾配 |dCE/dz|
MSE勾配 |dMSE/dz|
勾配比 CE/MSE
損失曲線の比較 — 動作点アニメーション

予測確率 p に対する交差エントロピー損失(急峻に立ち上がる曲線)とMSE損失(なだらかな放物線)を、現在の正解ラベル y について重ねて表示します。現在の動作点 p を両曲線上にマークします。

損失 vs 予測確率 p
勾配 vs ロジット z
理論・主要公式

$$\text{CE}=-\big[y\ln p+(1-y)\ln(1-p)\big],\qquad \text{MSE}=(p-y)^2$$

二値分類の損失。p:シグモイド予測確率 p = σ(z) = 1/(1+e^−z)、y:正解ラベル(0 または 1)。

$$\frac{\partial \text{CE}}{\partial z}=p-y,\qquad \frac{\partial \text{MSE}}{\partial z}=2(p-y)\,p(1-p)$$

ロジット z に関する勾配。CEの勾配は誤差 p−y そのもの。MSEの勾配にはシグモイドの導関数 p(1−p) が掛かる。

出力が飽和(p≈0 または p≈1)すると p(1−p)→0 となり、MSEの勾配は消失するが、CEの勾配は ±1 付近を保つ。これが分類で交差エントロピーが標準損失となる理由である。

交差エントロピーとMSEとは

🙋
機械学習の「損失関数」って、予測と正解のズレを測る関数ですよね。回帰でMSE(平均二乗誤差)を使うのは分かるんですけど、分類だとなぜ交差エントロピーなんですか?二乗誤差じゃダメなんですか?
🎓
いい質問だね。結論から言うと、分類でもMSEは「一応」使えるんだ。予測確率 p と正解 y の差を二乗するだけだから、ちゃんと0以上の値になるし、p=y で最小になる。だから初心者がうっかりMSEを分類に使ってしまうこともある。でも実際に学習させると、交差エントロピーより明らかに遅い。その原因が「勾配」にあるんだ。
🙋
勾配ですか。損失そのものじゃなくて、その微分が問題になるんですね。
🎓
そう。学習はパラメータを「勾配の向きに少しずつ動かす」ことで進む。だから本当に効くのは損失の値じゃなくて勾配の大きさなんだ。左でロジット z を −8 に振ってみて。正解が y=1 なのに z が大きく負だと、モデルは「クラス0だ」と確信を持って間違えている状態だ。このとき右の「MSE勾配」を見ると、ほぼ0になっているはずだよ。
🙋
本当だ、MSE勾配が0.000に近いです。一番大きく間違えているのに勾配が消えてる…これは困りますね。
🎓
まさにそれが「勾配消失」だ。理由はシグモイドの形にある。MSEの勾配は dMSE/dz = 2(p−y)·p(1−p) で、シグモイドの微分 p(1−p) という項が掛かっている。p が0や1に飽和するとこの p(1−p) がほぼ0になる。つまり確信を持って間違えた瞬間こそ大きく直したいのに、ブレーキがかかってしまうんだ。一方、交差エントロピーの勾配 dCE/dz = p−y にはこの項がない。だから z=−8 でも勾配は ±1 付近を保っている。右の「勾配 vs ロジット」グラフを見ると、両者の差が一目で分かるよ。
🙋
CEの勾配が p−y というシンプルな式になるのはなぜですか?偶然にしてはきれいすぎます。
🎓
偶然じゃないんだ。シグモイドと交差エントロピーを合成して連鎖律で微分すると、交差エントロピー側に出てくる 1/p や 1/(1−p) と、シグモイドの微分 p(1−p) がちょうど打ち消し合う。その結果が p−y。これは設計の妙でね、シグモイドと交差エントロピーは情報理論的に「対になる」組み合わせなんだ。だから実務では迷わずこのペアを使う。回帰ならMSE、二値分類ならシグモイド+交差エントロピー、多クラスならソフトマックス+交差エントロピー、と覚えておけばまず外さないよ。

よくある質問

ロジット z に関する勾配を見ると理由が分かります。交差エントロピー損失の勾配は dCE/dz = p − y で、誤差そのものに比例します。一方MSE損失の勾配は dMSE/dz = 2(p−y)·p(1−p) で、シグモイドの導関数 p(1−p) が掛かります。モデルが確信を持って間違えると p が0または1に飽和し p(1−p)→0 となるため、MSEの勾配はほぼゼロに消失します。交差エントロピーは誤差が大きいほど強い勾配を保つため、分類では標準の損失関数として使われます。
勾配消失とは、損失が大きいのにパラメータ更新の勾配がほぼゼロになり、学習が進まなくなる現象です。シグモイド出力 + MSE損失の組み合わせでは、出力が飽和した領域(p≈0 または p≈1)でシグモイドの微分 p(1−p) が極端に小さくなります。MSEの勾配にはこの p(1−p) が掛かるため、確信を持って間違えた瞬間こそ最も大きく更新したいのに勾配が消えてしまいます。交差エントロピーは勾配に p(1−p) が入らないため、この問題を回避できます。
交差エントロピー CE = −[y·ln p + (1−y)·ln(1−p)] では、p がちょうど0または1になると ln が −∞ に発散し、損失が Infinity や NaN になります。実装では予測確率 p を [1e−12, 1−1e−12] のような微小区間でクランプ(クリップ)してから対数を取るのが定石です。本ツールも同じクランプを行っており、ロジット z を ±8 まで振っても損失値が NaN や Infinity になりません。
シグモイド p = σ(z) と交差エントロピー CE を合成して連鎖律で微分すると、シグモイドの導関数 p(1−p) と交差エントロピーの p に関する微分がちょうど打ち消し合い、dCE/dz = p − y というシンプルな式になります。これは「予測と正解の差」がそのまま勾配になることを意味し、誤差が大きいほど更新が大きくなる望ましい性質です。この打ち消しが起きるのは、シグモイドと交差エントロピーが情報理論的に対になる組み合わせだからです。

実世界での応用

ニューラルネットワークの分類タスク:画像分類、スパムメール判定、医療画像の良性/悪性判定など、出力がクラス確率になるタスクでは交差エントロピーが事実上の標準損失です。二値分類ではシグモイド + 二値交差エントロピー、多クラス分類ではソフトマックス + カテゴリカル交差エントロピーを使います。PyTorch の BCEWithLogitsLoss や TensorFlow の categorical_crossentropy はいずれもこの設計で、ロジットを直接受け取って数値的に安定な形で損失を計算します。

ロジスティック回帰:古典的な統計モデルであるロジスティック回帰も、内部では「シグモイド + 交差エントロピー」をそのまま使っています。交差エントロピー損失の最小化は、ベルヌーイ分布の最尤推定と数学的に等価です。つまり交差エントロピーを使うことは「観測データが最も尤もらしくなるようにパラメータを選ぶ」という統計的に正当な手続きであり、MSEにはこの解釈がありません。

勾配ベース最適化の安定化:深層学習では層を重ねるほど勾配が伝播の途中で小さくなりがちです。出力層でMSEを使うと、そこにさらに勾配消失が加わり学習がほぼ止まります。出力層を交差エントロピーにするだけで、少なくとも出力層からの勾配は誤差に比例した健全な大きさになり、その分だけ学習が安定します。これは ReLU 活性化やバッチ正規化と並ぶ、勾配消失対策の基本中の基本です。

機械学習教育・モデルのデバッグ:「分類モデルの学習が進まない」というトラブルの典型的な原因の一つが、損失関数の取り違えです。本ツールのような可視化で「飽和領域でMSE勾配が消える」ことを一度体感しておくと、学習が止まったときに損失関数・活性化関数の組み合わせを真っ先に疑えるようになります。損失曲線がほぼ平らなまま動かないときは、勾配消失を起こす設計になっていないか確認するのが定石です。

よくある誤解と注意点

まず多い誤解が、「MSEは分類に使えない」という言い切りです。正確には「使えるが学習が遅い・不安定になりやすい」が正しい表現です。MSE損失自体は p=y で最小になる正しい形をしており、損失の値だけ見れば分類の指標として破綻していません。問題は損失の値ではなく勾配にあります。確信を持って間違えた領域で勾配が消えるため、最適化が進まないのです。「損失が小さい=良いモデル」ではなく「勾配が誤差に応じて適切に出る損失を選ぶ」という視点が重要です。

次に、「交差エントロピーはシグモイドなしでも勾配が p−y になる」という思い込み。dCE/dz = p−y というきれいな式が成り立つのは、シグモイド(または多クラスならソフトマックス)と交差エントロピーを必ずペアで使ったときだけです。例えば出力に ReLU や恒等写像を使って交差エントロピーだけ被せても、この打ち消しは起こりません。さらに、シグモイドを通した確率に対してもう一度シグモイドを掛けるような二重適用や、ロジットと確率を混同した実装はバグの典型です。BCEWithLogitsLoss のように「ロジットを渡す関数」と「確率を渡す関数」を取り違えないよう注意してください。

最後に、「勾配消失はMSEだけの問題」と考えるのも危険です。勾配消失の根本原因はシグモイド/tanh の飽和であり、損失関数を交差エントロピーにしても、隠れ層に飽和しやすい活性化関数を多段に重ねれば勾配は依然として小さくなります。交差エントロピーが解決するのは「出力層の損失由来の勾配消失」だけです。深いネットワーク全体の勾配消失には、ReLU 系活性化、残差接続(スキップ接続)、適切な重み初期化、バッチ正規化などを組み合わせる必要があります。交差エントロピーは万能薬ではなく、勾配消失対策の一手にすぎない、と理解しておきましょう。

使い方ガイド

  1. ロジット z を -5 から +5 の範囲で調整してシミュレーションを開始します
  2. 正解ラベル y を 0(負例)または 1(正例)に設定します
  3. リアルタイムで予測確率 p = 1/(1+e^-z)、交差エントロピー損失 CE = -[y·log(p) + (1-y)·log(1-p)]、MSE損失 = (p-y)²、各勾配を確認します
  4. z が正解ラベルと逆方向の極値(例:y=1 で z=-4)にあるとき、MSE勾配が接近 0 になる現象を観察します
  5. 勾配比グラフで交差エントロピーが常に安定した学習信号を送ることを視覚化します

具体的な計算例

医療画像診断で悪性腫瘍判定(y=1)の場合、ロジット z=2.0 での結果:予測確率 p≈0.881、交差エントロピー損失≈0.126、MSE損失≈0.014、CE勾配≈0.119、MSE勾配≈0.237。一方 z=-2.0(確信を持った誤り)では p≈0.119、CE損失≈2.126、MSE損失≈0.786 であるのに対し、MSE勾配は僅か≈0.237 に消失し、CE勾配は≈0.881 と高いまま。この勾配差がニューラルネットワークの収束速度を左右します。

実務での注意点