ニューラルネットワークの出力層では、確率分布を近似するためにsoftmax関数を使用するのが一般的です。
これは、指数のために計算に費用がかかります。すべての出力が正になるようにZ変換を実行してから、すべての出力をすべての出力の合計で除算するだけで正規化しないのはなぜですか?
標準の正規化と比較して、SoftmaxにはNice属性が1つあります。
ニューラルネットワークの低い刺激(ぼやけた画像を考える)にかなり均一な分布で反応し、高い刺激(すなわち、多数、鮮明な画像と考える)に0と1に近い確率で反応します。
標準正規化は、比率が同じである限り気にしませんが。
Soft maxの入力が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 !?
私は何ヶ月もこの質問がありました。ソフトマックスを出力関数として巧妙に推測し、ソフトマックスへの入力を対数確率として解釈したようです。あなたが言ったように、なぜ合計で割ってすべての出力を単純に正規化しないのですか?その答えは、セクション6.2.2のGoodfellow、Bengio and Courville(2016)の Deep Learning book にありました。
最後の非表示レイヤーがzをアクティベーションとして提供するとします。次に、ソフトマックスは次のように定義されます
Softmax関数のexpは、クロスエントロピー損失のログをほぼ相殺し、z_iで損失をほぼ線形にします。これにより、モデルが間違っている場合、ほぼ一定の勾配が得られ、迅速に修正できます。したがって、誤った飽和ソフトマックスが消失勾配を引き起こすことはありません。
ニューラルネットワークをトレーニングする最も一般的な方法は、最尤推定法です。 (サイズmの)トレーニングデータの尤度を最大化する方法でパラメーターシータを推定します。トレーニングデータセット全体の尤度は各サンプルの尤度の積であるため、データセットのlog-likelihoodを最大化する方が簡単です。 kでインデックス付けされた各サンプルの対数尤度の合計:
さて、ここでzが既に与えられているsoftmaxにのみ焦点を当てるので、
iはk番目のサンプルの正しいクラスです。サンプルの対数尤度を計算するために、ソフトマックスの対数をとると、次のようになります。
、zの大きな差については、およそ
まず、ここで線形コンポーネントz_iを確認します。次に、2つの場合のmax(z)の動作を調べることができます。
全体的な対数尤度は、モデルが正しくないサンプルによって支配されることがわかります。また、飽和したソフトマックスにつながるモデルが本当に正しくない場合でも、損失関数は飽和しません。これはz_jでほぼ線形です。つまり、ほぼ一定の勾配があります。これにより、モデルはそれ自体をすばやく修正できます。たとえば、これは平均二乗誤差の場合ではないことに注意してください。
それでもソフトマックスがarbitrary意的な選択のように思える場合は、ロジスティック回帰でシグモイドを使用する理由を見てみましょう。
ソフトマックスは、同様に正当化されるマルチクラス問題のシグモイドの一般化です。
ここでの説明は非常に良いことがわかりました: CS231n:視覚認識のための畳み込みニューラルネットワーク
表面上、softmaxアルゴリズムは単純な非線形(データを指数関数で拡散している)正規化のようです。ただし、それだけではありません。
具体的には、いくつかの異なるビューがあります( 上記と同じリンク ):
情報理論-情報理論の観点から、ソフトマックス関数は、予測と真実の間の相互エントロピーを最小化しようとしていると見なすことができます。
確率的ビュー-この観点から、実際には対数確率を調べているため、べき乗を実行すると生の確率になります。この場合、softmax方程式はMLE(Maximum Likelihood Estimate)を見つけます。
要約すると、softmax方程式はthe意的であるように見えますが、そうではありません。実際には、分類を正規化して、予測と真実の間の相互エントロピー/負の尤度を最小化する、かなり原則的な方法です。
Q_iの値は対数尤度を表します。確率値を回復するには、それらを累乗する必要があります。
統計アルゴリズムが対数尤度損失関数をよく使用する理由の1つは、数値的に安定していることです。確率の積は非常に小さな浮動小数点数で表される場合があります。対数尤度損失関数を使用すると、確率の積が合計になります。
別の理由は、多変量ガウス分布から引き出されると想定されるランダム変数の推定量を導出するときに、対数尤度が自然に発生することです。たとえば、最尤法(ML)推定量と最小二乗法への接続方法を参照してください。
補足として、この質問はCS理論または計算科学スタック交換により適していると思います。
Exp(x)は常に正でゼロより大きいため、負の数とゼロによる除算を処理することが理由の1つであると思います。
たとえば、a = [-2, -1, 1, 2]
合計は0になります。ゼロによる除算を避けるためにsoftmaxを使用できます。
多重分類問題を検討しています。予測変数y
は、k
カテゴリーのいずれかを取ることができます。ここで_k > 2
_です。確率論では、これは多項分布であり、多項分布は指数族と呼ばれる大きな族に属します。指数族分布の特性に従って、P(k=?|x)
の確率を再構築します。これは、ソフトマックスの式と一致します。
詳細および正式な証明については、 CS229講義ノート(Softmax回帰) を参照してください。
便利なトリックは通常、softmaxに対して実行されます:softmax(x)= softmax(x + c)、つまり、softmaxは入力の定数オフセットに対して不変です。
出力のアクティベーションが で与えられるように、softmax関数を変更するとします。
ここで、c
は正の定数です。ご了承ください c=1
は、標準のsoftmax関数に対応します。しかし、c
の異なる値を使用すると、異なる関数が得られますが、それは質的にはsoftmaxに似ています。特に、通常のソフトマックスと同様に、出力のアクティベーションが確率分布を形成することを示します。 c
が大きくなる、つまりc→∞
。出力アクティベーションの制限値は何ですかa^L_j
?この問題を解決した後、c=1
最大機能の「ソフト化」バージョンとして機能します。これが「ソフトマックス」という用語の由来です。詳細は this source (式83)から確認できます。
他にも多くの正規化関数が存在するため、softmax関数の選択は何らかの理由でと思われます。そのため、log-softmaxの損失が他の損失の選択肢よりも優れている理由は明らかではありません。
「球面損失ファミリーに属するSoftmaxの代替案の探求」 https://arxiv.org/abs/1511.05042
著者はexp
のテイラー展開と呼ばれる球状ソフトマックスと呼ばれる他のいくつかの関数を調査し、通常のsoftmax
よりもパフォーマンスが優れている場合があることを発見しました。