論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
Softmax
Softmax
深層学習

🔖 キーワード索引

Softmax と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。

#深層学習#Softmax#活性化関数#分類#確率

softmax」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「softmax」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

softmax確率分布化多クラス分類logit→確率log-sum-exp温度パラメータ τcross-entropyargmax 緩和数値安定化 (max 引き)Gumbel-Softmaxsoftmax 飽和sigmoid 多変量拡張

これらのキーワードは「softmax の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

💡 30秒で分かる結論

🍰 まずはやさしく

数字を確率に変える道具です。

答えがどれか分かりやすくするためです。

スマホの画像判定などで使われます。

まずは結論を短くまとめました。

Softmaxは、 ベクトルを合計 1 の確率分布に変換する関数。 多クラス分類の出力層で標準的に使う。

ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた オーバーフロー/argmax との混同/シグモイドとの混同 には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたときです。

📍 あなたが今見ているもの — 「Softmax」はどんな場面で出てくる?

🍰 まずはやさしく

分類の最後に使う仕組みです。

正解を確率で出すために使います。

都道府県のグループ分けに役立ちます。

どんな場面で使うのかを説明します。

ニューラルネット、 ロジスティック回帰の多クラス拡張、 attention 機構など、 深層学習の各所で登場。 「分類の出力」と聞いたら Softmax と思って良い。

Softmax は一見すると単独で理解できそうに見えますが、 実際には前提となる概念(測定・尺度・サンプリングなど)と組合せて初めて意味を持ちます。 「定義を覚える」より「多クラス分類の出力をどう確率分布へ正規化するか」を捉えるのが効率的です。

位置づけ:活性化関数・確率変換の 標準的な選択肢。 SSDSE-B-2026 の 47 都道府県分類タスク(例:「人口規模クラス」「高齢化クラス」など)で出力層に使う。 ロジスティック回帰の二値分類(シグモイド)を K 値に拡張したもの、 と覚えると整理しやすい。

🎨 直感で掴む

🍰 まずはやさしく

点数を割合に直すイメージです。

一番大きい値を強調して出したい時です。

犬か猫か、自信がある方を強めます。

直感的に仕組みを理解しましょう。

Softmax を一言でいうと 「複数の数 (logits) を、 合計 1 の確率に変換する関数」。 たとえばニューラルネットの最終層が「犬: 2.0、 猫: 1.0、 鳥: 0.1」という生スコアを返したとき、 softmax はこれを「犬: 0.66、 猫: 0.24、 鳥: 0.10」のように合計 1 の確率分布に変換します。 大きい値ほど確率が「強調」され、 全部足すと必ず 1 になるのが特徴です。

💡 学習のコツ:上の比喩は厳密ではない点に注意。 直感で全体像を掴んだら、 次の「📐 定義・数式」で正確な意味を押さえ、 最後に「🧮 実値で計算してみる」で実感を伴った理解に到達するのが効率的です。

📐 定義・数式

🍰 まずはやさしく

計算するためのルールです。

正確に確率を出すために使います。

テストの点数を比率にする感覚です。

数式を使って詳しく解説します。

やさしい説明で掴んだ感覚を、ここで Softmax の定義 の定義式に対応づけます。下の式は左辺 $\text{Softmax}(z_i)$ が何で決まるかを右辺で書き下したもので、Σ(合計)、分数(割り算)、exp(指数) が現れます。それぞれの記号が何の量を指すのかは、次の「🔬 数式を言葉で読み解く」で 1 つずつ確かめてください。

【Softmax の定義】
$$ \text{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} $$
各成分を指数関数で正にし、 合計で割って正規化。 指数のおかげで「最大が強調」される。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

🔬 数式を言葉で読み解く — 記号を「言葉」に翻訳

数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。

