DEEP LEARNING

Softmax関数

ニューラルネットワークの出力層で使われる関数です。各クラスの生スコア(logits)を「合計が1になる確率分布」に変換し、「このデータがどのクラスに属するか」を確率で表現します。

INTERACTIVE CHART
62.9%
logit = 2.0
23.1%
logit = 1.0
14.0%
logit = 0.5
温度 T1.00
確率分布の鋭さ
Logits → 確率分布
左がニューラルネットワークの生出力(logits)、右がSoftmax適用後の確率分布です。 logitsは正負の任意の値ですが、Softmaxを通すと「全クラスの確率の合計が1」になります。 下のスライダーで各クラスのlogitを変更し、確率がどう変わるか試してください。
計算過程
Step 1: 各logitの指数を計算 → eˣ
e2.00 = 1.000
e1.00 = 0.368
e0.50 = 0.223
Step 2: 合計を計算 → Σeˣ
1.000 + 0.368 + 0.223 = 1.591
Step 3: 各eˣを合計で割る → 確率
: 1.000 / 1.591 = 62.9%
: 0.368 / 1.591 = 23.1%
: 0.223 / 1.591 = 14.0%
温度 T による分布の変化
温度 T が小さいほど最大スコアのクラスに確率が集中し(鋭い分布)、 T が大きいほど均等に近づきます(なだらかな分布)。T=1 が標準のSoftmaxです。
各クラスのLogit(生スコア)
2.00
クラス「猫」のスコア
1.00
クラス「犬」のスコア
0.50
クラス「鳥」のスコア
温度 T1.00
小さいほど鋭い分布(確信度が高い)、大きいほど均等(曖昧)
サンプルデータ
プリセットを選ぶと、logitと温度がリセットされます。
解説

🧠
Softmaxとは

Softmaxは、ニューラルネットワークが出力する「各クラスの生スコア(logits)」を「確率分布」に変換する関数です。 たとえば画像分類AIが「猫:2.0, 犬:1.0, 鳥:0.5」というスコアを出したとき、Softmaxを通すと「猫:66.5%, 犬:24.5%, 鳥:9.0%」のように合計100%の確率に変換されます。Sigmoidが1つのニューロンの出力を0〜1にするのに対し、Softmaxは複数のニューロンの出力をまとめて確率分布にする点が異なります。 多クラス分類(3つ以上のカテゴリに分ける問題)の出力層で必ず使われます。

Softmaxの特徴

  • 🎯確率の合計が必ず1になる:どんなlogitsを入力しても、出力される確率の合計はちょうど1(100%)になります。これにより「このデータがクラスAに属する確率は70%」のように解釈できます。上のツールでスライダーをどう動かしても、右側の棒の高さの合計は常に100%です。
  • 📊スコアの差を増幅する:指数関数(eˣ)を使うため、logitsの差が小さくても確率では大きな差になります。たとえばlogitが 2.0 と 1.0 では差はたった1ですが、確率は 66.5% vs 24.5% と約2.7倍の差になります。
  • 🌡️温度パラメータで鋭さを制御できる:温度 T=0.1 なら最も高いスコアのクラスにほぼ100%が集中し、T=5.0 なら均等に近い分布になります。LLM(ChatGPTなど)の文章生成でも温度パラメータが使われており、低温で「確実な」出力、高温で「創造的な」出力を制御しています。
  • 🔢Sigmoidの多クラス拡張:2クラスの場合、Softmaxはlogitsの差に対するSigmoidと数学的に等価です。つまりSigmoid(二値分類)の自然な一般化がSoftmax(多クラス分類)です。

🎯
ユースケース

🖼️ 画像分類
CNNの最終層でSoftmaxを使い、入力画像が「猫」「犬」「鳥」...のどれに最も近いかを確率で出力します(ImageNet, ResNetなど)
💬 自然言語処理
BERTやGPTで次の単語を予測するとき、語彙の全単語に対する確率分布をSoftmaxで計算します。語彙サイズが3万語なら3万次元のSoftmaxです
🌡️ LLMの温度制御
ChatGPTなどのLLMでは温度パラメータで出力の多様性を制御します。温度が低いと「最も確率の高い単語」を選び、高いとランダム性が増します
🎓 知識蒸留
大きなモデル(教師)の確率分布を小さなモデル(生徒)に学ばせる手法で、高温のSoftmax出力を使って「暗黙の知識」を転写します

