【図解】ニューラルネットワークのソフトマックス関数とは? & Pythonで実装してみた。【連載⑤】
こんにちは、あつかんです。
今回はニューラルネットワークの出力層の設計について説明していこうと思います。
ゼロから作るDeep Learningという本を参考にさせていただいております。
またこの記事は連載形式ですので、下の記事を読んでから読むことおすすめします。
出力層の設計
ニューラルネットワークは、分類問題と回帰問題の両方に利用できます。
分類問題というのは、データのクラス分けです。
例えば、猫の画像を見せたときにそれは猫か?犬か?を分類するような問題です。
回帰問題は、ある入力から何かしらの数値を予測するものです。
たとえば、猫の画像を見せてその画像から猫の身長や体重を予測するような問題です。
分類問題と回帰問題によって出力層の活性化関数の種類が変わってきます。
分類問題ならソフトマックス関数を使い、回帰問題なら前のブログで説明した恒等関数を使用します。
今回は分類問題の焦点をあてていこうと思います。
ソフトマックス関数について
まずは、あらたにソフトマックス関数というものが出てきたので、それについて説明します。
ソフトマックス関数の式は以下のように表わされます。
kはk番目のニューロンの出力であり、nは出力層のニューロンの数です。
分子は入力信号の指数関数、分母はすべての入力信号の指数関数の和です。
図で表すと以下のようになります。
式の通り、一つの出力層に対して、すべての入力が結びついていることが確認できます。
ではソフトマックス関数を使って実際に数値を使って計算してみます。
の時、y1,y2,y3は以下のようになります。
だからなに?って感じですよね笑
次の説明でその疑問を解決します笑
ちなみにPythonで書くとこんな感じになります。
なぜソフトマックス関数なのか?
先ほどの計算結果で示したように、ソフトマックス関数の出力は0~1の実数値に落とし込むことができています。
どんな値を使っても0~1の実数値が出力されるので試してみてください。
この0~1の実数値に収めることができるというのがソフトマックス関数の重要なところです。
なぜなら、出力値を確率として解釈することができるからです。
0.1なら10%、0.25なら25%のように。
確率として解釈できるということは、例えば以下の図のようにニューラルネットワークを利用できますね(かなり強引ですが)。
上図より、ニューラルネットワークに信号(画像のピクセル値)を入力した結果、猫である確率が高いと判断されたました。
つまり、確率として扱うことにより画像に写っているモノは猫であると予測できるわけですね。
猫の画像を入力して、それが猫であるって判断を行うためにはニューラルネットワークを学習させなければなりません。
それについては今後説明します。
まとめ
今回は出力層に使われる活性化関数の一つとしてソフトマックス関数についてまとめました。
出力層にソフトマックス関数を使うと、出力の結果を0~1の範囲に実数値として落とし込めるので、確率的な表現ができることが可能になりました。
確率的な表現ができるということは、予測ができるということなので、なにかを分類するような問題に応用できます。
しかし、なにかを分類するためにはニューラルネットワークの重みなどを適切に設定しなければ正しく分類することができません。
では、ニューラルネットワークの重みはどのようにして設定するのでしょうか?
それはデータから学習させて重みを設定させます。
ニューラルネットワークの特徴はデータを学習し、重みのパラメータを自動で決定できるという点です。
次のブログではどのようにして、データを学習するのかについて述べていこうと思います!
では!