ソフトマックス関数とは?意味や計算方法は?(softmax:数式:ニューラルネットワーク:確率分布・シグモイド関数との違いなど)
ニューラルネットワークで複数の選択肢から一つを選ぶ処理には、出力値を確率として扱うための工夫が欠かせません。
その代表例がソフトマックス関数です。
分類問題の最終層で頻繁に使われる一方、数式だけを見ると難しく感じることもあるでしょう。
この記事では、ソフトマックス関数の意味、計算方法、確率分布との関係、シグモイド関数との違い、実装や学習時の注意点までを順に解説します。
ソフトマックス関数の意味と結論

それではまずソフトマックス関数の意味と、どのような場面で役立つのかについて解説していきます。
複数の数値を確率へ変換する関数
ソフトマックス関数とは、複数の数値を合計が1になるように変換し、それぞれを確率として扱える形にする関数です。
ニューラルネットワークでは、最終層が出力した生の数値をロジットと呼びます。
ロジットは正の値にも負の値にもなり、合計も1にならないため、そのままでは確率として読むことができません。
そこでソフトマックス関数を通すと、各クラスに対応する値が0から1の範囲に収まり、全クラスの値を足すと1になります。
つまりソフトマックス関数は、モデルの評価点をクラスごとの確率分布へ整える役割を担います。
たとえば画像を見て、犬、猫、鳥のどれかを判定するモデルを考えてみましょう。
出力層が犬に2.1、猫に0.7、鳥にマイナス0.4という数値を出した場合、そのままでは犬である確率を判断できません。
ソフトマックス関数を適用すれば、犬が高い確率、猫が中程度、鳥が低い確率という分かりやすい結果に変換されます。
ソフトマックス関数は、複数クラスの候補を比較しながら、各候補の確率を合計1にそろえるための関数です。
多クラス分類における出力層の標準的な仕組みとして広く利用されています。
確率分布として読める出力値
ソフトマックス関数の出力は、離散的な確率分布として解釈できます。
離散的な確率分布とは、あらかじめ決められた選択肢ごとに確率を割り当てる表現です。
先ほどの犬、猫、鳥の例なら、犬0.72、猫0.21、鳥0.07のような出力になるかもしれません。
この場合、モデルは犬を最も有力なクラスと見ています。
ただし、0.72という数字は必ずしも現実世界で72パーセントの正しさを保証するものではありません。
学習データの偏り、モデル構造、損失関数、温度パラメータなどによって、確率の信頼性は変わります。
そのため実務では、予測確率の大きさだけでなく、誤分類の傾向や検証データでの精度も確認することが大切です。
最大の確率を持つクラスを予測結果として選ぶ処理は、一般にargmaxと呼ばれます。
ソフトマックス関数は確率を作り、argmaxはその中から最も大きい確率のクラスを選ぶ処理という違いがあります。
ニューラルネットワークで使われる場面
ソフトマックス関数は、選択肢が互いに排他的な多クラス分類で特に活躍します。
排他的とは、一つの入力に対して正解ラベルが基本的に一つだけ決まる状況です。
手書き数字の認識なら、同じ画像が0と3の両方であることは通常ありません。
商品レビューの感情分析で、肯定、中立、否定のいずれか一つを選ぶケースも代表例です。
自然言語処理では、次に出現しそうな単語の候補へ確率を割り振るためにも使われます。
画像分類、音声認識、文書分類、医療画像のカテゴリ判定など、活用範囲は幅広いでしょう。
一方で、一つのデータに複数のラベルが同時に付くマルチラベル分類では、ソフトマックス関数が適さないことがあります。
この点はシグモイド関数との違いを理解するうえでも重要です。
ソフトマックス関数の数式と計算方法
続いてはソフトマックス関数の数式と、実際に確率を求める流れを確認していきます。
基本となる数式の考え方
クラスiに対するソフトマックス関数の出力は、クラスiのロジットを指数関数で変換し、すべてのクラスで指数関数化した値の合計で割ることで求めます。
softmax(xi) = exp(xi) ÷ Σ exp(xj)
xiはクラスiのロジットを表し、Σ exp(xj)は全クラスの指数関数値を足したものです。
expは自然対数の底eを使う指数関数を意味します。
指数関数を使う理由は、すべての値を正に変換し、値の差を確率の差として表現しやすくするためです。
ロジットが大きいクラスほど、指数関数を通した後の値は急激に大きくなります。
その結果、相対的に高い評価を受けたクラスへ大きな確率が割り当てられます。
重要なのは絶対値よりも、クラス間のロジットの差です。
すべてのロジットへ同じ数値を加えても、ソフトマックス関数の出力は変わりません。
三つのクラスでの計算例
ロジットが2、1、0の三つのクラスを例に、計算の流れを見てみましょう。
まずそれぞれを指数関数で変換します。
exp(2)は約7.39です。
exp(1)は約2.72です。
exp(0)は1です。
合計は約11.11になります。
次に各値を合計で割ります。
最初のクラスは約0.665、二番目のクラスは約0.245、三番目のクラスは約0.090です。
三つの確率を合計すると、おおむね1になります。
元のロジットでは最初のクラスが二番目のクラスより1だけ大きい状態でした。
ソフトマックス関数を通すことで、その差が確率の差として反映されています。
| クラス | ロジット | 指数関数による変換値 | ソフトマックス後の確率 |
|---|---|---|---|
| クラスA | 2 | 約7.39 | 約0.665 |
| クラスB | 1 | 約2.72 | 約0.245 |
| クラスC | 0 | 1 | 約0.090 |
このように、最も大きいロジットを持つクラスAが最大確率となります。
ただしクラスA以外の確率も0にはならず、モデルが迷っている程度を読み取れる点が特徴です。
ロジット差が予測へ与える影響
ソフトマックス関数では、ロジットの差が少し広がるだけで、最大確率のクラスがかなり優勢になる場合があります。
たとえばロジットが2、1、0のときと、4、2、0のときを比べると、後者のほうが最初のクラスへ確率が集中します。
すべてのロジットを2倍にすると順位は変わりませんが、分布の鋭さは変化します。
これはモデルが候補をどれほど明確に区別しているかを示す一つの見方になります。
反対に、各ロジットが近い値なら、確率分布はなだらかになります。
候補間に決定的な差を見つけられていない状態と考えられるでしょう。
確率が均等に近い出力は、モデルの判断が不確実である可能性を示すサインです。
確率分布と温度パラメータの関係
続いては確率分布の形を調整する温度パラメータについて確認していきます。
温度パラメータの基本
ソフトマックス関数には、温度パラメータTを加えた形もあります。
これはロジットをTで割ってからソフトマックス関数を計算する方法です。
softmax(xi ÷ T) = exp(xi ÷ T) ÷ Σ exp(xj ÷ T)
Tが1のときは通常のソフトマックス関数と同じ計算になります。
温度パラメータは、確率分布をどれくらい鋭くするか、あるいは平らにするかを調整する役目を持ちます。
生成AIの文章生成や画像生成の設定で温度という言葉を見かけるのも、この考え方と関係しています。
温度が低い場合と高い場合
温度が1より小さい場合、ロジットの差が強調されます。
そのため最大のロジットを持つクラスへ確率が集まりやすくなります。
予測をより確信的にしたいときには、低い温度が使われることがあります。
一方で温度を高くすると、ロジットの差が縮小され、確率分布は均等に近づきます。
複数の候補を幅広く残したい場合や、生成結果に多様性を持たせたい場合に役立つでしょう。
| 温度の状態 | 確率分布の特徴 | 主な傾向 |
|---|---|---|
| 低い温度 | 鋭い分布 | 最大確率の候補へ集中しやすい |
| 温度1 | 標準的な分布 | 元のロジット差をそのまま反映しやすい |
| 高い温度 | なだらかな分布 | 複数候補の確率が比較的近づく |
温度を変えるとクラスの順位は通常変わりませんが、確率の偏り方は大きく変わります。
ただし極端に低い温度は、一つの候補だけに確率が偏りすぎる原因になります。
高すぎる温度では、候補を絞り込めず、予測の明確さが失われることもあります。
確率の校正で注意したい点
ソフトマックス出力が0.95だからといって、必ず95パーセントの頻度で正解するとは限りません。
モデルが自信を持ちすぎる過信の状態や、反対に確信を示せない状態が起こるためです。
このような予測確率と実際の正解率のずれを調整する考え方を、確率の校正と呼びます。
代表的な方法には、検証データを用いて温度を調整する温度スケーリングがあります。
温度スケーリングでは、分類の順位を極力保ちながら、出力確率の信頼性を改善することを目指します。
医療、金融、不正検知のように判断の説明責任が重要な領域では、単なる正解率だけでなく校正の確認も重要です。
ソフトマックス関数の出力は便利な確率表現ですが、信頼度そのものと完全に同じとは限りません。
重要な判断では、検証データによる校正や閾値設計まで検討する必要があります。
シグモイド関数との違い
続いては混同されやすいシグモイド関数との違いを確認していきます。
出力の数と合計値の違い
シグモイド関数は、一つの数値を0から1の範囲へ変換する関数です。
入力xに対して、1を1足すexpのマイナスx乗で割る形で計算します。
各出力を独立して確率のように扱える点が特徴です。
これに対してソフトマックス関数は、複数の出力をまとめて扱います。
一つのクラスの確率が増えると、他クラスの確率は相対的に下がります。
ソフトマックス関数の出力総和は常に1ですが、シグモイド関数の複数出力を足した値は1とは限りません。
この性質の違いが、適した分類タスクを分けます。
多クラス分類とマルチラベル分類
一つだけ正解を選ぶ多クラス分類では、ソフトマックス関数が適しています。
数字画像を0から9のどれかに分ける問題や、問い合わせ内容を一つの部署に振り分ける問題が該当します。
一方で、複数のラベルが同時に正解になり得るマルチラベル分類では、シグモイド関数が使われることが一般的です。
写真に人物、海、夕日という複数のタグを付ける場合、それぞれのタグは同時に存在できます。
人物の確率が高くなったからといって、海の確率を下げる必要はありません。
このため各ラベルを独立に判定できるシグモイド関数が自然です。
| 比較項目 | ソフトマックス関数 | シグモイド関数 |
|---|---|---|
| 主な用途 | 多クラス分類 | 二値分類とマルチラベル分類 |
| 出力の関係 | クラス間で連動する | 各出力が独立する |
| 出力値の合計 | 必ず1 | 1とは限らない |
| 正解ラベル | 原則として一つ | 複数でもよい |
| 代表的な損失関数 | 交差エントロピー | 二値交差エントロピー |
二クラス分類での関係
二つのクラスだけを分類するケースでは、ソフトマックス関数とシグモイド関数は密接な関係を持ちます。
二つのロジットに対してソフトマックス関数を適用した結果は、ロジットの差を入力とするシグモイド関数で表せます。
そのため二値分類では、出力ユニットを一つにしてシグモイド関数を使う構成がよく採用されます。
出力ユニットを二つにしてソフトマックス関数を使う構成も理論上は可能です。
ただし実装の簡潔さやラベル表現の都合から、二値分類ではシグモイド関数が選ばれる場面が多いでしょう。
選ぶべき関数は、クラス数だけでなく、ラベル同士が排他的かどうかで判断します。
学習時の損失関数と数値安定性
続いては学習時に重要となる損失関数と、計算上の注意点を確認していきます。
交差エントロピーとの組み合わせ
ソフトマックス関数は、交差エントロピー損失と組み合わせて使われることが多い関数です。
交差エントロピー損失は、モデルが正解クラスへどれだけ高い確率を与えたかを評価します。
正解クラスの確率が高ければ損失は小さくなり、低ければ大きくなります。
この損失を小さくするように、ニューラルネットワークの重みを更新していく流れです。
正解クラスの確率をpとすると、損失はおおむねマイナスlog(p)で表されます。
pが1に近いほど損失は小さくなり、pが0に近いほど大きな損失になります。
この組み合わせは微分計算が扱いやすく、多クラス分類の学習で広く定着しています。
実務の深層学習フレームワークでは、ソフトマックス関数と交差エントロピーをまとめて計算する関数が用意されていることが一般的です。
指数関数で起きるオーバーフロー
ソフトマックス関数では指数関数を使うため、ロジットが非常に大きい場合に数値が大きくなりすぎる問題があります。
この現象はオーバーフローと呼ばれます。
たとえば非常に大きい正のロジットをそのままexpへ渡すと、コンピュータが表現できる範囲を超える可能性があります。
反対に極端に小さい値では、計算結果が0として扱われるアンダーフローも起こり得ます。
こうした数値計算上の問題は、学習の停止や損失値が非数になる原因になります。
ソフトマックス関数の実装では、最大ロジットを各ロジットから引いてから指数関数を計算する方法が基本です。
この処理をしても確率分布は変わらず、オーバーフローを避けやすくなります。
安定した計算方法
ロジットをx1、x2、x3とし、その最大値をmとします。
安定化した計算では、exp(x1マイナスm)、exp(x2マイナスm)、exp(x3マイナスm)を使います。
最大値mを引くことで、少なくとも最大の入力は0になり、指数関数の値は1になります。
すべての入力から同じmを引いているため、分子と分母には同じ倍率がかかります。
その倍率は割り算で打ち消されるため、最終的なソフトマックス出力は元の計算と一致します。
数式として正しいだけでなく、コンピュータ上で安定して動くことまで意識する必要があります。
多くのライブラリでは内部で安定化処理が行われますが、自作実装や独自の後処理では注意が必要です。
実装と活用時に押さえたいポイント
続いてはソフトマックス関数を実装し、結果を活用するときのポイントを確認していきます。
フレームワークでの扱い方
Pythonを使う深層学習では、PyTorchやTensorFlowなどのフレームワークにソフトマックス関数が用意されています。
ただし学習時には、最終層に明示的なソフトマックス関数を置かない設計も珍しくありません。
これは交差エントロピー損失の内部に、数値安定性を考慮したソフトマックス計算が組み込まれていることが多いためです。
学習用の損失関数へロジットを直接渡し、推論や表示の段階で必要に応じてソフトマックス関数を適用する構成があります。
二重にソフトマックス関数を適用すると、想定と異なる学習になる場合があります。
利用するライブラリの入力仕様を確認することが重要です。
予測結果を解釈する視点
予測結果を見るときは、最大確率のクラスだけを確認するのでは不十分なことがあります。
上位二つの確率差が小さい場合、モデルは候補の間で迷っているかもしれません。
たとえばクラスAが0.51でクラスBが0.49なら、クラスAを選んだとしても確信度は高くありません。
反対にクラスAが0.99で他がごく小さい場合は、モデルが強い確信を示しています。
ただし強い確信が誤りを意味するケースもあるため、未知データや分布外データへの注意が必要です。
確率値は判定の根拠を補助する情報であり、絶対的な保証として扱わないことが大切です。
よくある誤解と対策
よくある誤解として、ソフトマックス関数を使えば必ず精度が上がるという考え方があります。
ソフトマックス関数は出力の表現を確率分布に整える関数であり、特徴量やモデル構造そのものを改善するものではありません。
精度を高めるには、データの品質、クラス不均衡、過学習、学習率、ネットワーク設計などを総合的に見直す必要があります。
また、多ラベルの問題へソフトマックス関数を使うと、正しい複数ラベルが競合してしまうことがあります。
課題設定に応じて、ソフトマックス関数、シグモイド関数、損失関数を組み合わせることが重要です。
確率分布の可視化、混同行列、適合率、再現率、F値なども併用すると、モデルの状態をより具体的に評価できます。
まとめ
ソフトマックス関数は、ニューラルネットワークが出力した複数のロジットを、合計1となる確率分布へ変換する関数です。
一つだけ正解を選ぶ多クラス分類で特に有効であり、交差エントロピー損失と組み合わせて使われることが多いでしょう。
数式では指数関数を利用しますが、実装では最大ロジットを引く数値安定化が重要になります。
シグモイド関数との大きな違いは、出力同士が競合し、確率の合計が1になる点です。
複数ラベルが同時に正解になり得るタスクでは、シグモイド関数を選ぶほうが適切です。
ソフトマックス関数の仕組みを理解すると、分類モデルの予測確率、損失関数、温度パラメータ、出力結果の読み方までつながって見えてきます。