ソフトマックスの謎解き
マルチクラス分類への一般的なアプローチは 、クラスごとに個別のバイナリ分類器を使用することです。
各分類子は、独自の関連クラスを認識する責任があります。
最初に、単一のバイナリ分類器の構築の背後にある設計上の選択を検討してください。以下では、設計をバイナリ分類子のコレクションに拡張します。
開始点として、特徴xのベクトルを取り、入力特徴とそのパラメーターの加重和である出力yを返す線形方程式を使用します。出力y は、決定にマッピングする必要がある実数です。入力 x は、検出するクラスに属するオブジェクトを表していますか? 最も単純な選択は、 y が正の値の場合は「 my class」というメッセージを返し、 yが負の場合は分類子を非アクティブのままにすることです。
しかし、分類器の出力の不確実性/信頼性に関する情報を見逃すことになります。分類子の出力yの生の値を、結果における分類子の信頼度の尺度として返すこともできます。ただし、-∞ から +∞ の範囲は、解釈、比較、および後処理に不便です。
設計要件№1:確率として出力
代わりに、入力x が「 my class 」に属するオブジェクトを表す確率pとして解釈できる、厳密に制限された範囲の値を返す方が適切です。
したがって、問題は、確率として大まかに解釈できる値pでyを投影する方法です。
最初は、この値は範囲<0,1> に属している必要があります。次に、0.5 が決定のターニング ポイントになるはずです。最後に、 0.5より大きい値は、クラスの肯定的な検出を支持する必要があります。
数学的な観点から、連続関数φを求めます。
0は0.5に、+∞ は1に、-∞ は0に投影されます。
この場合、簡単な方法は逆エンジニアリングです: pから始めてyに戻ります。クラスpの確率は、オッズ比を使用して< 0 , +∞) 間隔で <0,1> から簡単に予測できます。
次のマッピングでは、取得した値を (-∞, +∞) にキャストする必要があります。当然の選択は対数関数です。
そして、ここで両端が合流します。< 0 , 1 > 間隔から開始し、間隔 (-∞,+∞) に達しました。これは、最初はyによって返されると想定されていました。
今のところ、対数の底B は特定されていません。
次のステップは、関係を目的のp = φ ( y ) に戻すことです。
最後に、目的の式に到達します。
ここで、 Bの値を決定する必要があります。Bのさまざまな値に対するφ関数のバリアントを示すグラフを見てみましょう。
一番小さいのはB=2.71のようです。驚くべきことに、同様の値には独自の記号eがあり、自然基底と呼ばれます。したがって、自然底対数の場合、最後の式は次の形式になります。
おめでとう!
有名なシグモイド関数を再発見しました。
あなたへの質問は次のとおりです。eは本当に最良の選択ですか? 別の値を選択していたらどうなるでしょうか? 確率論的解釈を失ったでしょうか?
これも考慮してください: yとxの間に非線形関係を使用しないのはなぜですか? φを導き出すために、 yの値が区間 (-∞,+∞) にあると仮定しただけであることを思い出してください。
多くの (たとえばM ) クラスを扱う場合、各クラスに独自のバイナリ分類器を割り当てます。
分類器が独立して動作する場合、返されるすべての確率の合計が1にならない場合があり、出力の確率的解釈に欠陥が生じます。これは今取り組むべき課題です。
設計要件 №2: 1 への合計
すべての分類器は同じxを取ります。i番目の分類器はy_iを計算します。再びp_iでy_iの射影を行いたいのですが、今回は他のすべての分類子と同期しているため、
分類子間の同期は、独立して計算されたy_i をp_iに射影する方法に関する相互合意に関するものです。単一の分類器の場合、オッズ比には 2 つの出力の確率が含まれます。確率pの「 my class 」と確率1-pの「not my class 」です。yの値が高いほど、出力 ' my class ' の可能性が高くなります。ここで、「 not my class 」出力の代わりに、より具体的に「 your class 」出力を導入する必要があります。したがって、より一般的なバージョンは次のようになります: ' my class ' 確率p_k確率p_lの「あなたのクラス」に対して。そして、私の出力y_k があなたの出力y_lよりも高いほど、「あなたのクラス」よりも「私のクラス」である可能性が高くなります。
設計要件№3: 確率間の相互関係
式 (1) の更新版は次のとおりです。
この要件は、設計要件 №1 の拡張版であることに注意してください。
タスクは、式 (2) と (3) で表される設計要件№2 と №3の両方を使用して 、次のような関数 Φ _iの式を導き出すことです。
自然底対数eを使用するという決定を既に行っているので、残りの考慮事項にそれを使用しましょう。
式 (2) に含まれる情報を利用するために、両側の合計を適用します。
合計記号の前にkで変化しない要素を抽出します。式 (2) によると、すべての確率の合計は1に等しいことに注意してください。
最後に、次の関数に到達します。
lの代わりにi を次のように書き換えることができます。
改めましておめでとうございます!
このようにして、広く知られているソフトマックス関数を最終的に再発見しました。
最終的な考え
明確な方法でソフトマックス関数にたどり着いたことを理解していただければ幸いです。私たちは、私たちの考えに沿って、啓示、物理科学からの緩い類推、または権威に頼っていません。この記事では、softmax 関数は、マルチクラスの問題に課される自然な要件に由来する直線的な推論の結果です。
私の意図は、機械学習の問題を解決するためのソフトマックス関数の起源について、より強い印象を与えることです。
Will Wolf ブログで作成されたシグモイド関数の導出に対する別の非常に刺激的なアプローチを確認することをお勧めします。
最後に、これらすべてが別の方法で達成できるかどうかを検討してください。個別に動作する分類子を使用し、後ですべてのp_i を正規化し、 p_i を正規化された値に置き換えます。
参考文献
[1] Gabriel Furnieres : Sigmoid 関数と SoftMax 関数を 5 分で。 https://towardsdatascience.com/sigmoid-and-softmax-functions-in-5-minutes-f516c80ea1f9
[2] ウィル・ウルフ:第一原理からソフトマックスを導き出す.https://willwolf.io/2017/04/19/deriving-the-softmax-from-first-principles/

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