z (logits)
Softmax に入力する 正規化前の実数ベクトル。 ニューラルネットの「最終全結合層の出力」がこれ。 SSDSE-B-2026 の 47 県を「都市・郊外・地方」3 クラスに分類するなら、 z は (z_都市, z_郊外, z_地方) の 3 次元ベクトル。 大きい値ほど「そのクラスらしい」が、 値自体は確率ではない。
K (クラス数)
出力する確率分布の次元数。 二値分類なら K=2(だが普通シグモイドを使う)、 多クラスなら K≥3。 SSDSE で「47 都道府県を予測」するなら K=47、 「人口階級を 3 段階に分類」するなら K=3。
p_i (確率)
Softmax の出力。 0 ≤ p_i ≤ 1, Σp_i = 1 を満たす。 「クラス i の確率」と解釈。 ただし 真の確率ではなくモデルの信念であり、 キャリブレーションで補正が必要なことも。 SSDSE で「東京を予測しろ」なら、 47 次元ベクトルのうち東京のインデックスの p が 1 に近いことが望まれる。
e^{z_i} (指数)
分子の指数関数。 これにより負の logits も正の値になり、 大きい logits は 不釣り合いに大きく強調される(指数関数の急峻な増加)。 これが「Softmax は最大値を強調する」性質の数学的核心。
Σe^{z_j} (分母の合計)
正規化定数。 全クラスの指数を足し合わせ、 Σp_i = 1 を保証する。 数値計算上は LogSumExp トリックで安定化する。
T (温度)
Softmax(z/T) の T。 T → ∞ で一様分布、 T → 0 で argmax。 LLM のサンプリング温度と同じ。 SSDSE で「予測の不確実性を上げたい」なら T を上げる。
LogSumExp (LSE)
log(Σe^{z_j}) を安定計算する関数。 z_i から最大値を引いてから exp を取る「max-shift」トリック。 オーバーフロー対策の定石。

【全体読み下し】Softmax を音読すると「i 番目クラスの確率は、 i 番目の指数値を全クラスの指数値の合計で割ったもの」となる。 ポイントは ① 指数を取ることで「大きい値の影響を非線形に拡大」する点、 ② 合計で割ることで「全クラス確率の合計が 1」を保証する点。 シグモイド σ(z) = 1/(1+e^{-z}) は K=2 の Softmax と等価で、 「Softmax は シグモイドの K 値拡張」と理解すると整理しやすい。 SSDSE-B-2026 で「47 県分類」を行うなら、 ニューラルネットの最終層は 47 ユニット → Softmax で 47 次元確率ベクトル → クロスエントロピー損失で学習、 が標準パイプライン。 数式の「e^{z_i} / Σe^{z_j}」を眺めるだけで、 ① 確率の総和制約、 ② 順位保存、 ③ 並進不変性(z_i に定数 c を加えても出力不変)、 ④ 温度パラメータでの分布形状制御、 という 4 つの主要性質を全て読み取れる。 言葉で読み解けるようになれば、 論文の式を見ても 瞬時に意味を翻訳できる。

📚 補足:同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表を確認しましょう。

🧮 実値で計算してみる

数式だけでは「実感」が湧きにくいので、 具体的な数値で 1 度手計算してみると理解が定着します。 以下の例は、 本サイトで扱う SSDSE-B-2026 や公開教材に近い形式で用意しました。

z = (2.0, 1.0, 0.1) の Softmax:

項目計算
exp(z)(e², e¹, e^0.1)(7.39, 2.72, 1.11)
合計11.21
p(0.659, 0.242, 0.099)

合計 1.0 の確率に変換され、 最大値(z=2.0)が 66% に集中する。

手計算で得た値と、 後述の Python 実装で算出した値が一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。

🧮 数式に値を入れて手で計算する: Softmax 確率

合成 logits=[1,2,3] で Softmax を計算する。

Step 1: exp

e^1=2.718, e^2=7.389, e^3=20.086 合計 = 30.193

Step 2: 確率

p = [0.0900, 0.2447, 0.6652] 合計 = 1.0

🐍 Python で再現

