私が見た分類タスク用のニューラル ネットワークのほとんどの例では、ソフトマックス層を出力活性化関数として使用しています。通常、他の隠れユニットは活性化関数としてシグモイド関数、tanh 関数、または ReLu 関数を使用します。ここでソフトマックス関数を使用すると、私の知る限り、数学的にもうまくいきます。
- ソフトマックス関数を隠れ層活性化関数として使用しないことの理論的正当性は何ですか?
- これに関する出版物はありますか?
私が見た分類タスク用のニューラル ネットワークのほとんどの例では、ソフトマックス層を出力活性化関数として使用しています。通常、他の隠れユニットは活性化関数としてシグモイド関数、tanh 関数、または ReLu 関数を使用します。ここでソフトマックス関数を使用すると、私の知る限り、数学的にもうまくいきます。
非表示レイヤーでアクティベーションとしてソフトマックスを使用することが最善のアイデアではない理由についての出版物は見つかりませんでした(おそらくすでに読んだQuoraの質問を除く)が、それを使用することが最善のアイデアではない理由を説明しようとしますこの場合 :
1. 変数の独立性 :変数を独立させ、無相関にし、非常にまばらにするために、多くの正則化と努力が払われます。softmax 層を非表示層として使用すると、すべてのノード (非表示変数)が線形に依存したままになり、多くの問題や不十分な一般化が発生する可能性があります。
2. トレーニングの問題 :ネットワークの動作を改善するには、隠れ層からのアクティベーションの一部を少し低くする必要があると想像してみてください。次に、自動的に残りの部分をより高いレベルで平均活性化するようにします。これにより、実際にはエラーが増加し、トレーニング段階に害を及ぼす可能性があります。
3. 数学的な問題 :モデルのアクティベーションに制約を作成すると、論理的な説明なしにモデルの表現力が低下します。私の意見では、すべてのアクティベーションを同じにする努力は価値がありません。
4. バッチ正規化の方が効果的 :ネットワークからの一定の平均出力がトレーニングに役立つ可能性があるという事実を考慮することができます。しかし一方で、バッチ正規化と呼ばれる手法がよりうまく機能することがすでに証明されていますが、隠れ層のアクティベーション関数としてソフトマックスを設定すると、学習の精度と速度が低下する可能性があることが報告されています。
ソフトマックス関数は、出力ベクトルのコンポーネントの合計が 1 になるように (少なくともほとんどの場合) 出力層にのみ使用されます (明確にするために、ソフトマックス コスト関数の式を参照してください)。これは、出力の各コンポーネント (クラス) の発生確率も意味するため、確率 (または出力コンポーネント) の合計は 1 に等しくなります。
ソフトマックス関数は、ニューラル ネットワーク内の深層学習で使用される最も重要な出力関数の 1 つです (Uniqtech による分単位でのソフトマックスの理解を参照してください)。Softmax 関数は、結果のクラスが 3 つ以上ある場合に適用されます。ソフトマックス式は、各値スコアの指数スコアに累乗された e を取り、指数スコア値を累乗した e の合計で割ります。たとえば、これら 4 つのクラスのロジット スコアが [3.00、2.0、1.00、0.10] であることがわかっている場合、確率出力を取得するために、softmax 関数を次のように適用できます。
numpy を np としてインポート
デフソフトマックス(x):
print(ソフトマックス(スコア))
出力: 確率 (p) = 0.642 0.236 0.087 0.035
すべての確率の合計 (p) = 0.642 + 0.236 + 0.087 + 0.035 = 1.00。上記のスコアで既知の任意の値を代入しようとすると、異なる値が得られます。すべての値または確率の合計は 1 になります。すべての確率の合計が 1 に等しいため、これは理にかなっています。これにより、ロジット スコアが確率スコアに変わり、より適切に予測できるようになります。最後に、softmax の出力は、多項ロジット モデルの理解と解釈に役立ちます。考えが気に入ったら、下にコメントを残してください。