アカデミック

【初学者向け】SoftmaxとSigmoidの関係とは。

この記事では,Softmax関数とSigmoid関数の関係性についてお伝えしていきます。2クラス分類ではSigmoid,多クラス分類ではSoftmaxを利用するのが通常ではありますが,これらの関数にはどのような関係があるのでしょうか。

実はSigmoid関数ってSoftmax関数が○○のときに相当する概念なんだよ!

と堂々とお話し(自慢)できることを目標に執筆していきます。分かりやすさを重視しているため,正確性に欠ける表現もありますが大目にみてください。

間違えている箇所がございましたらご指摘ください。随時更新予定です。他のサーベイまとめ記事はコチラのページをご覧ください。

結論

まずは結論からです。

Sigmoid関数は,Softmax関数においてクラス数が2で,一方の変数が0であるときに相当します。

は!?

となると思います。今から説明していきます。

Sigmoid関数

Sigmoid関数の定義は以下の通りです。

【Sigmoid関数】

(1)σ(x)=11+exp{x}

厳密には定数項を考えますが,今回はPytorchの実装に習って定数項はa=1としました。

Softmax関数

Softmax関数の定義は以下の通りです。

【Softmax関数】

(2)S(xi)=exp{xi}j=1Kexp{xj}

上のグラフはK=3x1=0.1x2=0.2と固定したときのx3(横軸)とその振る舞い(縦軸)を表した図です。

両者の等価性

結論でもお伝えした通り,Sigmoid関数はSoftmax関数の特別な場合に相当します。逆に言えば,Sigmoidを拡張した関数がSoftmaxということにもなります。実際に数式を追って確認していきましょう。

天下り的ですが,クラス数をK=2x0=xx1=0とします。このとき,入力としてx0x1を与えたときのSoftmax関数の出力を考えてみます。Softmaxの出力は,入力が各クラスに属する確率値と考えられます。

ここでは,1つめのクラスをC1,2つめのクラスをC2とします。つまり,S(x0)は入力がクラスC1に属する確率値を表し,S(x1)は入力がクラスC2に属する確率値を表します。

(3)S(x0)=S(x)(4)=exp{x}exp{x}+exp{0}(5)=11+exp{x}(6)=σ(x)

(7)S(x1)=S(0)(8)=exp{0}exp{x}+exp{0}(9)=111+exp{x}(10)=1σ(x)

分かりますでしょうか。シグモイドの出力とソフトマックスの出力がしっかりと対応しています。つまり,Sigomidの出力は二値変数のラベルでしたので,SoftmaxにおけるクラスをC1が「正解」,C2が「不正解」とした場合に相当しているということです。まとめます。

(11)S(x0)=σ(x)(12)S(x1)=1σ(x)

噛み砕いた説明

ある変数x[0,1]をとる変数zに変換するためには,sigmoidを利用してz=σ(x)とします。イメージとしては,xはニューラルネットワークの出力で,zは活性化関数を通した後の出力です。つまり,zは推定されたソフトなラベルに相当します。

これは,P(z=1)=σ(x)と書くこともできますよね。出てくる変数は確率値としてみなせます。つまり,同時にz0である確率も求められます。余事象を利用して,P(z=0)=1σ(x)となります。

この現象が先ほどの数式でも起こっています。Softmax関数において,クラス数を2とし,x0=xx1=0とすれば,Softmax関数の出力はそれぞれ各入力をxを確率変数とした確率値としてみなせます。つまり,S(x0)=P(x=1)であり,S(x1)=P(x=0)=1P(x=1)であるということです。

さて,先ほどの数式の結果に戻ってみましょう。整理すると,以下のようなことが分かっています。

(13)S(x0)=σ(x)(14)S(x1)=1σ(x)

となると言っているのです。見事,Softmax関数の振る舞いが,Sigmoid関数の振る舞いと一致していることが分かりました。

ABOUT ME
zuka
京都大学で機械学習を学んでいます。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

※ Please enter your comments in Japanese to prevent spam.