1
2
3
4
import numpy as np
z = np.array([1, 2, 3])
p = np.exp(z) / np.exp(z).sum()
print(f"p: {p.round(4)}")

📤 実行結果

p: [0.09 0.2447 0.6652]

💬 手計算 (Step 2) と Python 出力が完全一致。

🎮 触って理解する — ロジットと温度を動かす

スライダーで 4 つのロジット(生スコア z)温度 T を動かすと、 Softmax が合計 1 の確率にどう変換するかがリアルタイムに見えます。 ① あるクラスの z を上げると他クラスの確率が押し下げられる(winner-take-all 傾向)、 ② T を下げると 1 クラスに集中(ハード=argmax 寄り)、 上げると一様に近づく(ソフト)、 という 2 つの性質を体感してください。 数値でロジット・exp・確率を並記しています。

📎 このスライダーで確かめられる Softmax の性質

上の操作は、 Softmax の中核的な性質を「手で触れる形」で示しています。 対応する数学的事実を整理します。

多クラス分類での役割・関連概念:ニューラルネットの最終層が返すロジットを、 このスライダーと同じ Softmax で確率へ変換するのが多クラス分類の標準形です。 2 クラス(K=2)のときは シグモイド関数と等価で、 「Softmax はシグモイドの多クラス拡張」と覚えると整理できます。 学習では出力確率と正解ラベルの 交差エントロピー(クロスエントロピー)損失(=多クラスの 対数損失 / log loss)を組み合わせるのが定石で、 「Softmax+交差エントロピー」の勾配は \(p_i - y_i\) という直感的な形になります(本ページ「🔍 深掘り 1」参照)。 なお logsumexp は本サイトに単独ページがないため、 数値安定化の道具としてここでは用語のみ示します。

🐍 Python 実装

公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。

1
2
3
4
5
6
7
8
9
import numpy as np

def softmax(z):
    z = z - z.max()           # オーバーフロー対策
    e = np.exp(z)
    return e / e.sum()

print(softmax(np.array([2.0, 1.0, 0.1])))
# [0.6590, 0.2424, 0.0986]
📤 実行例(実測) [0.65900114 0.24243297 0.09856589]

▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install numpy pandas scikit-learn scipy が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。

本サイトの全コードは 論文一覧ページ から実例として確認できます。 自分のデータで試したい場合は、 列名・欠損記号・単位の違いだけ調整すれば、 ほぼそのまま流用できます。

👣 ステップバイステップ実例

「Softmax」を初めて使う方向けに、 ハンズオン的な実行手順を整理します。 上の Python 実装と組み合わせて、 1 度自分の手でなぞってみることを強く推奨します。

  1. 環境準備:このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
  2. データ取得:本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
  3. 探索的に観察df.head()df.describe()df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
  4. 前提検証:Softmax の適用条件(ロジットが実数で発散しないか、 多クラス排他か、 温度 T が場面に合っているか)を、 可視化 (分布のヒストグラム) と数値オーバーフロー対策 (LogSumExp) で確認。 多ラベルなら sigmoid に切替。
  5. 本処理:上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
  6. 結果可視化:散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
  7. 解釈・記録:「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手を明記。
  8. 共有:Notebook を GitHub や Drive に置き、 関係者にレビュー依頼。 ピアレビューで穴が見つかることが多いので大事。

この 8 ステップを 1 度回すと、 「用語を読んで分かった気になる」段階から「実際に使える」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。

⚠️ よくある落とし穴

Softmax は「確率に変換するだけ」の単純な関数に見えますが、 実装では 数値オーバーフロー、 解釈では 確率と argmax の混同、 設計では シグモイド/温度パラメータの選択ミスで頻繁に事故が起きます。 ImageNet 分類モデルの 1000 クラス softmax で 1 位の確率 0.4 を「64%の自信」と誤解するのも典型例です。

