機械学習に詳しくなりたいブログ

機械学習や数学について勉強した内容を中心に書きます。100%趣味です。記事は数学的に厳密でなかったり誤りを含んでいるかもしれません。ご指摘頂ければ幸いです。

ソフトマックス関数

概要

2クラスの場合に確率的生成モデルを考えると、シグモイド関数で事後確率P(C_k|\mathbf{x})が表せました。今回は多クラスの場合を考えます。

ソフトマックス関数の導出

確率的生成モデル - シグモイド関数と同様の計算(ベイズの定理)により、


\displaystyle P(C_k|\mathbf{x}) = \frac{P(\mathbf{x}|C_k)P(C_k)}{\sum_{j}P(\mathbf{x}|C_j)P(C_j)} \tag{1}

となります。ここで


a_k = \ln (P(\mathbf{x}|C_k)P(C_k)) \tag{2}

とすれば、


\exp(a_k) = P(\mathbf{x}|C_k)P(C_k) \tag{3}

だから、式(1)は


\displaystyle P(C_k|\mathbf{x}) = \frac{\exp(a_k)}{\sum_{j}\exp(a_j)} \tag{4}

となり、これをソフトマックス関数と呼びます。出力範囲が[0,1]であり、


\displaystyle \sum_k \frac{\exp(a_k)}{\sum_{j}\exp(a_j)} = 1 \tag{5}

ですから、シグモイド関数と同様にソフトマックス関数の出力は確率として解釈することができます。a_kはシグモイド関数と同様に\mathbf{x}の線形結合\mathbf{w}_k^{T}\mathbf{x}でモデル化します。

2クラスのロジスティック回帰とは違い、求めるパラメータ\mathbf{w}_kはクラスごとにK種類ありますので、D次元の入力であればD\times K個のパラメータになります。

ソフトマックス関数のグラフ

ソフトマックス関数のグラフの形状を見てみます。k=1,2,3a_1 = 2.5,a_2=5.0と固定し、a_3を変化させていったときの各ソフトマックス関数の出力は以下のグラフのようになりました。


横軸がa_3で、縦軸がソフトマックス関数の出力です。グラフ中のAの区間では5.0であるa_2が最大なので、オレンジのグラフが最も高い値を出力しています。Bの区間ではa_1a_3の大小関係が逆転し、緑のグラフが青より高い値になっています。Cの区間ではa_3が最大になるので緑のグラフが最も高い値を出力します。

最大が顕著であれば1により近く、他との差が小さければ1からは離れていきます。この性質を滑らかに(微分可能)に表現したものがソフトマックス関数であると考えることができると思います。

関連:ソフトマックス関数の微分