かき氷が食べたい。

機械学習、人工知能、python

softmax関数の学習まとめ 〜特徴と確率との関係〜

softmax関数とは

softmax関数はニューラルネットの出力層の活性化関数の一つで、特に多クラス分類問題で用いられる。数式は
f:id:neo_fox:20170611110252p:plain
で表される。

softmax関数の特徴

・0≦y≦1
・全て足し合わせると総和が1。

softmax関数と確率との関係

softmax関数の出力を確率として解釈するというのは出力の総和が1であるという性質から生まれるもので、その出力を確率として解釈するとうまくいくということみたいです。

例えば入力が[0.3, 2.9, 4.0]に対し、出力は[0.01821127, 0.24519181, 0.73659691]となります。
この時に74%の確率で3番目のクラスに分類できるとすることができる。

オーバーフロー対策

ソフトマックス関数はこのまま計算すると浮動小数点が収まりきらなくなりオーバーフローすることが多いので初めに全ての項からmax(x)を引いてから計算することでオーバーフローを回避することができる。

softmax関数の実装

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a-c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    return y