LoginSignup
14
13

More than 3 years have passed since last update.

研究室スライドの練習がてら

softmax関数とは?

$n$ 次元のベクトル $ \boldsymbol{x}=(x_1 ,x_2 ,\dots x_n), \boldsymbol{y}=(y_1 ,y_2 ,\dots y_n)$
に対して
$$ f(x_i)= softmax(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_i}} (i=1,2,\dots,n)$$

である。
基本的にはニューラルネットワークでの多クラス分類によく使われるため、避けて通れない関数である。

ニューラルネットワークを学んでいてこの記事に行き着いたと思うのでそのつもりで説明していこうと思う。

まず簡単な例について考えましょう。qiitaNN1.png
ソフトマックス関数とはニューラルネットワークで出力が$x_1,x_2$で出てきてそれをソフトマックス関数によって確率におきかえることによって各ラベルの可能性として出力するものなのです。
今上の図で $\boldsymbol{x}=(1,2)$ であるときの $\boldsymbol{y}$ について考えていきましょう。
分母の $\sum_{j=1}^{n} e^{x_i} $ は共通であるため先に計算します。
以降簡略化のため $Z=\sum_{j=1}^{n} e^{x_i} $ とします

$$Z=\sum_{j=1}^{2} e^{x_i}=e^{x_1}+e^{x_2}=e^1+e^2=10.107...$$

$$y_1=\frac{e^{x_1}}{Z}=\frac{e}{10.107..}\approx 0.269$$
$$y_2=\frac{e^{x_2}}{Z}=\frac{e^2}{10.107..}\approx 0.731$$

となるので $\boldsymbol{y}=(0.269,0.731)$ となります。
このことからソフトマックス関数の性質 $$\sum_{j=1}^{n} y_j=1$$ も確認できます。
要するにニューラルネットワークの出力が $\boldsymbol{x}$ だったときソフトマックス関数に通すことで $y_1$ のラベルである確率は26.9%, $y_2$ のラベルである確率は73.1%であると大雑把に言いかえることもできます。qiitaNN2.png

softmax関数の微分

本題です。
なお
$$Z=\sum_{j=1}^{n} e^{x_i} $$
としています
ソフトマックス関数の微分は任意の$y_i$に対してどの$x_k$で微分するかいろんなパターンがありますので偏微分です。いきなり $k$ がでてきましが $k,i\in [1,n]$ です。

ソフトマックス関数
$$y_i=softmax(x_i) = \frac{e^{x_i}}{\sum_{j=1}^{n} e^{x_j}}$$
$k=i$の時の微分は商の微分を使い、次のようになるはずです。
$$\frac{\partial y_i}{\partial x_i}=\frac{e^{{x_i}^\prime}Z-e^{x_i}Z^{\prime}}{Z^2}$$
この中の微分について以下にくわしく
$$e^{{x_i}^\prime}=e^{x_i}$$
$$Z=\sum_{j=1}^{n} e^{x_j}=\dots e^{x_{i-1}}+e^{x_i}+e^{i+1}+\dots$$
$$Z^{\prime}=(\sum_{j=1}^{n} e^{x_j})^{\prime}=e^{x_i}$$
これらを代入すれば
$$\frac{\partial y_i}{\partial x_i}=\frac{e^{x_i}Z-e^{x_i}e^{x_i}}{Z^2}=\frac{e^{x_i}}{Z}(1-\frac{e^{x_i}}{Z})=y_i(1-y_i)$$

$i\neq k$では
$$\frac{\partial y_i}{\partial x_j}=\frac{-e^{x_i}e^{x_j}}{Z^2}=-y_i y_j$$

これらをまとめると
$$\frac{\partial y_i}{\partial x_j}=\begin{cases}
\ y_i(1-y_i)   (i=k)\\
\
-y_i y_j   (i\neq k)
\end{cases}$$
となる。

一応これで微分結果は表せましたが、
$$\delta_{ij}=\begin{cases}
\ 1   (i=k)\\
\ 0   (i\neq k)
\end{cases}$$
を用いることで、ニューラルネットでは以下の様に表されている場合が多い
$$\frac{\partial y_i}{\partial x_j}=y_i(\delta_{ij}-y_j)$$

14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13