ソフトマックス(softmax)関数について解説!具体的に計算する!

はるか
はるか
ソフトマックス関数って何?
ふゅか
ふゅか
ソフトマックス関数は、ニューラルネットワークでよく使われる活性化関数よ!特に、分類問題で、各クラスの確率を出すのに便利なんだ。

1. ソフトマックス関数の概要

ソフトマックス関数(Softmax function)は、機械学習において、特に分類問題で広く使用される関数です。この関数は、入力ベクトルを受け取り、各要素を0から1の範囲の確率に変換し、全体で1になるように正規化します。これにより、各クラスに属する確率を出力することができます。


はるか
はるか
確率に変換?

ふゅか
ふゅか
そう、例えばある画像が猫か犬かウサギかを判別するときに、各クラスに属する確率を計算できるの!

1.1. 具体例

3つのクラスラベルがあるとき、それぞれの入力に対して出力の和が1になっていることが確認できます。

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

ソフトマックス関数は以下のように定義されます。

\[ \text{softmax}(z_i) = \dfrac{e^{z_i}}{\displaystyle\sum_{j=1}^{n} e^{z_j}} \]

ここで、

  • \( z_i \) は入力ベクトル \( z \) の要素。
  • \( K \) はクラスの総数。

また、Softmax関数は次のような\(0\) から \(1\) の範囲に変換する写像になります。

\[ \text{Softmax}: \mathbb{R}^n \to [0, 1]^n \]

2.1. 具体例

例えば、3つのクラス(クラス1, クラス2, クラス3)があり、それぞれのスコアが \( z = [2.0, 1.0, 0.1] \) であるとします。ソフトマックス関数を適用すると以下のように計算されます。

1. 各スコアの指数を計算

\[ e^{2.0} = 7.389 \]

\[ e^{1.0} = 2.718 \]

\[ e^{0.1} = 1.105 \]

2. これらの和を計算
\[ 7.389 + 2.718 + 1.105 = 11.212 \]

3. 各指数をこの和で割る

\[ \text{softmax}(2.0) = \frac{7.389}{11.212} \approx 0.659 \]

\[ \text{softmax}(1.0) = \frac{2.718}{11.212} \approx 0.242 \]

\[ \text{softmax}(0.1) = \frac{1.105}{11.212} \approx 0.099 \]

これにより、各クラスに属する確率はそれぞれ0.659、0.242、0.099となります。

3. ソフトマックス関数の性質

はるか
はるか
ソフトマックス関数の値域について教えて。
ふゅか
ふゅか
ソフトマックス関数の値域は0から1の間よ。だから確率に使えるの!

3.1. ソフトマックス関数の値域

ソフトマックス関数の値域が \(0\) から \(1\) の範囲になることを証明します。これを証明するために、次の2つの点を示します。

  • ソフトマックス関数の出力は非負である。
  • ソフトマックス関数の出力の合計は1である。

以降、ソフトマックス関数は、入力ベクトル \( \mathbf{z} = [z_1, z_2, \ldots, z_n] \) に対して次のように定義します。

\[ \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} \]

ここで、 \( \sigma(\mathbf{z})_i \) は入力ベクトルの \( i \) 番目の成分に対応するソフトマックス関数の出力です。

3.2. ソフトマックス関数の出力が非負であることの証明

ソフトマックス関数の定義から考えます。

\[ \sigma(\mathbf{z})_i = \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} \]

ここで、指数関数 \( e^{z_i} \) は常に正の値を取ります。したがって、分子 \( e^{z_i} \) は正の値です。また、分母 \(\sum_{j=1}^n e^{z_j} \) は一連の正の値の合計であり、必ず正の値を取ります。したがって、分数全体も正の値です。

つまり、

\[ \sigma(\mathbf{z})_i > 0 \]

が成り立ちます。

3.3.  ソフトマックス関数の出力の合計

ソフトマックス関数の出力の合計を計算します。

\[ \sum_{i=1}^n \sigma(\mathbf{z})_i = \sum_{i=1}^n \frac{e^{z_i}}{\sum_{j=1}^n e^{z_j}} \]

分子と分母は同じなので、この和を次のようにすることができます。

\[ \sum_{i=1}^n \sigma(\mathbf{z})_i = \frac{\sum_{i=1}^n e^{z_i}}{\sum_{j=1}^n e^{z_j}} \]

ここで、分子と分母が同じであるため、ソフトマックス関数の出力の和の結果は1になります。

\[ \sum_{i=1}^n \sigma(\mathbf{z})_i = 1 \]

ソフトマックス関数の出力は非負であり、出力の合計は1であるため、各成分 \( \sigma(\mathbf{z})_i \) は \(0\) から \(1\) の範囲に収まります。すなわち、

\[ 0 < \sigma(\mathbf{z})_i < 1 \]

が成り立つことが示されました。

ソフトマックス関数は、多クラス分類で非常に重要であり、ニューラルネットワークの学習においても重要な役割を果たします。

はるか
はるか
つまり、ソフトマックス関数の出力は0から1の範囲になるんだね。
ふゅか
ふゅか
その通り!ソフトマックス関数は多クラス分類で非常に重要。勉強してみてね!

4. 関連した記事

PR