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