「ソフトマックス関数」について

ニューラルネットワーク入門

日付:2025年2月17日

ソフトマックス関数の基本的な仕組み、数学的な定義、特徴、適用例について解説します。多クラス分類での利用方法も紹介します。

はじめに

ニューラルネットワークにおける多クラス分類(Multiclass Classification)では、出力を確率として解釈する必要があります。
そのために用いられるのが ソフトマックス関数(Softmax Function) です。

ソフトマックス関数は、ニューラルネットワークの出力を 確率分布 に変換する役割を持ちます。
本記事では、その基本的な仕組み、数学的な定義、特徴、適用例について解説します。

1. ソフトマックス関数の定義

ソフトマックス関数は、任意の実数ベクトルを確率の形に変換する活性化関数です。数式で表すと以下のようになります。

y^i=exp(zi)j=1Cexp(zj)\hat{y}_i = \frac{\exp(z_i)}{\sum_{j=1}^{C} \exp(z_j)}

ここで、

  • y^i\hat{y}_i : クラス ii に対応する確率
  • ziz_i : モデルの出力(ロジット, logit)
  • CC : クラスの数(カテゴリ数)
  • exp(zi)\exp(z_i) : 指数関数(ezie^{z_i}

この関数を適用すると、すべてのクラスの確率の合計が 1 になるという特性があります。

i=1Cy^i=1\displaystyle\sum_{i=1}^{C} \hat{y}_i = 1

これにより、ニューラルネットワークの出力を 確率として解釈できる ようになります。

2. ソフトマックス関数の特徴

(1) 出力が確率分布になる

ソフトマックス関数を適用すると、各クラスの出力が (0,1)(0,1) の範囲の確率として表現されます。
そのため、多クラス分類において、「ある入力がどのクラスに属する確率が最も高いか」を判断できます。

(2) 出力値のスケールを調整

指数関数(ezie^{z_i})を使うことで、モデルの出力 ziz_i のスケールが調整され、特定のクラスの出力が極端に大きくなることを防ぎます。

例えば、以下の 3 クラスの出力(ロジット)があるとします。

クラスzz の値ソフトマックス適用前ソフトマックス適用後
クラス 12.02.00.6652
クラス 21.01.00.2447
クラス 30.10.10.0901

適用前の値と適用後の確率を比較すると、ソフトマックス関数がどのように出力を調整しているかが分かります。

3. ソフトマックス関数の数値例

具体的な計算例を見てみましょう。

(1) 例:3 クラス分類

モデルの出力(ロジット)が以下のように与えられたとします。

z=[2.0,1.0,0.1]z = [2.0, 1.0, 0.1]

それぞれの値をソフトマックス関数に適用すると、

y^1=e2.0e2.0+e1.0+e0.1=0.665\hat{y}_1 = \frac{e^{2.0}}{e^{2.0} + e^{1.0} + e^{0.1}} = 0.665 y^2=e1.0e2.0+e1.0+e0.1=0.244\hat{y}_2 = \frac{e^{1.0}}{e^{2.0} + e^{1.0} + e^{0.1}} = 0.244 y^3=e0.1e2.0+e1.0+e0.1=0.090\hat{y}_3 = \frac{e^{0.1}}{e^{2.0} + e^{1.0} + e^{0.1}} = 0.090

この結果から、

  • クラス 1 の確率が 66.5% で最も高い。
  • クラス 2 は 24.4%、クラス 3 は 9.0% で、それぞれの確率の合計が 1.0(100%) になることが分かります。

4. ソフトマックス関数の適用例

(1) 画像分類(Image Classification)

  • 手書き数字認識(MNIST)
  • 物体認識(ImageNet)

(2) 自然言語処理(NLP)

  • 単語の分類(POS tagging)
  • 次の単語予測(Language Modeling)

(3) 音声認識(Speech Recognition)

  • 音素分類
  • 感情分析

5. ソフトマックス関数のまとめ

✅ 特徴

  • 多クラス分類に適している
  • 出力が確率の形になる(合計が 1
  • 指数関数を使うため、スケール調整ができる
  • 勾配計算が効率的で誤差逆伝播(Backpropagation)と相性が良い

✅ 弱点

  • 出力のスケールが大きくなると数値的に不安定になる(オーバーフロー
    • 解決策:最大値を引く正規化(データの値を適切な範囲に収める処理) を行う
zi=zimax(z)z'_i = z_i - \max(z)

6. まとめ

ソフトマックス関数は、多クラス分類において最も一般的に使用される活性化関数です。

  • すべての出力を確率に変換し、合計 1 にする
  • 指数関数を用いてスケールを調整
  • 画像分類、NLP、音声認識など幅広い分野で使われる

ニューラルネットワークの分類問題を扱う際には、ソフトマックス関数を活用すると適切な確率分布を得ることができます。