ニューラル ネットワークの出力層では、確率分布を近似するためにソフトマックス関数を使用するのが一般的です。
これは指数のため計算コストが高くなります。すべての出力が正になるように Z 変換を実行し、すべての出力をすべての出力の合計で割って正規化するだけではいかがでしょうか。
ベストアンサー1
標準的な正規化と比較して、Softmax には優れた特性が 1 つあります。
これは、ニューラル ネットの低刺激 (ぼやけた画像など) に対しては均一な分布で反応し、高刺激 (つまり、大きな数字、鮮明な画像など) に対しては 0 と 1 に近い確率で反応します。
一方、標準的な正規化では、比率が同じであれば問題ありません。
ソフトマックスが10倍大きい入力を持つと何が起こるか見てみましょう。つまり、ニューラルネットが鮮明な画像を取得し、多くのニューロンが活性化されます。
>>> softmax([1,2]) # blurry image of a ferret
[0.26894142, 0.73105858]) # it is a cat perhaps !?
>>> softmax([10,20]) # crisp image of a cat
[0.0000453978687, 0.999954602]) # it is definitely a CAT !
そしてそれを標準正規化と比較する
>>> std_norm([1,2]) # blurry image of a ferret
[0.3333333333333333, 0.6666666666666666] # it is a cat perhaps !?
>>> std_norm([10,20]) # crisp image of a cat
[0.3333333333333333, 0.6666666666666666] # it is a cat perhaps !?