機械学習Tweet前回の記事でニューラルネットワークの出力に対する活性化関数にシグモイド関数を使うことを紹介しました。今回では、分類問題をニューラルネットワークをつかって解く際に、活性化関数としてよく使われるソフトマックス関数についてまとめます。ソフトマックス関数とは数式で表すと以下のとおりになります。ソフトマックス関数の利点と特徴ソフトマックス関数の特徴としては、大きく2つにわけられます。出力の総和が1となるこの2つのうち、2番目がニューラルネットワークで使う上で重要となります。出力値の各要素の総和が1になるので、出力層の各ユニットの値を確率として解釈することができます。これにより、問題に対して確率的アプローチを取れるようになります。上記のように、ニューラルネットワークでソフトマックス関数を使うことで、出力層の各ユニットの値を確率として表現でき、統計的アプローチが取れる様になるのですが、コンピュータ上でソフトマックス関数を使う際に注意点があります。使うのですが、指数関数は入力値が増えると、出力の増加率も大きいので、値によっては桁数がたりずにオーバーフローしてしまいます。解決するか上記のオーバーフローの問題を解決するために、ソフトマックス関数の数式を、logと指数の性質を利用して変形していきます。(1)分母と分子に定数Cをかけて(2)なので(3)として、さらに別の定数を用いて(4)と表すことができる。入力信号の中で最大の値を用いるのが一般的です。正負のどちらでも問題ないので、最大値を取得した上で、それを引くことでオーバーフローを回避できます。オーバーフロー対策として、最大値cを引く。yprint(softmax_imp(a))numpyを使えば、配列に対して最大値を求めたり、各要素に対して同じ処理を行うことが容易にできるので、かなり楽にかけます。config.'月別アーカイブ参加グループプログラミングテクノロジーはてなブログをはじめよう!kaktsさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。