📖
用語解説

Logits(ロジッツ)
= Softmax適用前の生スコア
ニューラルネットワークの最終層が出力する生の数値です。正の値は「そのクラスらしい」、負の値は「そのクラスらしくない」ことを意味しますが、 そのままでは確率として解釈できません。Softmaxを通して初めて確率になります。 上のツールの左側の棒グラフがlogitsです。
2.01.00.5SM確率
温度(Temperature)
= 確率分布の鋭さを制御するパラメータ
Softmaxの計算式で logit を温度 T で割ります: P(i) = eˣⁱ/ᵀ / Σeˣʲ/ᵀ。 T が小さいほどスコアの差が増幅され、最大スコアのクラスに確率が集中します(T→0 で argmax と同じ)。 T が大きいほど差が縮小され、均等分布に近づきます。 上の「温度 T による分布の変化」チャートで T=0.1 と T=5.0 を比べてみてください。
T小T大
確率分布(Probability Distribution)
= 各クラスの確率の集合(合計1)
Softmaxの出力は確率分布です。すべての値が0以上で、合計がちょうど1になります。 「猫:66.5%, 犬:24.5%, 鳥:9.0%」のように、「全体の中でどれくらいの割合か」を表します。 上のツールの右側の棒グラフがこれで、棒の高さの合計は常に100%です。
66%25%9%合計 = 100%
クロスエントロピー損失(Cross-Entropy Loss)
= Softmax出力の学習に使う損失関数
Softmaxの出力と正解ラベルの「ズレ」を測る関数で、L = -log(P(正解クラス)) で計算します。 正解クラスの確率が1に近ければ損失は0に近く、0に近ければ損失は大きくなります。 ニューラルネットワークはこの損失を最小化するように重みを更新します。
正解クラスの確率 →損失 ↑

📝
Softmaxの計算手順

計算式
P(i) = eˣⁱ / Σⱼ eˣʲ
各クラスの logit xᵢ に対して eˣⁱ を計算し、その合計で割ることで確率にします。
1
各logitの指数を計算する
logits = [2.0, 1.0, 0.5] のとき、e²·⁰ = 7.389, e¹·⁰ = 2.718, e⁰·⁵ = 1.649 を計算します。 指数関数により、スコアの差が増幅されます。
logits2.01.00.5exp7.3892.7181.649
2
合計を計算する
7.389 + 2.718 + 1.649 = 11.756。 この合計値で各eˣを割ることで、合計が1になる確率分布を作ります。
3
各eˣを合計で割る → 確率
猫: 7.389/11.756 = 62.9%、 犬: 2.718/11.756 = 23.1%、 鳥: 1.649/11.756 = 14.0%。 合計: 62.9 + 23.1 + 14.0 = 100%
数値安定性のテクニック
実際の実装では、オーバーフローを防ぐために各logitから最大値を引いてから計算します: eˣⁱ⁻ᵐᵃˣ / Σeˣʲ⁻ᵐᵃˣ。結果は同じですが、eˣ の値が巨大にならず安全です。

🔗
SigmoidとSoftmaxの関係

Sigmoid(二値分類)
出力が1つ。「Aである確率」を1つの値で表す。 σ(x) = 1/(1+e⁻ˣ)。スパムか非スパムかのような2択の分類に使用。
Softmax(多クラス分類)
出力がN個。「各クラスの確率」を合計1の分布で表す。 P(i) = eˣⁱ / Σeˣʲ。猫か犬か鳥かのようなN択の分類に使用。
数学的な等価性:2クラスの場合、Softmax([x, 0]) の第1要素は Sigmoid(x) と一致します。 つまり Softmax は Sigmoid をN個のクラスに一般化したものです。

関連コンテンツ