❌ オーバーフロー
z が大きいと exp(z) が inf。 必ず最大値を引いてから計算。
❌ argmax との混同
Softmax は確率を返すが、 最大確率のクラスを採用するなら argmax。
❌ シグモイドとの混同
2 クラスならシグモイドで十分。 Softmax は多クラス。
❌ 温度の効きすぎ
T → 0 で argmax、 T → ∞ で一様。 適切に設定。
🛡 Softmax の防御策まとめ:「必ず最大値を引いてから exp (log-sum-exp トリック) でオーバーフロー回避」「2 クラスはシグモイドで十分、 softmax は 3 クラス以上に使う」「確率値の解釈には校正 (calibration) を検査」「温度 T は LLM/強化学習で 0.5-1.0 から調整」の 4 点で実装事故を防げます。

🗺 概念マップ:Softmax を中心とした学習ネットワーク

ソフトマックス関数 指数関数 exp 温度パラメータ T 多クラス分類 クロスエントロピー損失 勾配の安定化 Argmax (硬判定)

🔗 隣接手法への橋渡し

「Softmax」は 多クラス分類でロジットを確率に正規化する標準手段 であり、 上流のニューラルネット出力層と下流の cross entropy 損失・argmax 予測を繋ぐ。 温度パラメータ τ で分布の鋭さを調整でき、 知識蒸留や生成モデルのサンプリング戦略にも転用される。

⬆️ 上流: スコアの正規化

⬌ 並列: 他の判定方式

⬇️ 下流: 学習・運用

Softmax は多クラス分類の標準で、 sigmoid (2 クラス) の拡張、 クロスエントロピー損失と組み、 温度スケーリングやラベル平滑化で確率の信頼性を整えるまでが一連のセット。

🌳 手法選択フロー

「Softmax 関数」を使うかは、 多クラス分類か順位付けかで判断する。

  1. 多クラス分類で確率を欲しいか? Yes → softmax + CrossEntropy、 No → 次へ
  2. 2 値分類か? Yes → sigmoid で十分 (softmax の 2 クラス特殊形)、 No → softmax
  3. 数値安定性は確保したか? Yes → logits - max(logits) でオーバーフロー対策必須、 No → そのまま実装すると overflow

softmax は argmax の連続近似。 47 都道府県を「最大の県」と判定するとき argmax 値が同じでも、 softmax 確率を見れば「2 位 3 位との差」が分かる。

🧭 別角度で深掘り:確率単体(simplex)の幾何と「K−1 自由度」で読み解く Softmax

本ページの他の節が「指数で強調」「温度」「勾配 \(p-y\)」を扱ったのに対し、 ここでは 出力がどんな空間に住むか(幾何)入力のうち何本が本当に効くか(自由度) という 2 つの角度で Softmax を捉え直します。 この 2 視点は、 本ページ既出の性質(平行移動不変性・K=2 でシグモイド一致・数値安定化)を 1 枚の地図に統合してくれます。 姉妹ページ Softmax 関数(基礎) とも重複しない切り口です。

① 直感:出力は「確率単体」の内部だけに住む

K クラスの確率ベクトル p は「各成分 ≥ 0」「合計 = 1」を満たします。 この条件を満たす点の集合は、 K 次元空間の中の (K−1) 次元の三角形(確率単体 \(\Delta^{K-1}\))です。 K=3 なら 3 頂点をもつ正三角形の面、 K=4 なら四面体。 Softmax は実数ベクトル \(z \in \mathbb{R}^K\) を、 この単体の 内部へ写す写像だと見なせます。

② 自由度:K 本のロジットのうち効くのは K−1 本

平行移動不変性 \(\text{Softmax}(z + c\mathbf{1}) = \text{Softmax}(z)\) は「全ロジットを同じだけ動かしても出力不変」を意味します。 つまり K 本のロジットには 定数ぶんの冗長性があり、 実効的な自由度は K−1。 参照クラスを 1 つ選んで \(z_{\text{ref}} = 0\) に固定すると一意に定まります(多項ロジットの識別性 / identifiability)。

