本日は待ちに待ったソフトマックス回帰の実装です。ロジスティックの兄さんのような存在のロジスティック。出力が確率の多値分類になっただけです。この記事では数式をゴリゴリ計算していこうと思います。
Softmax function
次元の入力に対して種類に分類する写像です。ロジスティックの場合はです、なので特に問題はなさそうですね。ではとりあえずこのソフトマックスを微分してみます。まずの時
同様にの時、
これで微分ができました。次にソフトマックス関数の実装時、大切になる次の性質を紹介します。
ソフトマックスを実装の際、何がやばいかというとオーバーフローなんです。それは指数関数を使ってるので当たり前なんですが僕のように情報上がりでない方はなぜエラーが起きるのか・オーバーフローとはなんなのかわからない方もいると思います。しかし、上の性質よりオーバーフロー対策ができます。つまり、定数を加えてもOKだよ、ということです。なのでとすることでその対策ができます。これは便利。 ではコスト関数に参ります。今回使うデータを次のようにします。
また、便宜上、となる関数を定義しておきます。するとコスト関数は次のようになります。
今からこれを微分するんですが式がちょっと複雑なので
とおきます。では微分行きましょう。
となりました。最後はちょっとだけシンプルですね!ではコーディングに移ります。用いるデータはsklearnのdigitsです。 でわ。
参考
- https://en.wikipedia.org/wiki/Softmax_function
- https://www.kdnuggets.com/2016/07/softmax-regression-related-logistic-regression.html
- http://ufldl.stanford.edu/tutorial/supervised/SoftmaxRegression/
- https://math.stackexchange.com/questions/1428344/what-is-the-derivation-of-the-derivative-of-softmax-regression-or-multinomial-l
- https://houxianxu.github.io/2015/04/23/logistic-softmax-regression/