この記事では,Softmax関数とSigmoid関数の関係性についてお伝えしていきます。2クラス分類ではSigmoid,多クラス分類ではSoftmaxを利用するのが通常ではありますが,これらの関数にはどのような関係があるのでしょうか。
実はSigmoid関数ってSoftmax関数が○○のときに相当する概念なんだよ!
と堂々とお話し(自慢)できることを目標に執筆していきます。分かりやすさを重視しているため,正確性に欠ける表現もありますが大目にみてください。
結論
まずは結論からです。
Sigmoid関数は,Softmax関数においてクラス数が$2$で,一方の変数が0であるときに相当します。
は!?
となると思います。今から説明していきます。
Sigmoid関数
Sigmoid関数の定義は以下の通りです。
【Sigmoid関数】
\begin{align}
\sigma (x) &= \frac{1}{1 + \exp\{ -x \}}
\end{align}
Softmax関数
Softmax関数の定義は以下の通りです。
【Softmax関数】
\begin{align}
S(x_i) &= \frac{\exp\{x_i\}}{\sum_{j=1}^K \exp\{x_j\}}
\end{align}
両者の等価性
結論でもお伝えした通り,Sigmoid関数はSoftmax関数の特別な場合に相当します。逆に言えば,Sigmoidを拡張した関数がSoftmaxということにもなります。実際に数式を追って確認していきましょう。
天下り的ですが,クラス数を$K=2$,$x_0=x$,$x_1=0$とします。このとき,入力として$x_0$,$x_1$を与えたときのSoftmax関数の出力を考えてみます。Softmaxの出力は,入力が各クラスに属する確率値と考えられます。
ここでは,1つめのクラスを$C_1$,2つめのクラスを$C_2$とします。つまり,$S(x_0)$は入力がクラス$C_1$に属する確率値を表し,$S(x_1)$は入力がクラス$C_2$に属する確率値を表します。
\begin{align}
S(x_0) &= S(x)\\
&= \frac{\exp \{ x \}}{\exp\{ x \} + \exp\{ 0 \}}\\
&= \frac{1}{1 + \exp \{ -x \}}\\
&= \sigma (x)
\end{align}
\begin{align}
S(x_1) &= S(0)\\
&= \frac{\exp \{ 0 \}}{\exp\{ x \} + \exp\{ 0 \}}\\
&= 1 – \frac{1}{1 + \exp \{ -x \}}\\
&= 1 – \sigma (x)
\end{align}
分かりますでしょうか。シグモイドの出力とソフトマックスの出力がしっかりと対応しています。つまり,Sigomidの出力は二値変数のラベルでしたので,Softmaxにおけるクラスを$C_1$が「正解」,$C_2$が「不正解」とした場合に相当しているということです。まとめます。
\begin{align}
S(x_0) &= \sigma(x)\\
S(x_1) &= 1 – \sigma(x)
\end{align}
噛み砕いた説明
ある変数$x$を$[0,1]$をとる変数$z$に変換するためには,sigmoidを利用して$z=\sigma(x)$とします。イメージとしては,$x$はニューラルネットワークの出力で,$z$は活性化関数を通した後の出力です。つまり,$z$は推定されたソフトなラベルに相当します。
これは,$P(z=1)=\sigma(x)$と書くこともできますよね。出てくる変数は確率値としてみなせます。つまり,同時に$z$が$0$である確率も求められます。余事象を利用して,$P(z=0)=1-\sigma(x)$となります。
この現象が先ほどの数式でも起こっています。Softmax関数において,クラス数を2とし,$x_0=x$,$x_1=0$とすれば,Softmax関数の出力はそれぞれ各入力を$x$を確率変数とした確率値としてみなせます。つまり,$S(x_0)=P(x=1)$であり,$S(x_1)=P(x=0)=1-P(x=1)$であるということです。
さて,先ほどの数式の結果に戻ってみましょう。整理すると,以下のようなことが分かっています。
\begin{align}
S(x_0) &= \sigma(x)\\
S(x_1) &= 1 – \sigma(x)
\end{align}
となると言っているのです。見事,Softmax関数の振る舞いが,Sigmoid関数の振る舞いと一致していることが分かりました。