ソフトマックス関数

更新日時 2022/01/26
ソフトマックス関数

ソフトマックス関数とは「各成分が 00 より大きく合計が 11 になるように調整する」以下の関数のこと:
yi=exiex1+ex2++exn(i=1,,n)y_i=\dfrac{e^{x_i}}{e^{x_1}+e^{x_2}+\cdots +e^{x_n}}\:(i=1,\dots,n)

ソフトマックス関数

ソフトマックス関数の定義・意味・性質を整理しました。

目次
  • ソフトマックス関数とは

  • ソフトマックス関数と確率分布

  • 「ソフトマックス」と呼ぶ理由

  • シグモイド関数との関係

  • ソフトマックス関数の微分

ソフトマックス関数とは

ソフトマックス関数の定義式:

yi=exiex1+ex2++exn(i=1,,n)y_i=\dfrac{e^{x_i}}{e^{x_1}+e^{x_2}+\cdots +e^{x_n}}\:(i=1,\dots,n)

について,説明します。

  • nn 個の実数 (x1,,xn)(x_1,\cdots,x_n) を入力とし, nn 個の実数 (y1,yn)(y_1\cdots,y_n) を出力する関数です。
  • 例えば n=3n=3 の場合,(x1,x2,x3)(x_1,x_2,x_3) が入力で,y1=ex1ex1+ex2+ex3y_1=\dfrac{e^{x_1}}{e^{x_1}+e^{x_2}+e^{x_3}}y2=ex2ex1+ex2+ex3y_2=\dfrac{e^{x_2}}{e^{x_1}+e^{x_2}+e^{x_3}}y3=ex3ex1+ex2+ex3y_3=\dfrac{e^{x_3}}{e^{x_1}+e^{x_2}+e^{x_3}}が出力です。
  • 例えば,x=(10,2,1)x=(10,2,1) にソフトマックス関数をほどこすと,y=(0.9995,0.0003,0.0001)y=(0.9995\cdots,0.0003\cdots,0.0001\cdots) となります。 ソフトマックス関数の例

ソフトマックス関数と確率分布

性質1

ソフトマックス関数の出力は 00 から 11 の間で,合計は 11 になる。つまり,

  • 0<yi<10 < y_i < 1
  • y1++yn=1y_1+\cdots +y_n=1

確率分布の表現に使えそうですね! この性質のおかげで,ソフトマックス関数は機械学習で使われることがあります。具体的には,分類問題に対するニューラルネットワークの最終層として使われることがあります。

性質1の証明は,ソフトマックス関数の定義から簡単にできます。n=2n=2 の場合で確認してみましょう。

性質1の確認(n=2の場合)
  • ex1e^{x_1}ex2e^{x_2}00 以上なので,y1,y2y_1,y_200 から 11 の間。

  • y1+y2=ex1ex1+ex2+ex2ex1+ex2=ex1+ex2ex1+ex2=1y_1+y_2\\ =\dfrac{e^{x_1}}{e^{x_1}+e^{x_2}}+\dfrac{e^{x_2}}{e^{x_1}+e^{x_2}}\\ =\dfrac{e^{x_1}+e^{x_2}}{e^{x_1}+e^{x_2}}\\ =1

「ソフトマックス」と呼ぶ理由

ソフトマックス関数は,「マックス関数」を「ソフトにしたもの」とみなせます。

  • マックス関数とは?
    一番大きい成分を 11 にして,それ以外のものを 00 にする関数を「最大を取り出す」のでマックス関数と呼ぶことにします。

  • ソフトにするとは?
    さきほどの具体例を見るとわかりやすいです。x=(10,2,1)x=(10,2,1) にソフトマックス関数をほどこすと,y=(0.9995,0.0003,0.0001)y=(0.9995\cdots,0.0003\cdots,0.0001\cdots) でした。マックス関数の出力 (1,0,0)(1,0,0) をソフトにしたという感じです。実際,以下の性質が成り立ちます。

性質2

入力成分の中で xix_i がダントツで大きいなら,

yiy_i はほぼ 11 で他の出力成分はほぼ 00

シグモイド関数との関係

n=2n=2 の場合は,

y1=ex1ex1+ex2y_1=\dfrac{e^{x_1}}{e^{x_1}+e^{x_2}} となります(y1+y2=1y_1+y_2=1 という条件があるので,y2y_2 のことは忘れて y1y_1 だけ考えてみる)。

分母分子を ex1e^{x_1} で割ると 11+ex2x1\dfrac{1}{1+e^{x_2-x_1}} となり,シグモイド関数が登場します。

ソフトマックス関数の微分

ソフトマックス関数の微分は,出力 yiy_i を使って簡潔に表せます。

ソフトマックス関数の微分公式

yixj={yi(1yi)i=jyiyjij\dfrac{\partial y_i}{\partial x_j}= \begin{cases}y_i(1-y_i)&i=j\\-y_iy_j&i\neq j\end{cases}

つまり,

  • 出力成分 yiy_i を入力成分 xix_i で微分すると yi(1yi)y_i(1-y_i)
  • 出力成分 yiy_i を入力成分 xjx_j で微分すると yiyj-y_iy_j

証明は,商の微分公式を使って計算するだけです。

証明

表記簡略化のために,ex1++exn=Ze^{x_1}+\cdots +e^{x_n}=Z とおく。 yi=exiZy_i=\dfrac{e^{x_i}}{Z} である。

i=ji=j のとき,

yixi=exiZexiexiZ2=yi(1yi)\dfrac{\partial y_i}{\partial x_i}=\dfrac{e^{x_i}Z-e^{x_i}e^{x_i}}{Z^2}=y_i(1-y_i)

iji\neq j のとき,

yixj=exiexjZ2=yiyj\dfrac{\partial y_i}{\partial x_j}=\dfrac{-e^{x_i}e^{x_j}}{Z^2}=-y_iy_j

ソフトマックス関数という名前,何度でも呼びたくなりますね。