K=2 の場合(架空のロジット例) z = (z1, z2) → 差 d = z1 − z2 の 1 自由度だけが効く p1 = e^{z1} / (e^{z1}+e^{z2}) = 1 / (1 + e^{-(z1-z2)}) = σ(d) → 「K=2 の Softmax = シグモイド」は 自由度 K−1 = 1 の必然

この視点は実務にも効きます。 分類器の最終層の重み行列は「全クラスに共通の定数ベクトル」ぶんだけ不定なので、 重みやロジットの絶対値そのものを解釈しない/全ロジットへ素朴に正則化を掛けると参照の任意性と干渉しうる、 という戒めになります。

③ 落とし穴:確信度は「絶対値」ではなく「ロジット差(gap)」で決まる

自由度が K−1 という事実の直接の帰結として、 最大確率はおおむね 1 位ロジットと 2 位ロジットの差(logit gap / margin)で決まり、 ロジットの絶対値には依りません。 「logit = −2.3 だから低い」といった単独の絶対値評価は無意味で、 必ず他クラスとの差で見ます。

架空のロジット例(gap だけが効く) z = (5.0, 3.0, 1.0) 1位−2位 gap = 2.0 → p ≈ (0.867, 0.117, 0.016) z = (105, 103, 101) gap 同じ 2.0 → p ≈ (0.867, 0.117, 0.016) ← 絶対値+100でも不変 z = (5.0, 4.5, 1.0) gap 縮小 0.5 → p ≈ (0.615, 0.373, 0.011) ← 1位2位が拮抗し自信低下

「🎮 触って理解する」スライダーで 4 本を同量だけ動かしても棒が変わらないのは、 まさにこの「絶対値は効かず gap だけが効く」現象です。 境界クラス(本ページ「深掘り 17」の愛知など)で確率が拮抗するのも gap が小さいから。

④ 落とし穴:オーバーフロー閾値は浮動小数点精度で桁違い

本ページの他所で触れた「z > 700 で exp が inf」は、 あくまで float64(倍精度)の話です。 実務の多くは float32、 深層学習では混合精度の fp16 も使い、 閾値は桁違いに低くなります。 max-shift(数値安定化)は低精度ほど死活的だと分かります。

精度別 exp オーバーフロー閾値(IEEE 754) float64 : 最大 ≈ 1.8e308 → exp は 約 z = 709.8 で inf float32 : 最大 ≈ 3.4e38 → exp は 約 z = 88.7 で inf ← 実務の既定精度 fp16 : 最大 = 65504 → exp は 約 z = 11.09 で inf ← 混合精度学習で頻発

Attention で \(QK^T/\sqrt{d_k}\) と \(\sqrt{d_k}\) で割るのも、 スコアを小さく保って(低精度でも)Softmax を安全かつ非飽和に通すためと読めます。 自前実装で fp16 を使うなら、 max-shift 済みでも念のため log 領域(log_softmax)で計算するのが安全です。

⑤ 発展:単体への「射影」として代替関数を位置づける

Softmax を「単体内部への滑らかな写像」と見ると、 代替関数の立ち位置が一望できます。 Sparsemax は入力の単体への最近点ユークリッド射影で、 境界(=一部が厳密に 0)に触れられる(だから疎になる)。 Gumbel-Softmax は単体の頂点付近を確率的にサンプルして離散選択を微分可能に近似する。 温度 T は「内部のどこへ寄せるか」の 1 パラメータ制御で、 T 大なら重心 1/K(単体の中心)へ、 T 小なら頂点へ向かいます。 本ページ「深掘り 6」「兄弟関数の比較表」を、 この幾何地図の上で読み直すと整理が一段進みます。

🔗 この角度から辿ると良い関連ページ

※ 上のロジットは仕組みを示す架空例。 確率は e を底とした Softmax の手計算値(小数第 3 位で丸め)。 浮動小数点の閾値は IEEE 754 の定数から算出したもので、 SSDSE の実測値ではありません。