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

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

多クラスロジスティック回帰

概要

多クラスロジスティック回帰で得られる結果は以下の図のようなイメージです。左のグラフは、各クラスの識別関数(ソフトマックス)の出力結果、右のグラフは各識別関数の最大値を識別結果としたときの分類境界です。この分類境界が適切になるように各識別関数の係数\mathbf wの最適解を求めます。

この例は、平面上にまんべんなく訓練データを散りばめたので、ソフトマックスの出力を見ると各クラス間の境界が断崖絶壁のような形をしていますが、分布によってはもっと滑らかな出力になると思います。

最尤推定と数値計算のための勾配導出

尤度関数から定義される誤差関数とその勾配を求めます。

データ\mathbf{x}が与えられたとき、それがクラスC_kに属する事後確率は、


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

として、


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

と書けました。a_k\mathbf{w}_k^{T}\mathbf{x}でモデル化します。(参考:ソフトマックス関数

いま、訓練データ(\mathbf{x}_1, \cdots , \mathbf{x}_N )(\mathbf{t}_1, \cdots , \mathbf{t}_N )が与えられているとします。\mathbf{t}_nは1ofK符号です。尤度関数は


\displaystyle L(\mathbf{w}) = \prod_{n=1}^{N} \prod_{k=1}^{K} y_{nk}^{t_{nk}} \tag{3}

となります。t_{nk}n番目のデータの正解ラベルで、クラスKに属するなら1、そうでないなら0です。つまり式(3)は、正しく分類されたy_{nk}のみを抽出して積をとっている計算になります。ロジスティック回帰と同様、E(\mathbf{w}) = - \ln L(\mathbf{w})という交差エントロピー誤差関数を定義すれば


\displaystyle E(\mathbf{w}) = - \sum_{n=1}^{N} \sum_{k=1}^{K} t_{nk} \ln y_{nk} \tag{4}

となり、これを最小にする\mathbf{w}が求めるパラメータです。多クラスなので2クラスのロジスティック回帰とは異なり、求めるパラメータ\mathbf{w}はクラス数分存在します。合成関数の微分とソフトマックス関数の微分より、


\begin{eqnarray*}
\displaystyle \frac{\partial E(\mathbf{w})}{\partial \mathbf{w}_i} &=& \frac{\partial E(\mathbf{w})}{\partial y_{nk}} \frac{\partial y_{nk}}{\partial a_{ni}}\frac{\partial a_{ni}}{\partial \mathbf{w}_i} \tag{5} \\
\displaystyle &=& - \sum_{n=1}^{N}\sum_{k=1}^{K} \frac{t_{nk}}{y_{nk}} y_{nk} (I_{ki} - y_{ni}) \mathbf{x}_n \tag{6} \\
&=&  \sum_{n=1}^{N} \sum_{k=1}^{K}t_{nk}(y_{ni}-I_{ki})\mathbf{x}_n \tag{7}
\end{eqnarray*}

となります。I_{ki}は単位行列のki成分です。この式変形はすごい悩んだ。式(5)の書き方があんまりよくない、、というか間違ってるかもしれない。\sum_k{y}_ka_iで微分すると、a_iy_1, \cdots , y_k全てに影響しているので\sum_k \frac{\partial y_k}{\partial a_i}となることも注意。

ここで、t_{nk}k=1,\cdots,Kの中で、いずれか1つのみで1となるから、


\displaystyle \sum_{k=1}^{K} t_{nk} y_{ni} \mathbf{x}_n = y_{ni}\mathbf{x}_n \tag{8}

となります。また、k=iのときのみI_{ki}=1だから


\displaystyle \sum_{k=1}^{K} t_{nk} I_{ki} \mathbf{x}_n = t_{ni}\mathbf{x}_n \tag{9}

です。したがって、


\displaystyle \frac{\partial E(\mathbf{w})}{\partial \mathbf{w}_i} = \sum_{n=1}^{N}(y_{ni}-t_{ni})\mathbf{x}_n \tag{10}

となります。式(10)は入力D次元のベクトルです。

以上より、求める勾配は式(7)の微分を\mathbf{w}_1,\cdots,\mathbf{w}_Kまで並べた



 \left(
    \begin{array}{c}
      \displaystyle  \sum_{n=1}^{N} (y_{n1}-t_{n1})\mathbf{x}_n \\
      \vdots  \\
       \displaystyle \sum_{n=1}^{N} (y_{nK}-t_{nK})\mathbf{x}_n
    \end{array}
  \right) \tag{8}

となり、これはD \times K次元ベクトルです。これを用いて最急降下法で解を求めることができますが、ニュートン法を使うために次回はヘッセ行列を計算したいと思います。

次回: www.iwanttobeacat.com

最終的な実験結果はこちらです www.iwanttobeacat.com