Pythonでニューラルネットワークの活性化関数softmax関数を実装

Share

こんにちは!!ようこそ、当ブログgcbgardenへ。管理人のsakurabaaa(@sakurabaaa_g)です。

機械学習アルゴリズムの一つの手法であるニューラルネットワークでよく使われるソフトマックス(softmax)関数をPython、numpyを用いて記述したコードをまとめてみました。

コードもあるのですぐ利用することができます。

※本プログラムは、数値計算ライブラリNumpyや描画ライブラリmatplotlibを使いJupyter Notebookでコードを実行しています。いますぐコードを実行し、結果をみてみたい方は「Jupyter Notebook」にアクセスし、「Try it in your browser」で実践してみてください。
スポンサーリンク

softmax関数について

ソフトマックス(softmax)関数は次式で定義されます。

$$softmax(x) = \frac{e^{x_i}}{\sum_{j=1}^{m}e^{x_j}}$$

例えば、行列\( x \)をsoftmax関数にいれてみると、

$$
x = [1,1,2] $$

出力は次のようになります。

$$[ 0.21194156, 0.21194156, 0.57611688]$$

出力を\( sum \)する(足し合わせる)。

$$[ 1 ]$$

合計は「1」になります。

参考A yet another brief introduction to neural networks

Pythonでsoftmax関数

例えば次のような行列\( x \)があったとします。

$$
x = \left(
\begin{array}{ccc}
1 & 1 & 3 \\
5 & 2 & 2 \\
1 & 3 & 1
\end{array}
\right)
$$

ニューラルネットワークの文脈では行(または列)単位で出力を考えます(確率分布)。

mnistで手書きの8に対してのソフトマックス
[0.05, 0.01, 0.04, 0.1, 0.02, 0.05, 0.2, 0.03, 0.4, 0.1]

左の要素から数字の0,1,2,….9の予測確率に対応(4割の確率で8だと予測している)
すべての要素を足すと1になる。

参考ソフトマックス関数実装したヅラ

上の行列\( x \)の出力は次のようになります。

$$
[ 0.21194156, 0.21194156, 0.57611688]\\
[ 0.909443 , 0.0452785 , 0.0452785 ]\\
[ 0.10650698, 0.78698604, 0.10650698] $$

行ごとに足し合わせると「1」になり、3行3列の行列をすべて足すと「3」になります。

Pythonでsoftmax関数を実装すると次のようになります。

      

np.sum()では、”axis=1″と”keepdims=True”とします。

Numpyを使ったaxis(軸)を指定については以下のサイトがわかりやすいです。

参考NumPyでのaxis指定

おわりに

softmax関数でした。

ゼロから作るDeep Learningはわかりやすくておすすめです。

この記事を書いた人。
20代。とあるネットベンチャーでがんばる働き屋さん、ブロガー。
書きたいことを気ままに書いてます!
Python、プログラミング、米株、カメラ、野球観戦、女の子がすき。趣味は新宿散策。

スポンサーリンク

Share

Follow