🐡

ソフトマックス関数が確率分布を出力する!?

に公開

ソフトマックス関数が入力ベクトルを確率分布に変換する工程



1. ソフトマックス関数とは?

  • 入力データを 「0以上1以下の値」に変換する もの
  • 式:
\text{softmax}(\mathbf{x}) = \left[ \frac{e^{x_1}}{\sum_{j=1}^{n} e^{x_j}}, \frac{e^{x_2}}{\sum_{j=1}^{n} e^{x_j}}, \dots, \frac{e^{x_n}}{\sum_{j=1}^{n} e^{x_j}} \right]
  • 解釈:
    ネイピア数ex_1, x_2,… ,x_n乗したそれぞれの値を、
    ネイピア数ex_1, x_2,… ,x_n乗したそれぞれの値の合計で割る
    --> 正規化されるため、出力値の合計が1になる(確率分布になる)

2. 実例を用いて理解する

  • 入力データ(ベクトル)x
\mathbf{x} = \begin{bmatrix} 2.0 \\ 1.0 \\ 0.1 \end{bmatrix}
2-1. 各要素の分子を求める
\begin{aligned} e^{2.0} &≒ 7.389 \\ e^{1.0} &≒ 2.718 \\ e^{0.1} &≒ 1.105 \end{aligned}
2-2. 各値を合計し、分母を求める
\begin{aligned} \sum_{j=1}^{n} e^{x_j} &= e^{2.0} + e^{1.0} + e^{0.1} \\ &= 7.389 + 2.718 + 1.105 \\ &= 11.212 \end{aligned}
2-3. 各値を合計で割る(各入力ベクトルの確率分布が出力される)
\begin{aligned} \text{softmax}(\mathbf{x}) &= \begin{bmatrix} \frac{e^{x_1}}{\sum_{j=1}^{3} e^{x_j}} \\[0.5em] \frac{e^{x_2}}{\sum_{j=1}^{3} e^{x_j}} \\[0.5em] \frac{e^{x_3}}{\sum_{j=1}^{3} e^{x_j}} \end{bmatrix} \\ &= \begin{bmatrix} \frac{7.389}{11.212} \\[0.5em] \frac{2.718}{11.212} \\[0.5em] \frac{1.105}{11.212} \end{bmatrix} \\ &\approx \begin{bmatrix} 0.659 \\[0.5em] 0.242 \\[0.5em] 0.099 \end{bmatrix} \end{aligned}
2-4. 出力値の各要素を合計すると1になるか確かめてみる
\begin{aligned} 0.659 + 0.242 + 0.099 = 1 \end{aligned}

Discussion