ソフトマックス関数とはなんぞや
簡単にいうと
全要素をexp()関数にかけて,その和を分母とした時の割合に変換する関数
です。
詳しく
これはPythonでコードを触りながらやっていくと余裕で理解できるのでぜひ自分でコードを書いてみてください。
Numpyを使いますので,持っていない方は(いないと思いますが)インストールしてください。
conda install numpy
#次に,下のような配列を作ってみてください。
import numpy as np
a = np.array([1.3, 4.5, 3.4])
#次に,この配列をexp()にかけて,和を取ります。
a_ex = np.exp(a)
a_ex_sum = np.sum(a_ex)
#最後に,その和を分母として割合にすれば完了です。
softmax = a_ex / a_ex_sum
このような出力となります。
#[0.02967474 0.72799634 0.24232893]
すなわち,ソフトマックス関数は合計の和が1となるように正規化されたどの要素が大きいかを求める関数だったわけです。
ちなみに,exp()を通さずに行うただの平均化で計算するとこのようになります。
a = np.array([1.3, 4.5, 3.4])
a_sum = np.sum(a)
a / a_sum# 出力: array([0.14130435, 0.48913043, 0.36956522])
このようにexp()を通さないと線形なため差が出にくいことが特徴ですね。
まとめ
ソフトマックス関数は,各要素をexp()に通してその和を分母として全要素の合計が1(100%)となるようにする関数でした。