質問: パーセプトロンの頃は「閾値」がありましたが、ニューラルネットワークになって「活性化関数」が出てきました。これは全く同一のものと考えて良いのでしょうか?何か違いはありますか? 活性化関数にソフトマックス関数を用いることが多いと知りました。確率の機能をすることはわかります。も、exp(x)の代わりに絶対値やルートを求め、同じように平均をとっても良いのではないのでしょうか?なぜ、expなのですか? また、順序が変わらないとのことで、実装しないことも多いというのですが、「あえて実装するとき」はどのようなときですか?
回答: ニューラルネットワークになっても閾値は存在します。パーセプトロンの場合は計算結果が閾値を越えれば所定の値を次のノードに引き渡すという処理でしたが、ニューラルネットワークは、計算結果と閾値との差異の程度から次のノードに引き渡す値が変化するようにしています。 この変化の度合いを計算する機能が活性化関数と呼ばれるものです。よくある例えでいうと、画像を見て動物であれば1、それ以外であれば0を次のノードに引き渡すとした場合、「確実に動物である」から「動物ではない」までの間(つまり、「動物らしい」や「どちらともいえない」など)を0.8や0.5などの値で表現していると考えると何となくわかるかと思います。 活性化関数とsoftmax関数は少し違うものです。softmax関数は最終的にクラス(イヌ・ネコ・ネズミ)に属する可能性を表すものであり、活性化関数はsoftmax関数による計算に至るまでに用いられるものです。ただし、いくつかある活性化関数のうち、sigmoid関数は計算結果が0~1であること、0.5を中心に正規分布を変形したような形状であることなどからその結果を確率として扱うこともできます。しかしながら、そうした使い方はクラスが2値の場合に限られ、多クラス分類には使用できないので一般的とはいいがたいと思います。 softmax関数はexpを用いているものの、exp(x)だけで計算されているわけではありません。(計算式の説明などはhttps://mathtrain.jp/softmaxを参照するといいかと思います)これを使うことで多クラスの場合も各クラスに属する確率を計算できるので、モデル学習において便利なため用いいます。 softmaxによるクラスに属する確率の計算は、学習(ウェイトなどの更新)にとっては必須ですが、学習後の未知のデータを識別する際は、必ずしも必要ではありません。結局のところ、softmax関数のインプットが大きければ関数のアウトプットも大きくなるという意味で順序に相違はないため、softmax関数のインプットの段階で最も大きいものを識別結果としてもかまわないとしているケースが多いと思います。